1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-21 10:26:06 +03:00
esp8266/tests/device/test_http_client/test_http_client.py
Earle F. Philhower, III 41ba21613d
Fix Python3 errors for device tests (#6670)
* Fix Python3 errors for device tests

The Python3 migration didn't include fixes for local scripts in the
device test tree.

Fatal build and run Python errors fixed.

The last update to xunitmerge is ~5 years ago, so it looks to be
unsupported now.

Use a local copy of the two components to allow patching to work with
Python3.

The serial test seems to send garbage chars (non-ASCII/etc.), so use a
codepage 437 which supports all 255 chars.

Fixes: #6660

* Run tests at 160MHz (req'd for some SSL connections)

* Fix debuglevel options for builder

* Fix Python3 interpreter path in xunitmerge

* Remove virtualenv on "make clean"

* Add appropriate attribution, license to xunitmerge

Add like to the original sources with the author's license to the
copied/fixed xunitmerge files.
2019-10-26 13:58:54 -07:00

92 lines
2.9 KiB
Python

from mock_decorators import setup, teardown
from flask import Flask, request, redirect
from threading import Thread
import urllib
import os
import ssl
import time
@setup('HTTP GET & POST requests')
def setup_http_get(e):
app = Flask(__name__)
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route('/shutdown')
def shutdown():
shutdown_server()
return 'Server shutting down...'
@app.route("/", methods = ['GET', 'POST'])
def root():
print('Got data: ' + request.data.decode());
return 'hello!!!'
@app.route("/data")
def get_data():
size = int(request.args['size'])
return 'a'*size
@app.route("/target")
def target():
return "redirect success"
@app.route("/redirect301")
def redirect301():
return redirect("http://{}:8088/target".format(request.args['host']), code=301)
@app.route("/redirect302")
def redirect302():
return redirect("http://{}:8088/target".format(request.args['host']), code=302)
@app.route("/redirect303", methods = ['POST'])
def redirect303():
return redirect("http://{}:8088/target".format(request.data), code=303)
@app.route("/redirect307")
def redirect307():
return redirect("http://{}:8088/target".format(request.args['host']), code=307)
def flaskThread():
app.run(host='0.0.0.0', port=8088)
th = Thread(target=flaskThread)
th.start()
@teardown('HTTP GET & POST requests')
def teardown_http_get(e):
response = urllib.request.urlopen('http://localhost:8088/shutdown')
html = response.read()
time.sleep(1) # avoid address in use error on macOS
@setup('HTTPS GET request')
def setup_http_get(e):
app = Flask(__name__)
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route('/shutdown')
def shutdown():
shutdown_server()
return 'Server shutting down...'
@app.route("/")
def root():
return 'hello!!!'
@app.route("/data")
def get_data():
size = int(request.args['size'])
return 'a'*size
def flaskThread():
p = os.path.dirname(os.path.abspath(__file__))
context = (p + '/server.crt', p + '/server.key')
print(context)
app.run(host='0.0.0.0', port=8088, ssl_context=context)
th = Thread(target=flaskThread)
th.start()
@teardown('HTTPS GET request')
def teardown_http_get(e):
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
p = os.path.dirname(os.path.abspath(__file__))
response = urllib.request.urlopen('https://localhost:8088/shutdown', context=ctx)
html = response.read()