162 lines
6 KiB
Python
162 lines
6 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright 2018 Espressif Systems (Shanghai) PTE LTD
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
from builtins import str
|
|
import http.client
|
|
import argparse
|
|
import Utility
|
|
|
|
|
|
def verbose_print(verbosity, *args):
|
|
if (verbosity):
|
|
Utility.console_log(''.join(str(elems) for elems in args))
|
|
|
|
|
|
def test_get_handler(ip, port, verbosity=False):
|
|
verbose_print(verbosity, "======== GET HANDLER TEST =============")
|
|
# Establish HTTP connection
|
|
verbose_print(verbosity, "Connecting to => " + ip + ":" + port)
|
|
sess = http.client.HTTPConnection(ip + ":" + port, timeout=15)
|
|
|
|
uri = "/hello?query1=value1&query2=value2&query3=value3"
|
|
# GET hello response
|
|
test_headers = {"Test-Header-1":"Test-Value-1", "Test-Header-2":"Test-Value-2"}
|
|
verbose_print(verbosity, "Sending GET to URI : ", uri)
|
|
verbose_print(verbosity, "Sending additional headers : ")
|
|
for k, v in test_headers.items():
|
|
verbose_print(verbosity, "\t", k, ": ", v)
|
|
sess.request("GET", url=uri, headers=test_headers)
|
|
resp = sess.getresponse()
|
|
resp_hdrs = resp.getheaders()
|
|
resp_data = resp.read().decode()
|
|
try:
|
|
if resp.getheader("Custom-Header-1") != "Custom-Value-1":
|
|
return False
|
|
if resp.getheader("Custom-Header-2") != "Custom-Value-2":
|
|
return False
|
|
except Exception:
|
|
return False
|
|
|
|
verbose_print(verbosity, "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv")
|
|
verbose_print(verbosity, "Server response to GET /hello")
|
|
verbose_print(verbosity, "Response Headers : ")
|
|
for k, v in resp_hdrs:
|
|
verbose_print(verbosity, "\t", k, ": ", v)
|
|
verbose_print(verbosity, "Response Data : " + resp_data)
|
|
verbose_print(verbosity, "========================================\n")
|
|
|
|
# Close HTTP connection
|
|
sess.close()
|
|
return (resp_data == "Hello World!")
|
|
|
|
|
|
def test_post_handler(ip, port, msg, verbosity=False):
|
|
verbose_print(verbosity, "======== POST HANDLER TEST ============")
|
|
# Establish HTTP connection
|
|
verbose_print(verbosity, "Connecting to => " + ip + ":" + port)
|
|
sess = http.client.HTTPConnection(ip + ":" + port, timeout=15)
|
|
|
|
# POST message to /echo and get back response
|
|
sess.request("POST", url="/echo", body=msg)
|
|
resp = sess.getresponse()
|
|
resp_data = resp.read().decode()
|
|
verbose_print(verbosity, "Server response to POST /echo (" + msg + ")")
|
|
verbose_print(verbosity, "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv")
|
|
verbose_print(verbosity, resp_data)
|
|
verbose_print(verbosity, "========================================\n")
|
|
|
|
# Close HTTP connection
|
|
sess.close()
|
|
return (resp_data == msg)
|
|
|
|
|
|
def test_put_handler(ip, port, verbosity=False):
|
|
verbose_print(verbosity, "======== PUT HANDLER TEST =============")
|
|
# Establish HTTP connection
|
|
verbose_print(verbosity, "Connecting to => " + ip + ":" + port)
|
|
sess = http.client.HTTPConnection(ip + ":" + port, timeout=15)
|
|
|
|
# PUT message to /ctrl to disable /hello URI handler
|
|
verbose_print(verbosity, "Disabling /hello handler")
|
|
sess.request("PUT", url="/ctrl", body="0")
|
|
resp = sess.getresponse()
|
|
resp.read()
|
|
|
|
sess.request("GET", url="/hello")
|
|
resp = sess.getresponse()
|
|
resp_data1 = resp.read().decode()
|
|
verbose_print(verbosity, "Response on GET /hello : " + resp_data1)
|
|
|
|
# PUT message to /ctrl to enable /hello URI handler
|
|
verbose_print(verbosity, "Enabling /hello handler")
|
|
sess.request("PUT", url="/ctrl", body="1")
|
|
resp = sess.getresponse()
|
|
resp.read()
|
|
|
|
sess.request("GET", url="/hello")
|
|
resp = sess.getresponse()
|
|
resp_data2 = resp.read().decode()
|
|
verbose_print(verbosity, "Response on GET /hello : " + resp_data2)
|
|
|
|
# Close HTTP connection
|
|
sess.close()
|
|
return ((resp_data2 == "Hello World!") and (resp_data1 == "This URI doesn't exist"))
|
|
|
|
|
|
def test_custom_uri_query(ip, port, query, verbosity=False):
|
|
verbose_print(verbosity, "======== GET HANDLER TEST =============")
|
|
# Establish HTTP connection
|
|
verbose_print(verbosity, "Connecting to => " + ip + ":" + port)
|
|
sess = http.client.HTTPConnection(ip + ":" + port, timeout=15)
|
|
|
|
uri = "/hello?" + query
|
|
# GET hello response
|
|
verbose_print(verbosity, "Sending GET to URI : ", uri)
|
|
sess.request("GET", url=uri, headers={})
|
|
resp = sess.getresponse()
|
|
resp_data = resp.read().decode()
|
|
|
|
verbose_print(verbosity, "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv")
|
|
verbose_print(verbosity, "Server response to GET /hello")
|
|
verbose_print(verbosity, "Response Data : " + resp_data)
|
|
verbose_print(verbosity, "========================================\n")
|
|
|
|
# Close HTTP connection
|
|
sess.close()
|
|
return (resp_data == "Hello World!")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# Configure argument parser
|
|
parser = argparse.ArgumentParser(description='Run HTTPd Test')
|
|
parser.add_argument('IP', metavar='IP', type=str, help='Server IP')
|
|
parser.add_argument('port', metavar='port', type=str, help='Server port')
|
|
parser.add_argument('msg', metavar='message', type=str, help='Message to be sent to server')
|
|
args = vars(parser.parse_args())
|
|
|
|
# Get arguments
|
|
ip = args['IP']
|
|
port = args['port']
|
|
msg = args['msg']
|
|
|
|
if not test_get_handler(ip, port, True):
|
|
Utility.console_log("Failed!")
|
|
if not test_post_handler(ip, port, msg, True):
|
|
Utility.console_log("Failed!")
|
|
if not test_put_handler(ip, port, True):
|
|
Utility.console_log("Failed!")
|