UniEvent-HTTP
view release on metacpan or search on metacpan
clib/tests/client/basic.cc view on Meta::CPAN
auto res = p.client->get_response(req);
CHECK(res->compression.type == Compression::GZIP);
CHECK(res->code == 200);
CHECK(res->http_version == 11);
CHECK(res->body.to_string() == "hello world");
}
TEST("uncompression") {
AsyncTest test(1000);
ClientPair p(test.loop);
p.server->enable_echo();
p.client->uncompress_response(false);
auto req = Request::Builder()
.method(Request::Method::Post)
.uri("/")
.body("hello world")
.compress(Compression::GZIP)
.build();
CHECK(req->compression.type == Compression::GZIP);
auto res = p.client->get_response(req);
CHECK(res->headers.get("Content-Encoding") == "gzip");
static const uint8_t compressed_src[] = {0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0xcb,0x48,0xcd,0xc9,0xc9,0x57,0x28,0xcf,0x2f,0xca,0x49,0x01,0x00,0x85,0x11,0x4a,0x0d,0x0b,0x00,0x00,0x00};
string compressed((char*)compressed_src, sizeof(compressed_src));
CHECK(res->code == 200);
CHECK(res->http_version == 11);
CHECK(!!res->body.to_string());
CHECK((res->body.to_string() == compressed));
}
TEST("accept-encoding") {
AsyncTest test(1000, 1);
ClientPair p(test.loop);
p.server->enable_echo();
SECTION("gzip by default") {
auto req = Request::Builder()
.method(Request::Method::Post)
.uri("/")
.build();
p.server->request_event.prepend([&](auto& req){
test.happens();
CHECK(req->headers.get("Accept-Encoding") == "gzip");
});
p.client->get_response("/");
}
SECTION("gzip can be turned off") {
auto req = Request::Builder()
.method(Request::Method::Post)
.uri("/")
.allow_compression(Compression::IDENTITY)
.build();
CHECK(req->compression_prefs != static_cast<std::uint8_t>(Compression::IDENTITY));
p.server->request_event.prepend([&](auto& req){
test.happens();
CHECK(!req->headers.has("Accept-Encoding"));
});
p.client->get_response(req);
}
}
TEST("request via proxy") {
AsyncTest test(1000, {"proxy-1", "proxy-2"});
ClientPair p(test.loop, true);
p.server->enable_echo();
p.proxy.server->connection_event.add([&](auto, auto, auto){ test.happens("proxy-1"); });
auto req1 = Request::Builder().method(Request::Method::Get).uri("/").proxy(p.proxy.url).build();
auto res1 = p.client->get_response(req1);
CHECK(res1->code == 200);
CHECK(res1->http_version == 11);
auto proxy2 = new_proxy(test.loop);
proxy2.server->connection_event.add([&](auto, auto, auto){ test.happens("proxy-2"); });
auto req2 = Request::Builder().method(Request::Method::Get).uri("/").proxy(proxy2.url).build();
auto res2 = p.client->get_response(req2);
CHECK(res2->code == 200);
CHECK(res2->http_version == 11);
}
( run in 0.526 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )