summaryrefslogtreecommitdiff
path: root/tests/tests.py
blob: 34d4f1323d8d8b5e45e648e6e64ec98fc1098bc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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()