10 #include <sys/types.h>
11 #include <sys/socket.h>
12 #include <netinet/in.h>
13 #include <arpa/inet.h>
18 static int setup_echo_srv_udp_ipv4(void **state)
20 torture_setup_echo_srv_udp_ipv4(state);
26 static int setup_echo_srv_udp_ipv6(void **state)
28 torture_setup_echo_srv_udp_ipv6(state);
34 static int teardown(void **state)
36 torture_teardown_echo_srv(state);
41 static void test_send_recv_ipv4(void **state)
43 struct torture_address addr = {
44 .sa_socklen = sizeof(struct sockaddr_in),
51 (void) state; /* unused */
53 s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
54 assert_int_not_equal(s, -1);
56 addr.sa.in.sin_family = AF_INET;
57 addr.sa.in.sin_port = htons(torture_server_port());
59 rc = inet_pton(AF_INET,
60 torture_server_address(AF_INET),
61 &addr.sa.in.sin_addr);
62 assert_int_equal(rc, 1);
64 rc = connect(s, &addr.sa.s, addr.sa_socklen);
65 assert_int_equal(rc, 0);
67 for (i = 0; i < 10; i++) {
68 char send_buf[64] = {0};
69 char recv_buf[64] = {0};
71 snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
77 assert_int_not_equal(ret, -1);
83 assert_int_not_equal(ret, -1);
85 assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
92 static void test_send_recv_ipv6(void **state)
94 struct torture_address addr = {
95 .sa_socklen = sizeof(struct sockaddr_in6),
102 (void) state; /* unused */
104 s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
105 assert_int_not_equal(s, -1);
107 addr.sa.in6.sin6_family = AF_INET6;
108 addr.sa.in6.sin6_port = htons(torture_server_port());
110 rc = inet_pton(AF_INET6,
111 torture_server_address(AF_INET6),
112 &addr.sa.in6.sin6_addr);
113 assert_int_equal(rc, 1);
115 rc = connect(s, &addr.sa.s, addr.sa_socklen);
116 assert_int_equal(rc, 0);
118 for (i = 0; i < 10; i++) {
119 char send_buf[64] = {0};
120 char recv_buf[64] = {0};
122 snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
128 assert_int_not_equal(ret, -1);
134 assert_int_not_equal(ret, -1);
136 assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
146 const struct CMUnitTest send_tests[] = {
147 cmocka_unit_test_setup_teardown(test_send_recv_ipv4,
148 setup_echo_srv_udp_ipv4,
151 cmocka_unit_test_setup_teardown(test_send_recv_ipv6,
152 setup_echo_srv_udp_ipv6,
157 rc = cmocka_run_group_tests(send_tests, NULL, NULL);