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 }