Skip to content

Commit a6825bd

Browse files
maximilianfridrichsreimers
authored andcommitted
test/tcp,udp: Add TOS/TCLASS tests
1 parent c55f153 commit a6825bd

File tree

4 files changed

+143
-0
lines changed

4 files changed

+143
-0
lines changed

test/tcp.c

+64
Original file line numberDiff line numberDiff line change
@@ -227,3 +227,67 @@ int test_tcp(void)
227227

228228
return err;
229229
}
230+
231+
232+
#if !defined(WIN32)
233+
static int tcp_tos(const char *addr)
234+
{
235+
struct tcp_test *tt;
236+
struct sa srv;
237+
int err;
238+
239+
tt = mem_zalloc(sizeof(*tt), destructor);
240+
if (!tt)
241+
return ENOMEM;
242+
243+
err = sa_set_str(&srv, addr, 0);
244+
TEST_ERR(err);
245+
246+
err = tcp_listen(&tt->ts, &srv, tcp_server_conn_handler, tt);
247+
TEST_ERR(err);
248+
249+
err = tcp_settos(tt->ts, 184);
250+
TEST_ERR(err);
251+
252+
err = tcp_local_get(tt->ts, &srv);
253+
TEST_ERR(err);
254+
255+
err = tcp_connect(&tt->tc, &srv, tcp_client_estab_handler,
256+
tcp_client_recv_handler, tcp_client_close_handler,
257+
tt);
258+
TEST_ERR(err);
259+
260+
err = re_main_timeout(500);
261+
TEST_ERR(err);
262+
263+
if (tt->err)
264+
err = tt->err;
265+
266+
out:
267+
mem_deref(tt);
268+
269+
return err;
270+
}
271+
272+
273+
int test_tcp_tos(void)
274+
{
275+
int err;
276+
277+
err = tcp_tos("127.0.0.1");
278+
TEST_ERR(err);
279+
280+
err = tcp_tos("::1");
281+
TEST_ERR(err);
282+
283+
out:
284+
return err;
285+
}
286+
#else
287+
/* Outcome of the TOS test on Windows would be dependent on the
288+
* DisableUserTOSSetting Windows registry setting. */
289+
int test_tcp_tos(void)
290+
{
291+
return 0;
292+
}
293+
#endif

test/test.c

+2
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ static const struct test tests[] = {
216216
TEST(test_sys_fs_fopen),
217217
TEST(test_sys_getenv),
218218
TEST(test_tcp),
219+
TEST(test_tcp_tos),
219220
TEST(test_telev),
220221
TEST(test_text2pcap),
221222
TEST(test_fmt_trim),
@@ -237,6 +238,7 @@ static const struct test tests[] = {
237238
TEST(test_turn),
238239
TEST(test_turn_tcp),
239240
TEST(test_udp),
241+
TEST(test_udp_tos),
240242
TEST(test_unixsock),
241243
TEST(test_uri),
242244
TEST(test_uri_encode),

test/test.h

+2
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ int test_sys_fs_isfile(void);
333333
int test_sys_fs_fopen(void);
334334
int test_sys_getenv(void);
335335
int test_tcp(void);
336+
int test_tcp_tos(void);
336337
int test_telev(void);
337338
int test_text2pcap(void);
338339
int test_thread(void);
@@ -344,6 +345,7 @@ int test_turn(void);
344345
int test_turn_tcp(void);
345346
int test_turn_thread(void);
346347
int test_udp(void);
348+
int test_udp_tos(void);
347349
int test_unixsock(void);
348350
int test_uri(void);
349351
int test_uri_encode(void);

test/udp.c

+75
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,78 @@ int test_udp(void)
213213

214214
return err;
215215
}
216+
217+
218+
#if !defined(WIN32)
219+
static int udp_tos(const char *addr)
220+
{
221+
struct udp_test *ut;
222+
int layer = 0;
223+
int err;
224+
225+
ut = mem_zalloc(sizeof(*ut), destructor);
226+
if (!ut)
227+
return ENOMEM;
228+
229+
err = sa_set_str(&ut->cli, addr, 0);
230+
err |= sa_set_str(&ut->srv, addr, 0);
231+
TEST_ERR(err);
232+
233+
err = udp_listen(&ut->usc, &ut->cli, udp_recv_client, ut);
234+
err |= udp_listen(&ut->uss, &ut->srv, udp_recv_server, ut);
235+
TEST_ERR(err);
236+
237+
err = udp_settos(ut->usc, 184);
238+
err |= udp_settos(ut->uss, 120);
239+
TEST_ERR(err);
240+
241+
err = udp_local_get(ut->usc, &ut->cli);
242+
err |= udp_local_get(ut->uss, &ut->srv);
243+
TEST_ERR(err);
244+
245+
err = udp_register_helper(&ut->uh, ut->usc, layer,
246+
udp_helper_send, udp_helper_recv, ut);
247+
TEST_ERR(err);
248+
249+
/* Send from connected client UDP socket */
250+
err = udp_connect(ut->usc, &ut->srv);
251+
TEST_ERR(err);
252+
253+
/* Start test */
254+
err = send_data(ut->usc, &ut->srv, data0);
255+
TEST_ERR(err);
256+
257+
err = re_main_timeout(100);
258+
TEST_ERR(err);
259+
260+
if (ut->err)
261+
err = ut->err;
262+
263+
out:
264+
mem_deref(ut);
265+
266+
return err;
267+
}
268+
269+
270+
int test_udp_tos(void)
271+
{
272+
int err;
273+
274+
err = udp_tos("127.0.0.1");
275+
TEST_ERR(err);
276+
277+
err = udp_tos("::1");
278+
TEST_ERR(err);
279+
280+
out:
281+
return err;
282+
}
283+
#else
284+
/* Outcome of the TOS test on Windows would be dependent on the
285+
* DisableUserTOSSetting Windows registry setting. */
286+
int test_udp_tos(void)
287+
{
288+
return 0;
289+
}
290+
#endif

0 commit comments

Comments
 (0)