2828#include < sys/types.h>
2929#include < unistd.h>
3030
31+ #include < string_view>
32+
33+ #include " gmock/gmock.h"
3134#include " gtest/gtest.h"
35+ #include " absl/strings/escaping.h"
3236#include " test/syscalls/linux/ip_socket_test_util.h"
3337#include " test/syscalls/linux/unix_domain_socket_test_util.h"
3438#include " test/util/capability_util.h"
@@ -66,7 +70,7 @@ namespace {
6670using ::testing::AnyOf;
6771using ::testing::Eq;
6872
69- constexpr char kMessage [] = " soweoneul malhaebwa" ;
73+ constexpr std::string_view kMessage = " soweoneul malhaebwa" ;
7074constexpr in_port_t kPort = 0x409c ; // htons(40000)
7175constexpr int kTimeoutMS = 60 * 1000 ;
7276
@@ -82,9 +86,9 @@ void SendUDPMessage(int sock) {
8286 dest.sin_port = kPort ;
8387 dest.sin_addr .s_addr = htonl (INADDR_LOOPBACK);
8488 dest.sin_family = AF_INET;
85- EXPECT_THAT (sendto (sock, kMessage , sizeof ( kMessage ), 0 ,
89+ EXPECT_THAT (sendto (sock, kMessage . data (), kMessage . size ( ), 0 ,
8690 reinterpret_cast <struct sockaddr *>(&dest), sizeof (dest)),
87- SyscallSucceedsWithValue (sizeof ( kMessage )));
91+ SyscallSucceedsWithValue (kMessage . size ( )));
8892}
8993
9094// Send an IP packet and make sure ETH_P_<something else> doesn't pick it up.
@@ -177,7 +181,7 @@ void ReceiveMessage(int sock, int ifindex) {
177181
178182 // Read and verify the data.
179183 constexpr size_t packet_size =
180- sizeof (struct iphdr ) + sizeof (struct udphdr ) + sizeof ( kMessage );
184+ sizeof (struct iphdr ) + sizeof (struct udphdr ) + kMessage . size ( );
181185 char buf[64 ];
182186 struct sockaddr_ll src = {};
183187 socklen_t src_len = sizeof (src);
@@ -215,11 +219,11 @@ void ReceiveMessage(int sock, int ifindex) {
215219 struct udphdr udp = {};
216220 memcpy (&udp, buf + sizeof (iphdr), sizeof (udp));
217221 EXPECT_EQ (udp.dest , kPort );
218- EXPECT_EQ (udp.len , htons (sizeof (udphdr) + sizeof ( kMessage )));
222+ EXPECT_EQ (udp.len , htons (sizeof (udphdr) + kMessage . size ( )));
219223
220224 // Verify the payload.
221225 char * payload = reinterpret_cast <char *>(buf + sizeof (iphdr) + sizeof (udphdr));
222- EXPECT_EQ (strncmp (payload, kMessage , sizeof ( kMessage )), 0 );
226+ EXPECT_EQ (std::string_view (payload, kMessage . size ( )), kMessage );
223227}
224228
225229// Receive via a packet socket.
@@ -267,7 +271,7 @@ TEST_P(CookedPacketTest, Send) {
267271 iphdr.version = 4 ;
268272 iphdr.tos = 0 ;
269273 iphdr.tot_len =
270- htons (sizeof (struct iphdr ) + sizeof (struct udphdr ) + sizeof ( kMessage ));
274+ htons (sizeof (struct iphdr ) + sizeof (struct udphdr ) + kMessage . size ( ));
271275 // Get a pseudo-random ID. If we clash with an in-use ID the test will fail,
272276 // but we have no way of getting an ID we know to be good.
273277 srand (*reinterpret_cast <unsigned int *>(&iphdr));
@@ -284,14 +288,15 @@ TEST_P(CookedPacketTest, Send) {
284288 struct udphdr udphdr = {};
285289 udphdr.source = kPort ;
286290 udphdr.dest = kPort ;
287- udphdr.len = htons (sizeof (udphdr) + sizeof ( kMessage ));
288- udphdr.check = UDPChecksum (iphdr, udphdr, kMessage , sizeof ( kMessage ));
291+ udphdr.len = htons (sizeof (udphdr) + kMessage . size ( ));
292+ udphdr.check = UDPChecksum (iphdr, udphdr, kMessage . data (), kMessage . size ( ));
289293
290294 // Copy both headers and the payload into our packet buffer.
291- char send_buf[sizeof (iphdr) + sizeof (udphdr) + sizeof ( kMessage )];
295+ char send_buf[sizeof (iphdr) + sizeof (udphdr) + kMessage . size ( )];
292296 memcpy (send_buf, &iphdr, sizeof (iphdr));
293297 memcpy (send_buf + sizeof (iphdr), &udphdr, sizeof (udphdr));
294- memcpy (send_buf + sizeof (iphdr) + sizeof (udphdr), kMessage , sizeof (kMessage ));
298+ memcpy (send_buf + sizeof (iphdr) + sizeof (udphdr), kMessage .data (),
299+ kMessage .size ());
295300
296301 // Send it.
297302 ASSERT_THAT (sendto (socket_, send_buf, sizeof (send_buf), 0 ,
@@ -313,16 +318,18 @@ TEST_P(CookedPacketTest, Send) {
313318 char recv_buf[sizeof (send_buf)];
314319 ASSERT_THAT (recv (socket_, recv_buf, sizeof (recv_buf), 0 ),
315320 SyscallSucceedsWithValue (sizeof (recv_buf)));
316- ASSERT_EQ (memcmp (recv_buf, send_buf, sizeof (send_buf)), 0 );
321+ ASSERT_EQ (
322+ absl::BytesToHexString (std::string_view (recv_buf, sizeof (recv_buf))),
323+ absl::BytesToHexString (std::string_view (send_buf, sizeof (send_buf))));
317324
318325 // Receive on the UDP socket.
319326 struct sockaddr_in src;
320327 socklen_t src_len = sizeof (src);
321328 ASSERT_THAT (recvfrom (udp_sock.get (), recv_buf, sizeof (recv_buf), MSG_DONTWAIT,
322329 reinterpret_cast <struct sockaddr *>(&src), &src_len),
323- SyscallSucceedsWithValue (sizeof ( kMessage )));
330+ SyscallSucceedsWithValue (kMessage . size ( )));
324331 // Check src and payload.
325- EXPECT_EQ (strncmp (recv_buf, kMessage , sizeof ( kMessage )), 0 );
332+ EXPECT_EQ (std::string_view (recv_buf, kMessage . size ( )), kMessage );
326333 EXPECT_EQ (src.sin_family , AF_INET);
327334 EXPECT_EQ (src.sin_port , kPort );
328335 EXPECT_EQ (src.sin_addr .s_addr , htonl (INADDR_LOOPBACK));
@@ -414,9 +421,9 @@ TEST_P(CookedPacketTest, BindDrop) {
414421 dest.sin_addr .s_addr = htonl (INADDR_LOOPBACK);
415422 dest.sin_family = AF_INET;
416423 dest.sin_port = kPort ;
417- EXPECT_THAT (sendto (udp_sock.get (), kMessage , sizeof ( kMessage ), 0 ,
424+ EXPECT_THAT (sendto (udp_sock.get (), kMessage . data (), kMessage . size ( ), 0 ,
418425 reinterpret_cast <struct sockaddr *>(&dest), sizeof (dest)),
419- SyscallSucceedsWithValue (sizeof ( kMessage )));
426+ SyscallSucceedsWithValue (kMessage . size ( )));
420427
421428 // Wait and make sure the socket never receives any data.
422429 struct pollfd pfd = {};
@@ -485,9 +492,9 @@ TEST_P(CookedPacketTest, ReceiveOutbound) {
485492 ASSERT_EQ (inet_pton (AF_INET, " 8.8.8.8" , &dest.sin_addr .s_addr ), 1 );
486493 dest.sin_family = AF_INET;
487494 dest.sin_port = kPort ;
488- EXPECT_THAT (sendto (udp_sock.get (), kMessage , sizeof ( kMessage ), 0 ,
495+ EXPECT_THAT (sendto (udp_sock.get (), kMessage . data (), kMessage . size ( ), 0 ,
489496 reinterpret_cast <struct sockaddr *>(&dest), sizeof (dest)),
490- SyscallSucceedsWithValue (sizeof ( kMessage )));
497+ SyscallSucceedsWithValue (kMessage . size ( )));
491498
492499 // Wait and make sure the socket receives the data.
493500 struct pollfd pfd = {};
@@ -499,7 +506,7 @@ TEST_P(CookedPacketTest, ReceiveOutbound) {
499506 // Now read and check that the packet is the one we just sent.
500507 // Read and verify the data.
501508 constexpr size_t packet_size =
502- sizeof (struct iphdr ) + sizeof (struct udphdr ) + sizeof ( kMessage );
509+ sizeof (struct iphdr ) + sizeof (struct udphdr ) + kMessage . size ( );
503510 char buf[64 ];
504511 struct sockaddr_ll src = {};
505512 socklen_t src_len = sizeof (src);
@@ -539,11 +546,11 @@ TEST_P(CookedPacketTest, ReceiveOutbound) {
539546 struct udphdr udp = {};
540547 memcpy (&udp, buf + sizeof (iphdr), sizeof (udp));
541548 EXPECT_EQ (udp.dest , kPort );
542- EXPECT_EQ (udp.len , htons (sizeof (udphdr) + sizeof ( kMessage )));
549+ EXPECT_EQ (udp.len , htons (sizeof (udphdr) + kMessage . size ( )));
543550
544551 // Verify the payload.
545552 char * payload = reinterpret_cast <char *>(buf + sizeof (iphdr) + sizeof (udphdr));
546- EXPECT_EQ (strncmp (payload, kMessage , sizeof ( kMessage )), 0 );
553+ EXPECT_EQ (std::string_view (payload, kMessage . size ( )), kMessage );
547554}
548555
549556// Bind with invalid address.
0 commit comments