summaryrefslogtreecommitdiff
path: root/tests/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tests.py')
-rw-r--r--tests/tests.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/tests.py b/tests/tests.py
new file mode 100644
index 0000000..34d4f13
--- /dev/null
+++ b/tests/tests.py
@@ -0,0 +1,72 @@
+import http.server
+import subprocess
+import threading
+import sqlite3
+import json
+
+tests = (
+ {
+ "request_url": "http://localhost:8080/foobar",
+ "request_method": "GET",
+ "response_body": "foobar",
+ "response_headers": "Content-Size: 6\r\n",
+ "response_status_code": 200,
+ },
+)
+
+test_idx = 0
+
+class Handler(http.server.BaseHTTPRequestHandler):
+ def version_string(self):
+ return "testclient/1.0"
+
+ def date_time_string(self, timestamp=None):
+ return "Mon, 05 Sep 2022 19:26:53 GMT"
+
+ def do_GET(self):
+ self._handle_test("GET")
+
+ def do_POST(self):
+ self._handle_test("POST")
+
+ def _handle_test(self, method):
+ global test_idx
+ data = tests[test_idx]
+ test_idx += 1
+
+ try:
+ if method != data["request_method"]:
+ self.send_response(400)
+ self.end_headers()
+ else:
+ self.send_response(data["response_status_code"])
+ self.flush_headers()
+ self.wfile.write(data["response_headers"].encode("latin1", "strict"))
+ self.end_headers()
+ self.wfile.write(data["response_body"].encode("utf-8"))
+ except:
+ self.send_response(500)
+ self.end_headers()
+
+ threading.Thread(target=server.shutdown).start()
+
+
+server = http.server.HTTPServer(('', 8080), Handler)
+server_thread = threading.Thread(target=server.serve_forever)
+server_thread.start()
+
+for test in tests:
+ if test["request_method"] == "GET":
+ table = "http_get"
+ elif test["request_method"] == "POST":
+ table = "http_post"
+ request_url = test["request_url"]
+ sql = f".mode json\nselect request_method, request_url, request_headers, request_body, * from {table}('{request_url}')"
+ cp = subprocess.run(["./build/tests/Debug/sqlite3.exe", ":memory:"], input=sql, text=True, capture_output=True)
+ j = json.loads(cp.stdout)
+ print(j)
+ assert j[0]["response_status_code"] == test["response_status_code"]
+ assert j[0]["response_body"] == test["response_body"]
+ assert j[0]["response_headers"] == "Date: Mon, 05 Sep 2022 19:26:53 GMT\r\nServer: testclient/1.0\r\n" + test["response_headers"] + "\r\n"
+
+server_thread.join()