Skip to content

Commit 61e9a2b

Browse files
committed
Basic unit tests for gzip
1 parent e2d6ed1 commit 61e9a2b

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

ext/test/http/curl_http_test.cc

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <map>
1111
#include <memory>
1212
#include <mutex>
13+
#include <numeric>
1314
#include <string>
1415
#include <utility>
1516
#include <vector>
@@ -526,3 +527,105 @@ TEST_F(BasicCurlHttpTests, FinishInAsyncCallback)
526527
}
527528
}
528529
}
530+
531+
struct GzipEventHandler : public CustomEventHandler
532+
{
533+
~GzipEventHandler() override = default;
534+
535+
void OnResponse(http_client::Response &response) noexcept override {}
536+
537+
void OnEvent(http_client::SessionState state, nostd::string_view reason) noexcept override
538+
{
539+
is_called_ = true;
540+
state_ = state;
541+
reason_ = std::string{reason};
542+
}
543+
544+
bool is_called_ = false;
545+
http_client::SessionState state_ = static_cast<http_client::SessionState>(-1);
546+
std::string reason_;
547+
};
548+
549+
#ifdef ENABLE_OTLP_COMPRESSION_PREVIEW
550+
TEST_F(BasicCurlHttpTests, GzipCompressibleData)
551+
{
552+
received_requests_.clear();
553+
auto session_manager = http_client::HttpClientFactory::Create();
554+
EXPECT_TRUE(session_manager != nullptr);
555+
556+
auto session = session_manager->CreateSession("http://127.0.0.1:19000");
557+
auto request = session->CreateRequest();
558+
request->SetUri("post/");
559+
request->SetMethod(http_client::Method::Post);
560+
561+
const auto original_size = 1000UL;
562+
http_client::Body body(original_size);
563+
std::iota(body.begin(), body.end(), 0);
564+
request->SetBody(body);
565+
request->AddHeader("Content-Type", "text/plain");
566+
request->SetCompression(opentelemetry::ext::http::client::Compression::kGzip);
567+
auto handler = std::make_shared<GzipEventHandler>();
568+
session->SendRequest(handler);
569+
ASSERT_TRUE(waitForRequests(30, 1));
570+
session->FinishSession();
571+
ASSERT_TRUE(handler->is_called_);
572+
ASSERT_EQ(handler->state_, http_client::SessionState::Response);
573+
ASSERT_EQ(handler->reason_, "");
574+
575+
auto http_request =
576+
dynamic_cast<opentelemetry::ext::http::client::curl::Request *>(request.get());
577+
ASSERT_TRUE(http_request != nullptr);
578+
ASSERT_LT(http_request->body_.size(), original_size);
579+
580+
session_manager->CancelAllSessions();
581+
session_manager->FinishAllSessions();
582+
}
583+
584+
TEST_F(BasicCurlHttpTests, GzipIncompressibleData)
585+
{
586+
received_requests_.clear();
587+
auto session_manager = http_client::HttpClientFactory::Create();
588+
EXPECT_TRUE(session_manager != nullptr);
589+
590+
auto session = session_manager->CreateSession("http://127.0.0.1:19000");
591+
auto request = session->CreateRequest();
592+
request->SetUri("post/");
593+
request->SetMethod(http_client::Method::Post);
594+
595+
http_client::Body body;
596+
597+
// Original source:
598+
// http://blog.chenshuo.com/2014/05/incompressible-zlibdeflate-data.html
599+
for (size_t step = 0; step <= 128; ++step)
600+
{
601+
for (size_t inc = 0; inc < step; ++inc)
602+
{
603+
for (size_t i = inc; i < 256; i += step)
604+
{
605+
body.push_back(i);
606+
}
607+
}
608+
}
609+
610+
const auto original_size = body.size();
611+
612+
request->SetBody(body);
613+
request->AddHeader("Content-Type", "text/plain");
614+
request->SetCompression(opentelemetry::ext::http::client::Compression::kGzip);
615+
auto handler = std::make_shared<GzipEventHandler>();
616+
session->SendRequest(handler);
617+
ASSERT_TRUE(waitForRequests(30, 1));
618+
session->FinishSession();
619+
ASSERT_TRUE(handler->is_called_);
620+
ASSERT_EQ(handler->state_, http_client::SessionState::Response);
621+
ASSERT_EQ(handler->reason_, "");
622+
623+
auto http_request =
624+
dynamic_cast<opentelemetry::ext::http::client::curl::Request *>(request.get());
625+
ASSERT_TRUE(http_request != nullptr);
626+
ASSERT_EQ(http_request->body_.size(), original_size);
627+
628+
session_manager->CancelAllSessions();
629+
session_manager->FinishAllSessions();
630+
}
631+
#endif // ENABLE_OTLP_COMPRESSION_PREVIEW

0 commit comments

Comments
 (0)