@@ -5901,6 +5901,143 @@ TEST_F(ServerTest, PutWithContentProviderWithZstd) {
5901
5901
EXPECT_EQ (" PUT" , res->body );
5902
5902
}
5903
5903
5904
+ // Pre-compression logging tests
5905
+ TEST_F (ServerTest, PreCompressionLogging) {
5906
+ // Test data for compression (matches the actual /compress endpoint content)
5907
+ const std::string test_content = " 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ;
5908
+
5909
+ // Variables to capture logging data
5910
+ std::string pre_compression_body;
5911
+ std::string pre_compression_content_type;
5912
+ std::string pre_compression_content_encoding;
5913
+
5914
+ std::string post_compression_body;
5915
+ std::string post_compression_content_type;
5916
+ std::string post_compression_content_encoding;
5917
+
5918
+ // Set up pre-compression logger
5919
+ svr_.set_pre_compression_logger ([&](const Request &req, const Response &res) {
5920
+ pre_compression_body = res.body ;
5921
+ pre_compression_content_type = res.get_header_value (" Content-Type" );
5922
+ pre_compression_content_encoding = res.get_header_value (" Content-Encoding" );
5923
+ });
5924
+
5925
+ // Set up post-compression logger
5926
+ svr_.set_logger ([&](const Request &req, const Response &res) {
5927
+ post_compression_body = res.body ;
5928
+ post_compression_content_type = res.get_header_value (" Content-Type" );
5929
+ post_compression_content_encoding = res.get_header_value (" Content-Encoding" );
5930
+ });
5931
+
5932
+ // Test with gzip compression
5933
+ Headers headers;
5934
+ headers.emplace (" Accept-Encoding" , " gzip" );
5935
+
5936
+ auto res = cli_.Get (" /compress" , headers);
5937
+
5938
+ // Verify response was compressed
5939
+ ASSERT_TRUE (res);
5940
+ EXPECT_EQ (StatusCode::OK_200, res->status );
5941
+ EXPECT_EQ (" gzip" , res->get_header_value (" Content-Encoding" ));
5942
+
5943
+ // Verify pre-compression logger captured uncompressed content
5944
+ EXPECT_EQ (test_content, pre_compression_body);
5945
+ EXPECT_EQ (" text/plain" , pre_compression_content_type);
5946
+ EXPECT_TRUE (pre_compression_content_encoding.empty ()); // No encoding header before compression
5947
+
5948
+ // Verify post-compression logger captured compressed content
5949
+ EXPECT_NE (test_content, post_compression_body); // Should be different after compression
5950
+ EXPECT_EQ (" text/plain" , post_compression_content_type);
5951
+ EXPECT_EQ (" gzip" , post_compression_content_encoding);
5952
+
5953
+ // Verify compressed content is smaller
5954
+ EXPECT_LT (post_compression_body.size (), pre_compression_body.size ());
5955
+ }
5956
+
5957
+ TEST_F (ServerTest, PreCompressionLoggingWithBrotli) {
5958
+ const std::string test_content = " 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ;
5959
+
5960
+ std::string pre_compression_body;
5961
+ std::string post_compression_body;
5962
+
5963
+ svr_.set_pre_compression_logger ([&](const Request &req, const Response &res) {
5964
+ pre_compression_body = res.body ;
5965
+ });
5966
+
5967
+ svr_.set_logger ([&](const Request &req, const Response &res) {
5968
+ post_compression_body = res.body ;
5969
+ });
5970
+
5971
+ Headers headers;
5972
+ headers.emplace (" Accept-Encoding" , " br" );
5973
+
5974
+ auto res = cli_.Get (" /compress" , headers);
5975
+
5976
+ ASSERT_TRUE (res);
5977
+ EXPECT_EQ (StatusCode::OK_200, res->status );
5978
+ EXPECT_EQ (" br" , res->get_header_value (" Content-Encoding" ));
5979
+
5980
+ // Verify pre-compression content is uncompressed
5981
+ EXPECT_EQ (test_content, pre_compression_body);
5982
+
5983
+ // Verify post-compression content is compressed
5984
+ EXPECT_NE (test_content, post_compression_body);
5985
+ EXPECT_LT (post_compression_body.size (), pre_compression_body.size ());
5986
+ }
5987
+
5988
+ TEST_F (ServerTest, PreCompressionLoggingWithoutCompression) {
5989
+ const std::string test_content = " 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ;
5990
+
5991
+ std::string pre_compression_body;
5992
+ std::string post_compression_body;
5993
+
5994
+ svr_.set_pre_compression_logger ([&](const Request &req, const Response &res) {
5995
+ pre_compression_body = res.body ;
5996
+ });
5997
+
5998
+ svr_.set_logger ([&](const Request &req, const Response &res) {
5999
+ post_compression_body = res.body ;
6000
+ });
6001
+
6002
+ // Request without compression (use /nocompress endpoint)
6003
+ Headers headers;
6004
+ auto res = cli_.Get (" /nocompress" , headers);
6005
+
6006
+ ASSERT_TRUE (res);
6007
+ EXPECT_EQ (StatusCode::OK_200, res->status );
6008
+ EXPECT_TRUE (res->get_header_value (" Content-Encoding" ).empty ());
6009
+
6010
+ // Pre-compression logger should not be called when no compression is applied
6011
+ EXPECT_TRUE (pre_compression_body.empty ()); // Pre-compression logger not called
6012
+ EXPECT_EQ (test_content, post_compression_body); // Post-compression logger captures final content
6013
+ }
6014
+
6015
+ TEST_F (ServerTest, PreCompressionLoggingOnlyPreLogger) {
6016
+ const std::string test_content = " 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ;
6017
+
6018
+ std::string pre_compression_body;
6019
+ bool pre_logger_called = false ;
6020
+
6021
+ // Set only pre-compression logger
6022
+ svr_.set_pre_compression_logger ([&](const Request &req, const Response &res) {
6023
+ pre_compression_body = res.body ;
6024
+ pre_logger_called = true ;
6025
+ });
6026
+
6027
+ Headers headers;
6028
+ headers.emplace (" Accept-Encoding" , " gzip" );
6029
+
6030
+ auto res = cli_.Get (" /compress" , headers);
6031
+
6032
+ ASSERT_TRUE (res);
6033
+ EXPECT_EQ (StatusCode::OK_200, res->status );
6034
+ EXPECT_EQ (" gzip" , res->get_header_value (" Content-Encoding" ));
6035
+
6036
+ // Verify pre-compression logger was called
6037
+ EXPECT_TRUE (pre_logger_called);
6038
+ EXPECT_EQ (test_content, pre_compression_body);
6039
+ }
6040
+
5904
6041
TEST (ZstdDecompressor, ChunkedDecompression) {
5905
6042
std::string data;
5906
6043
for (size_t i = 0 ; i < 32 * 1024 ; ++i) {
0 commit comments