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 )