2828
2929#include " src/common/fs/temp_file.h"
3030#include " src/common/system/clock.h"
31+ #include " src/common/system/kernel_version.h"
3132#include " src/common/system/tcp_socket.h"
3233#include " src/common/system/udp_socket.h"
3334#include " src/common/system/unix_socket.h"
@@ -490,9 +491,10 @@ TEST_F(SocketTraceBPFTest, LargeMessages) {
490491 std::string large_response =
491492 " HTTP/1.1 200 OK\r\n "
492493 " Content-Type: application/json; msg2\r\n "
493- " Content-Length: 131072\r\n "
494+ // "Content-Length: 131072\r\n"
495+ " Content-Length: 3512768\r\n " // 21x it
494496 " \r\n " ;
495- large_response += std::string (131072 , ' +' );
497+ large_response += std::string (3512768 , ' +' );
496498
497499 testing::SendRecvScript script ({
498500 {{kHTTPReqMsg1 }, {large_response}},
@@ -507,19 +509,29 @@ TEST_F(SocketTraceBPFTest, LargeMessages) {
507509 GetMutableConnTracker (system.ClientPID (), system.ClientFD ()));
508510 EXPECT_EQ (client_tracker->send_data ().data_buffer ().Head (), kHTTPReqMsg1 );
509511 std::string client_recv_data (client_tracker->recv_data ().data_buffer ().Head ());
510- EXPECT_THAT (client_recv_data.size (), 131153 );
512+ EXPECT_THAT (client_recv_data.size (), 3512850 );
511513 EXPECT_THAT (client_recv_data, HasSubstr (" +++++" ));
512514 EXPECT_EQ (client_recv_data.substr (client_recv_data.size () - 5 , 5 ), " +++++" );
513515
514- // The server's send syscall transmits all 131153 bytes in one shot.
516+ // The server's send syscall transmits all 3512850 bytes in one shot.
515517 // This is over the limit that we can transmit through BPF, and so we expect
516- // filler bytes on this side of the connection. Note that the client doesn't have the
518+ // filler bytes on this side of the connection (up to 1MB) . Note that the client doesn't have the
517519 // same behavior, because the recv syscall provides the data in chunks.
518520 ASSERT_OK_AND_ASSIGN (auto * server_tracker,
519521 GetMutableConnTracker (system.ServerPID (), system.ServerFD ()));
520522 EXPECT_EQ (server_tracker->recv_data ().data_buffer ().Head (), kHTTPReqMsg1 );
521523 std::string server_send_data (server_tracker->send_data ().data_buffer ().Head ());
522- EXPECT_THAT (server_send_data.size (), 131153 );
524+ auto kernel = system::GetCachedKernelVersion ();
525+ bool kernelGreaterThan5_1 = kernel.version >= 5 || (kernel.version == 5 && kernel.major_rev >= 1 );
526+ if (kernelGreaterThan5_1) {
527+ // CHUNK_LIMIT * MAX_MSG_SIZE bytes + up to 1MB filler.
528+ // Currently 84*30720 + 932,370 filler bytes = 3,512,850
529+ EXPECT_THAT (server_send_data.size (), 3512850 );
530+ } else {
531+ // CHUNK_LIMIT * MAX_MSG_SIZE bytes + up to 1MB filler.
532+ // Currently 4*30720 + 1024*1024 = 1,171,456, leaving gap of 2,341,394 bytes
533+ EXPECT_THAT (server_send_data.size (), 1171456 );
534+ }
523535 EXPECT_THAT (server_send_data, HasSubstr (" +++++" ));
524536 // We expect filling with \0 bytes.
525537 EXPECT_EQ (server_send_data.substr (server_send_data.size () - 5 , 5 ), ConstStringView (" \0\0\0\0\0 " ));
0 commit comments