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_tcp_ipv4(void **state)
20 torture_setup_echo_srv_tcp_ipv4(state);
26 static int setup_echo_srv_tcp_ipv6(void **state)
28 torture_setup_echo_srv_tcp_ipv6(state);
34 static int teardown(void **state)
36 torture_teardown_echo_srv(state);
41 static void test_write_read_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_STREAM, IPPROTO_TCP);
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(addr.sa.in.sin_family,
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);
76 assert_int_not_equal(ret, -1);
81 assert_int_not_equal(ret, -1);
83 assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
90 static void test_write_read_ipv6(void **state)
92 struct torture_address addr = {
93 .sa_socklen = sizeof(struct sockaddr_in6),
100 (void) state; /* unused */
102 s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
103 assert_int_not_equal(s, -1);
105 addr.sa.in6.sin6_family = AF_INET6;
106 addr.sa.in6.sin6_port = htons(torture_server_port());
108 rc = inet_pton(AF_INET6,
109 torture_server_address(AF_INET6),
110 &addr.sa.in6.sin6_addr);
111 assert_int_equal(rc, 1);
113 rc = connect(s, &addr.sa.s, addr.sa_socklen);
114 assert_int_equal(rc, 0);
116 for (i = 0; i < 10; i++) {
117 char send_buf[64] = {0};
118 char recv_buf[64] = {0};
120 snprintf(send_buf, sizeof(send_buf), "packet.%d", i);
125 assert_int_not_equal(ret, -1);
130 assert_int_not_equal(ret, -1);
132 assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
142 const struct CMUnitTest tcp_write_tests[] = {
143 cmocka_unit_test_setup_teardown(test_write_read_ipv4,
144 setup_echo_srv_tcp_ipv4,
147 cmocka_unit_test_setup_teardown(test_write_read_ipv6,
148 setup_echo_srv_tcp_ipv6,
153 rc = cmocka_run_group_tests(tcp_write_tests, NULL, NULL);