Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,52 @@
|
||||
"""在验收容器的回环接口验证已脱离开发包的 HTTP/TLS 产物。"""
|
||||
|
||||
import http.client
|
||||
import json
|
||||
from pathlib import Path
|
||||
import socket
|
||||
import ssl
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
|
||||
root = Path("/work/http")
|
||||
(root / "config").mkdir(exist_ok=True)
|
||||
certificates = Path("/work/tls")
|
||||
for encrypted in (False, True):
|
||||
with socket.socket() as listener:
|
||||
listener.bind(("127.0.0.1", 0))
|
||||
port = listener.getsockname()[1]
|
||||
settings = {"http": {"host": "127.0.0.1", "port": port},
|
||||
"sites": {"public": {"path": "", "hosts": ["localhost"]}}}
|
||||
if encrypted:
|
||||
settings["http"]["tls"] = {"certificate": str(certificates / "server.pem"),
|
||||
"key": str(certificates / "server-key.pem")}
|
||||
(root / "config/setting.json").write_text(json.dumps(settings))
|
||||
with (root / f"server-{encrypted}.log").open("w") as log:
|
||||
server = subprocess.Popen([str(root / "app")], stdout=log, stderr=log)
|
||||
try:
|
||||
deadline = time.monotonic() + 10
|
||||
while True:
|
||||
assert server.poll() is None, (root / f"server-{encrypted}.log").read_text()
|
||||
try:
|
||||
with socket.create_connection(("127.0.0.1", port), timeout=1):
|
||||
break
|
||||
except ConnectionRefusedError:
|
||||
assert time.monotonic() < deadline, "HTTP server startup timed out"
|
||||
time.sleep(0.05)
|
||||
if encrypted:
|
||||
context = ssl.create_default_context(cafile=str(certificates / "root.pem"))
|
||||
client = http.client.HTTPSConnection("localhost", port, context=context, timeout=5)
|
||||
else:
|
||||
client = http.client.HTTPConnection("localhost", port, timeout=5)
|
||||
try:
|
||||
client.request("GET", "/demo/greeting/greet?name=Dever")
|
||||
response = client.getresponse()
|
||||
assert response.status == 200, response.status
|
||||
assert json.load(response)["data"] == "Hello, Dever"
|
||||
finally:
|
||||
client.close()
|
||||
finally:
|
||||
server.terminate()
|
||||
server.wait(timeout=10)
|
||||
print("HTTP_TLS_PASS")
|
||||
Reference in new issue
Block a user