11
11
#include < map>
12
12
#include < memory>
13
13
#include < mutex>
14
+ #include < numeric>
14
15
#include < string>
15
16
#include < thread>
16
17
#include < utility>
@@ -558,7 +559,6 @@ TEST_F(BasicCurlHttpTests, ElegantQuitQuick)
558
559
ASSERT_TRUE (handler->is_called_ );
559
560
ASSERT_TRUE (handler->got_response_ );
560
561
}
561
-
562
562
TEST_F (BasicCurlHttpTests, BackgroundThreadWaitMore)
563
563
{
564
564
{
@@ -581,3 +581,128 @@ TEST_F(BasicCurlHttpTests, BackgroundThreadWaitMore)
581
581
ASSERT_TRUE (http_client.MaybeSpawnBackgroundThread ());
582
582
}
583
583
}
584
+
585
+ #ifdef ENABLE_OTLP_COMPRESSION_PREVIEW
586
+ struct GzipEventHandler : public CustomEventHandler
587
+ {
588
+ ~GzipEventHandler () override = default ;
589
+
590
+ void OnResponse (http_client::Response & /* response */ ) noexcept override {}
591
+
592
+ void OnEvent (http_client::SessionState state, nostd::string_view reason) noexcept override
593
+ {
594
+ is_called_ = true ;
595
+ state_ = state;
596
+ reason_ = std::string{reason};
597
+ }
598
+
599
+ bool is_called_ = false ;
600
+ http_client::SessionState state_ = static_cast <http_client::SessionState>(-1 );
601
+ std::string reason_;
602
+ };
603
+
604
+ TEST_F (BasicCurlHttpTests, GzipCompressibleData)
605
+ {
606
+ received_requests_.clear ();
607
+ auto session_manager = http_client::HttpClientFactory::Create ();
608
+ EXPECT_TRUE (session_manager != nullptr );
609
+
610
+ auto session = session_manager->CreateSession (" http://127.0.0.1:19000" );
611
+ auto request = session->CreateRequest ();
612
+ request->SetUri (" post/" );
613
+ request->SetMethod (http_client::Method::Post);
614
+
615
+ const auto original_size = 500UL ;
616
+ http_client::Body body (original_size);
617
+ std::iota (body.begin (), body.end (), 0 );
618
+ request->SetBody (body);
619
+ request->AddHeader (" Content-Type" , " text/plain" );
620
+ request->SetCompression (opentelemetry::ext::http::client::Compression::kGzip );
621
+ auto handler = std::make_shared<GzipEventHandler>();
622
+ session->SendRequest (handler);
623
+ ASSERT_TRUE (waitForRequests (30 , 1 ));
624
+ session->FinishSession ();
625
+ ASSERT_TRUE (handler->is_called_ );
626
+ ASSERT_EQ (handler->state_ , http_client::SessionState::Response);
627
+ ASSERT_TRUE (handler->reason_ .empty ());
628
+
629
+ auto http_request =
630
+ dynamic_cast <opentelemetry::ext::http::client::curl::Request *>(request.get ());
631
+ ASSERT_TRUE (http_request != nullptr );
632
+ ASSERT_LT (http_request->body_ .size (), original_size);
633
+
634
+ session_manager->CancelAllSessions ();
635
+ session_manager->FinishAllSessions ();
636
+ }
637
+
638
+ TEST_F (BasicCurlHttpTests, GzipIncompressibleData)
639
+ {
640
+ received_requests_.clear ();
641
+ auto session_manager = http_client::HttpClientFactory::Create ();
642
+ EXPECT_TRUE (session_manager != nullptr );
643
+
644
+ auto session = session_manager->CreateSession (" http://127.0.0.1:19000" );
645
+ auto request = session->CreateRequest ();
646
+ request->SetUri (" post/" );
647
+ request->SetMethod (http_client::Method::Post);
648
+
649
+ // Random data generated using code snippet below.
650
+ // const auto original_size = 500UL;
651
+ // http_client::Body body(original_size);
652
+ // std::random_device rd;
653
+ // std::mt19937 gen(rd());
654
+ // std::uniform_int_distribution<> uid(1, 255);
655
+ // std::generate(body.begin(), body.end(), [&]() { return uid(gen); });
656
+
657
+ // The input values are fixed to make the test repeatable in the event that some distributions
658
+ // might yield results that are, in fact, compressible.
659
+ http_client::Body body = {
660
+ 140 , 198 , 12 , 56 , 165 , 185 , 173 , 20 , 13 , 83 , 127 , 223 , 77 , 38 , 224 , 43 , 236 , 10 , 178 ,
661
+ 75 , 169 , 157 , 136 , 199 , 74 , 30 , 148 , 195 , 51 , 30 , 225 , 21 , 121 , 219 , 7 , 155 , 198 , 121 ,
662
+ 205 , 102 , 80 , 38 , 132 , 202 , 45 , 229 , 206 , 90 , 150 , 202 , 53 , 221 , 54 , 37 , 172 , 90 , 238 ,
663
+ 248 , 191 , 240 , 109 , 227 , 248 , 41 , 251 , 121 , 35 , 226 , 107 , 122 , 15 , 242 , 203 , 45 , 64 , 195 ,
664
+ 186 , 23 , 1 , 158 , 61 , 196 , 182 , 26 , 201 , 47 , 211 , 241 , 251 , 209 , 255 , 170 , 181 , 192 , 89 ,
665
+ 133 , 176 , 60 , 178 , 97 , 168 , 223 , 152 , 9 , 118 , 98 , 169 , 240 , 170 , 15 , 13 , 161 , 24 , 57 ,
666
+ 123 , 117 , 230 , 30 , 244 , 117 , 238 , 255 , 198 , 232 , 95 , 148 , 37 , 61 , 67 , 103 , 31 , 240 , 52 ,
667
+ 21 , 145 , 175 , 201 , 86 , 19 , 61 , 228 , 76 , 131 , 185 , 111 , 149 , 203 , 143 , 16 , 142 , 95 , 173 ,
668
+ 42 , 106 , 39 , 203 , 116 , 235 , 20 , 162 , 112 , 173 , 112 , 70 , 126 , 191 , 210 , 219 , 90 , 145 , 126 ,
669
+ 118 , 43 , 241 , 101 , 66 , 175 , 179 , 5 , 233 , 208 , 164 , 180 , 83 , 214 , 194 , 173 , 29 , 179 , 149 ,
670
+ 75 , 202 , 17 , 152 , 139 , 130 , 94 , 247 , 142 , 249 , 159 , 224 , 205 , 131 , 93 , 82 , 186 , 226 , 210 ,
671
+ 84 , 17 , 212 , 155 , 61 , 226 , 103 , 152 , 37 , 3 , 193 , 216 , 219 , 203 , 101 , 99 , 33 , 59 , 38 ,
672
+ 106 , 62 , 232 , 127 , 44 , 125 , 90 , 169 , 148 , 238 , 34 , 106 , 12 , 221 , 90 , 173 , 67 , 122 , 232 ,
673
+ 161 , 89 , 198 , 43 , 241 , 195 , 248 , 219 , 35 , 47 , 200 , 11 , 227 , 168 , 246 , 243 , 103 , 38 , 17 ,
674
+ 203 , 237 , 203 , 158 , 204 , 89 , 231 , 19 , 24 , 25 , 199 , 160 , 233 , 43 , 117 , 144 , 196 , 117 , 152 ,
675
+ 42 , 121 , 189 , 217 , 202 , 221 , 250 , 157 , 237 , 47 , 29 , 64 , 32 , 10 , 32 , 243 , 28 , 114 , 158 ,
676
+ 228 , 102 , 36 , 191 , 139 , 217 , 161 , 162 , 186 , 19 , 141 , 212 , 49 , 1 , 239 , 153 , 107 , 249 , 31 ,
677
+ 235 , 138 , 73 , 80 , 58 , 152 , 15 , 149 , 50 , 42 , 84 , 75 , 95 , 82 , 56 , 86 , 143 , 45 , 214 ,
678
+ 11 , 184 , 164 , 181 , 249 , 74 , 184 , 26 , 207 , 165 , 162 , 240 , 154 , 90 , 56 , 175 , 72 , 4 , 166 ,
679
+ 188 , 78 , 232 , 87 , 243 , 50 , 59 , 62 , 175 , 213 , 210 , 182 , 31 , 123 , 91 , 118 , 98 , 249 , 23 ,
680
+ 170 , 240 , 228 , 236 , 121 , 87 , 132 , 129 , 250 , 41 , 227 , 204 , 250 , 147 , 145 , 109 , 149 , 210 , 21 ,
681
+ 174 , 165 , 127 , 234 , 64 , 211 , 52 , 93 , 126 , 117 , 231 , 216 , 210 , 15 , 16 , 2 , 167 , 215 , 178 ,
682
+ 104 , 245 , 119 , 211 , 235 , 120 , 135 , 202 , 117 , 150 , 101 , 94 , 201 , 136 , 179 , 205 , 167 , 212 , 236 ,
683
+ 7 , 178 , 132 , 228 , 65 , 230 , 90 , 171 , 109 , 31 , 83 , 31 , 210 , 123 , 136 , 76 , 186 , 81 , 205 ,
684
+ 63 , 35 , 21 , 121 , 152 , 22 , 242 , 199 , 106 , 217 , 199 , 211 , 206 , 165 , 88 , 77 , 112 , 108 , 193 ,
685
+ 122 , 8 , 193 , 74 , 91 , 50 , 6 , 156 , 185 , 165 , 15 , 92 , 116 , 3 , 18 , 244 , 165 , 191 , 2 ,
686
+ 183 , 9 , 164 , 116 , 75 , 127 };
687
+ const auto original_size = body.size ();
688
+
689
+ request->SetBody (body);
690
+ request->AddHeader (" Content-Type" , " text/plain" );
691
+ request->SetCompression (opentelemetry::ext::http::client::Compression::kGzip );
692
+ auto handler = std::make_shared<GzipEventHandler>();
693
+ session->SendRequest (handler);
694
+ ASSERT_TRUE (waitForRequests (30 , 1 ));
695
+ session->FinishSession ();
696
+ ASSERT_TRUE (handler->is_called_ );
697
+ ASSERT_EQ (handler->state_ , http_client::SessionState::Response);
698
+ ASSERT_TRUE (handler->reason_ .empty ());
699
+
700
+ auto http_request =
701
+ dynamic_cast <opentelemetry::ext::http::client::curl::Request *>(request.get ());
702
+ ASSERT_TRUE (http_request != nullptr );
703
+ ASSERT_EQ (http_request->body_ .size (), original_size);
704
+
705
+ session_manager->CancelAllSessions ();
706
+ session_manager->FinishAllSessions ();
707
+ }
708
+ #endif // ENABLE_OTLP_COMPRESSION_PREVIEW
0 commit comments