40 lines
1.6 KiB
Plaintext
40 lines
1.6 KiB
Plaintext
append(event: dever.io.ReadEvent.Chunk(bytes), state: Bytes) (value: Bytes) { value = dever.bytes.concat(state, bytes) }
|
|
append(event: dever.io.ReadEvent.Failed(message), state: Bytes) (value: Bytes) { fail(dever.io.ReadEvent.Failed(message)) }
|
|
|
|
load(path: Text) (value: Bytes) {
|
|
file = dever.io.open(path)
|
|
value = reduce(append, dever.io.chunks(file, 4096), dever.bytes.fromText(""))
|
|
dever.io.close(file)
|
|
}
|
|
|
|
limits() (value: dever.http.Limits) {
|
|
value = dever.http.defaultLimits()
|
|
value.http2 = dever.http.defaultHttp2Limits()
|
|
}
|
|
|
|
route(request: dever.http.Request) (response: dever.http.Response) {
|
|
response = dever.http.Response { status = 200, headers = [], body = request.body }
|
|
}
|
|
|
|
serve(listener: dever.system.Listener, tls: dever.system.ServerTls) () {
|
|
dever.http.serveTls(route, listener, limits(), tls)
|
|
}
|
|
|
|
verify() (answer: Bool) {
|
|
certificate = blocking(load("server.pem"))
|
|
key = blocking(load("server-key.pem"))
|
|
root = blocking(load("root.pem"))
|
|
tls = dever.tls.server(certificate, key)
|
|
listener = dever.net.listen("127.0.0.1", 0)
|
|
server = run(serve(listener, tls))
|
|
origin = "https://localhost:" + int.toText(dever.net.port(listener))
|
|
client = dever.http.client(origin, dever.tls.client(root), limits(), dever.http.defaultPoolLimits())
|
|
request = dever.http.Request { method = "POST", target = "/echo", headers = [], body = dever.bytes.fromText("雪") }
|
|
first = dever.http.request(client, request)
|
|
second = dever.http.request(client, request)
|
|
dever.http.closeClient(client)
|
|
dever.net.closeListener(listener)
|
|
wait(server)
|
|
answer = first.status == 200 and first.body == request.body and second.body == request.body
|
|
}
|