1
0

12.cors.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import signal
  2. import subprocess
  3. import time
  4. from selenium.webdriver import Chrome
  5. import template
  6. import util
  7. from pywebio.input import *
  8. from pywebio.session import run_js
  9. from pywebio.utils import run_as_function
  10. def target():
  11. run_js("$('#markdown-body>.alert-warning').remove()")
  12. template.basic_output()
  13. template.background_output()
  14. run_as_function(template.basic_input())
  15. actions(buttons=['Continue'])
  16. template.background_input()
  17. def test_once(browser: Chrome, output_file, process_func):
  18. template.test_output(browser)
  19. template.test_input(browser)
  20. time.sleep(1)
  21. return template.save_output(browser, output_file, process_func)[0]
  22. def test(server_proc: subprocess.Popen, browser: Chrome):
  23. raw_html = test_once(browser, '12.tornado_cors.html',
  24. process_func=lambda i: i.replace('http://localhost:5000', 'http://localhost:8080'))
  25. assert 'http://localhost:5000' in raw_html # origin
  26. server_proc.send_signal(signal.SIGINT)
  27. time.sleep(4)
  28. browser.get('http://localhost:5000/?pywebio_api=http://localhost:8081/')
  29. raw_html = test_once(browser, '12.aiohttp_cors.html',
  30. process_func=lambda i: i.replace('http://localhost:5000', 'http://localhost:8080').replace(
  31. 'localhost:8081', 'localhost:8080'))
  32. assert 'http://localhost:5000' in raw_html and 'localhost:8081' in raw_html # origin
  33. server_proc.send_signal(signal.SIGINT)
  34. time.sleep(4)
  35. browser.get('http://localhost:5000/?pywebio_api=http://localhost:8082/')
  36. raw_html = test_once(browser, '12.flask_cors.html',
  37. process_func=lambda i: i.replace('http://localhost:5000', 'http://localhost:8080').replace(
  38. 'localhost:8082', 'localhost:8080'))
  39. assert 'http://localhost:5000' in raw_html and 'localhost:8082' in raw_html # origin
  40. def start_test_server():
  41. from pywebio import start_server as tornado_server
  42. from pywebio.platform.flask import start_server as flask_server
  43. from pywebio.platform.aiohttp import start_server as aiohttp_server
  44. import asyncio
  45. util.start_static_server()
  46. try:
  47. tornado_server(target, port=8080, host='127.0.0.1', allowed_origins=['http://localhost:5000'], cdn=False)
  48. except:
  49. print('tornado_server exit')
  50. loop = asyncio.new_event_loop()
  51. asyncio.set_event_loop(loop)
  52. try:
  53. aiohttp_server(target, port=8081, host='127.0.0.1', allowed_origins=['http://localhost:5000'], cdn=False)
  54. except:
  55. print('aiohttp_server exit')
  56. try:
  57. flask_server(target, port=8082, host='127.0.0.1', allowed_origins=['http://localhost:5000'], cdn=False)
  58. except:
  59. print('flask_server exit')
  60. if __name__ == '__main__':
  61. util.run_test(start_test_server, test,
  62. address='http://localhost:5000/?pywebio_api=http://localhost:8080/')