2 * Copyright (C) 2013 Tobias Brunner
3 * Hochschule fuer Technik Rapperswil
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 #include "test_suite.h"
18 #include <networking/host.h>
21 * Verify a netmask (a number of set bits starting at byte 0)
22 * Can also be used to check for %any (mask == 0)
24 static void verify_netmask(chunk_t addr
, int mask
)
28 for (byte
= 0; byte
< addr
.len
; byte
++)
30 for (bit
= 7; bit
>= 0; bit
--)
32 int val
= (addr
.ptr
[byte
] >> bit
) & 0x01;
35 ck_assert_int_eq(val
, 1);
39 ck_assert_int_eq(val
, 0);
45 /*******************************************************************************
49 static void verify_any(host_t
*host
, int family
, u_int16_t port
)
51 verify_netmask(host
->get_address(host
), 0);
52 ck_assert(host
->is_anyaddr(host
));
53 ck_assert_int_eq(host
->get_port(host
), port
);
54 ck_assert_int_eq(host
->get_family(host
), family
);
57 static void test_create_any(int family
)
61 host
= host_create_any(family
);
62 verify_any(host
, family
, 0);
66 START_TEST(test_create_any_v4
)
68 test_create_any(AF_INET
);
72 START_TEST(test_create_any_v6
)
74 test_create_any(AF_INET6
);
78 START_TEST(test_create_any_other
)
82 host
= host_create_any(AF_UNSPEC
);
83 ck_assert(host
== NULL
);
87 /*******************************************************************************
88 * host_create_from_string
91 static void verify_address(host_t
*host
, chunk_t addr
, int family
, u_int16_t port
)
93 ck_assert(chunk_equals(host
->get_address(host
), addr
));
94 ck_assert(!host
->is_anyaddr(host
));
95 ck_assert_int_eq(host
->get_port(host
), port
);
96 ck_assert_int_eq(host
->get_family(host
), family
);
99 static const chunk_t addr_v4
= chunk_from_chars(0xc0, 0xa8, 0x00, 0x01);
100 static const chunk_t addr_v6
= chunk_from_chars(0xfe, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01);
103 START_TEST(test_create_from_string_v4
)
107 host
= host_create_from_string(NULL
, 500);
110 host
= host_create_from_string("%any", 500);
111 verify_any(host
, AF_INET
, 500);
114 host
= host_create_from_string("%any4", 500);
115 verify_any(host
, AF_INET
, 500);
118 host
= host_create_from_string("0.0.0.0", 500);
119 verify_any(host
, AF_INET
, 500);
122 host
= host_create_from_string("192.168.0.1", 500);
123 verify_address(host
, addr_v4
, AF_INET
, 500);
126 host
= host_create_from_string("192.168.0.1::500", 500);
127 ck_assert(host
== NULL
);
128 host
= host_create_from_string("123.456.789.012", 500);
129 ck_assert(host
== NULL
);
130 host
= host_create_from_string("1.1.1.1.1.1.1.1", 500);
131 ck_assert(host
== NULL
);
132 host
= host_create_from_string("foo.b.a.r", 500);
133 ck_assert(host
== NULL
);
137 START_TEST(test_create_from_string_any_v6
)
141 host
= host_create_from_string("%any6", 500);
142 verify_any(host
, AF_INET6
, 500);
145 host
= host_create_from_string("::", 500);
146 verify_any(host
, AF_INET6
, 500);
149 host
= host_create_from_string("fec1::1", 500);
150 verify_address(host
, addr_v6
, AF_INET6
, 500);
153 host
= host_create_from_string("fec1::1.500", 500);
154 ck_assert(host
== NULL
);
155 host
= host_create_from_string("f::e::c::1::1", 500);
156 ck_assert(host
== NULL
);
157 host
= host_create_from_string("foo::bar", 500);
158 ck_assert(host
== NULL
);
162 /*******************************************************************************
163 * host_create_from_string_and_family
166 static void test_create_from_string_and_family_any(char *string
, int family
,
171 host
= host_create_from_string_and_family(string
, family
, 500);
172 if (expected
== AF_UNSPEC
)
174 ck_assert(host
== NULL
);
178 verify_any(host
, expected
, 500);
183 static void test_create_from_string_and_family_addr(char *string
, chunk_t addr
,
184 int family
, int expected
)
188 host
= host_create_from_string_and_family(string
, family
, 500);
189 if (expected
== AF_UNSPEC
)
191 ck_assert(host
== NULL
);
195 verify_address(host
, addr
, expected
, 500);
200 START_TEST(test_create_from_string_and_family_v4
)
202 test_create_from_string_and_family_any(NULL
, AF_INET
, AF_UNSPEC
);
203 test_create_from_string_and_family_any("%any", AF_INET
, AF_INET
);
204 test_create_from_string_and_family_any("%any4", AF_INET
, AF_INET
);
205 test_create_from_string_and_family_any("0.0.0.0", AF_INET
, AF_INET
);
207 test_create_from_string_and_family_any("%any4", AF_INET6
, AF_UNSPEC
);
208 test_create_from_string_and_family_any("0.0.0.0", AF_INET6
, AF_UNSPEC
);
210 test_create_from_string_and_family_addr("192.168.0.1", addr_v4
, AF_INET
, AF_INET
);
211 test_create_from_string_and_family_addr("192.168.0.1", addr_v4
, AF_INET6
, AF_UNSPEC
);
215 START_TEST(test_create_from_string_and_family_v6
)
217 test_create_from_string_and_family_any(NULL
, AF_INET6
, AF_UNSPEC
);
218 test_create_from_string_and_family_any("%any", AF_INET6
, AF_INET6
);
219 test_create_from_string_and_family_any("%any6", AF_INET6
, AF_INET6
);
220 test_create_from_string_and_family_any("::", AF_INET6
, AF_INET6
);
222 test_create_from_string_and_family_any("%any6", AF_INET
, AF_UNSPEC
);
223 test_create_from_string_and_family_any("::", AF_INET
, AF_UNSPEC
);
225 test_create_from_string_and_family_addr("fec1::1", addr_v6
, AF_INET6
, AF_INET6
);
226 test_create_from_string_and_family_addr("fec1::1", addr_v6
, AF_INET
, AF_UNSPEC
);
230 START_TEST(test_create_from_string_and_family_other
)
232 test_create_from_string_and_family_any(NULL
, AF_UNSPEC
, AF_UNSPEC
);
233 test_create_from_string_and_family_any("%any", AF_UNSPEC
, AF_INET
);
234 test_create_from_string_and_family_any("%any4", AF_UNSPEC
, AF_INET
);
235 test_create_from_string_and_family_any("0.0.0.0", AF_UNSPEC
, AF_INET
);
237 test_create_from_string_and_family_any("%any6", AF_UNSPEC
, AF_INET6
);
238 test_create_from_string_and_family_any("::", AF_UNSPEC
, AF_INET6
);
240 test_create_from_string_and_family_addr("192.168.0.1", addr_v4
, AF_UNSPEC
, AF_INET
);
241 test_create_from_string_and_family_addr("fec1::1", addr_v6
, AF_UNSPEC
, AF_INET6
);
245 /*******************************************************************************
246 * host_create_from_dns
249 static void test_create_from_dns(int family
, chunk_t addr
)
253 host
= host_create_from_dns("localhost", family
, 500);
254 if (family
!= AF_INET6
)
256 ck_assert(host
!= NULL
);
260 if (family
!= AF_UNSPEC
)
262 verify_address(host
, addr
, family
, 500);
268 START_TEST(test_create_from_dns_any
)
270 test_create_from_dns(AF_UNSPEC
, chunk_empty
);
274 START_TEST(test_create_from_dns_v4
)
276 test_create_from_dns(AF_INET
, chunk_from_chars(127,0,0,1));
280 START_TEST(test_create_from_dns_v6
)
282 test_create_from_dns(AF_INET6
,
283 chunk_from_chars(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1));
287 /*******************************************************************************
288 * host_create_from_sockaddr
291 START_TEST(test_create_from_sockaddr_v4
)
293 struct sockaddr_in addr
= {
294 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
295 .sin_len
= sizeof(struct sockaddr_in
),
297 .sin_family
= AF_INET
,
298 .sin_port
= htons(500),
303 host
= host_create_from_sockaddr((sockaddr_t
*)&addr
);
304 verify_any(host
, AF_INET
, 500);
305 val
= (struct sockaddr_in
*)host
->get_sockaddr(host
);
306 ck_assert(memeq(&addr
, val
, sizeof(addr
)));
307 socklen
= host
->get_sockaddr_len(host
);
308 ck_assert(*socklen
== sizeof(addr
));
313 START_TEST(test_create_from_sockaddr_v6
)
315 struct sockaddr_in6 addr
= {
316 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
317 .sin6_len
= sizeof(struct sockaddr_in6
),
319 .sin6_family
= AF_INET6
,
320 .sin6_port
= htons(500),
325 host
= host_create_from_sockaddr((sockaddr_t
*)&addr
);
326 verify_any(host
, AF_INET6
, 500);
327 val
= (struct sockaddr_in6
*)host
->get_sockaddr(host
);
328 ck_assert(memeq(&addr
, val
, sizeof(addr
)));
329 socklen
= host
->get_sockaddr_len(host
);
330 ck_assert(*socklen
== sizeof(addr
));
335 START_TEST(test_create_from_sockaddr_other
)
337 struct sockaddr addr
= {
338 .sa_family
= AF_UNIX
,
342 host
= host_create_from_sockaddr((sockaddr_t
*)&addr
);
343 ck_assert(host
== NULL
);
347 /*******************************************************************************
348 * host_create_from_chunk
351 START_TEST(test_create_from_chunk_v4
)
355 host
= host_create_from_chunk(AF_INET
, addr_v4
, 500);
356 verify_address(host
, addr_v4
, AF_INET
, 500);
359 host
= host_create_from_chunk(AF_UNSPEC
, addr_v4
, 500);
360 verify_address(host
, addr_v4
, AF_INET
, 500);
363 host
= host_create_from_chunk(AF_INET
, chunk_empty
, 500);
364 ck_assert(host
== NULL
);
365 host
= host_create_from_chunk(AF_UNSPEC
, chunk_empty
, 500);
366 ck_assert(host
== NULL
);
370 START_TEST(test_create_from_chunk_v6
)
374 host
= host_create_from_chunk(AF_INET6
, addr_v6
, 500);
375 verify_address(host
, addr_v6
, AF_INET6
, 500);
378 host
= host_create_from_chunk(AF_UNSPEC
, addr_v6
, 500);
379 verify_address(host
, addr_v6
, AF_INET6
, 500);
382 host
= host_create_from_chunk(AF_INET6
, chunk_empty
, 500);
383 ck_assert(host
== NULL
);
387 START_TEST(test_create_from_chunk_other
)
391 host
= host_create_from_chunk(AF_UNIX
, addr_v6
, 500);
392 ck_assert(host
== NULL
);
396 /*******************************************************************************
397 * host_create_from_subnet
400 START_TEST(test_create_from_subnet_v4
)
405 host
= host_create_from_subnet("0.0.0.0/0", &bits
);
406 verify_any(host
, AF_INET
, 0);
407 ck_assert_int_eq(bits
, 0);
410 host
= host_create_from_subnet("192.168.0.1", &bits
);
411 verify_address(host
, addr_v4
, AF_INET
, 0);
412 ck_assert_int_eq(bits
, 32);
415 host
= host_create_from_subnet("192.168.0.1/24", &bits
);
416 verify_address(host
, addr_v4
, AF_INET
, 0);
417 ck_assert_int_eq(bits
, 24);
420 host
= host_create_from_subnet("foo.b.a.r", &bits
);
421 ck_assert(host
== NULL
);
425 START_TEST(test_create_from_subnet_v6
)
430 host
= host_create_from_subnet("::/0", &bits
);
431 verify_any(host
, AF_INET6
, 0);
432 ck_assert_int_eq(bits
, 0);
435 host
= host_create_from_subnet("fec1::1", &bits
);
436 verify_address(host
, addr_v6
, AF_INET6
, 0);
437 ck_assert_int_eq(bits
, 128);
440 host
= host_create_from_subnet("fec1::1/64", &bits
);
441 verify_address(host
, addr_v6
, AF_INET6
, 0);
442 ck_assert_int_eq(bits
, 64);
445 host
= host_create_from_subnet("foo::bar", &bits
);
446 ck_assert(host
== NULL
);
450 /*******************************************************************************
451 * host_create_from_range
454 static const chunk_t addr_v4_to
= chunk_from_chars(0xc0, 0xa8, 0x00, 0x05);
455 static const chunk_t addr_v6_to
= chunk_from_chars(0xfe, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05);
458 static void verify_range(char *str
, int family
, chunk_t from_addr
,
465 ck_assert(!host_create_from_range(str
, &from
, &to
));
469 ck_assert(host_create_from_range(str
, &from
, &to
));
470 verify_address(from
, from_addr
, family
, 0);
471 verify_address(to
, to_addr
, family
, 0);
477 START_TEST(test_create_from_range_v4
)
481 ck_assert(host_create_from_range("0.0.0.0-0.0.0.0", &from
, &to
));
482 verify_any(from
, AF_INET
, 0);
483 verify_any(to
, AF_INET
, 0);
487 verify_range("192.168.0.1-192.168.0.1", AF_INET
, addr_v4
, addr_v4
);
488 verify_range("192.168.0.1-192.168.0.5", AF_INET
, addr_v4
, addr_v4_to
);
489 verify_range("192.168.0.1- 192.168.0.5", AF_INET
, addr_v4
, addr_v4_to
);
490 verify_range("192.168.0.1 -192.168.0.5", AF_INET
, addr_v4
, addr_v4_to
);
491 verify_range("192.168.0.1 - 192.168.0.5", AF_INET
, addr_v4
, addr_v4_to
);
492 verify_range("192.168.0.5-192.168.0.1", AF_INET
, addr_v4_to
, addr_v4
);
494 verify_range("192.168.0.1", 0, chunk_empty
, chunk_empty
);
495 verify_range("192.168.0.1-", 0, chunk_empty
, chunk_empty
);
496 verify_range("-192.168.0.1", 0, chunk_empty
, chunk_empty
);
497 verify_range("192.168.0.1-192", 0, chunk_empty
, chunk_empty
);
498 verify_range("192.168.0.1-192.168", 0, chunk_empty
, chunk_empty
);
499 verify_range("192.168.0.1-192.168.0", 0, chunk_empty
, chunk_empty
);
500 verify_range("foo.b.a.r", 0, chunk_empty
, chunk_empty
);
501 verify_range("foo.b.a.r-b.a.r.f", 0, chunk_empty
, chunk_empty
);
505 START_TEST(test_create_from_range_v6
)
509 ck_assert(host_create_from_range("::-::", &from
, &to
));
510 verify_any(from
, AF_INET6
, 0);
511 verify_any(to
, AF_INET6
, 0);
515 verify_range("fec1::1-fec1::1", AF_INET6
, addr_v6
, addr_v6
);
516 verify_range("fec1::1-fec1::5", AF_INET6
, addr_v6
, addr_v6_to
);
517 verify_range("fec1::1- fec1::5", AF_INET6
, addr_v6
, addr_v6_to
);
518 verify_range("fec1::1 -fec1::5", AF_INET6
, addr_v6
, addr_v6_to
);
519 verify_range("fec1::1 - fec1::5", AF_INET6
, addr_v6
, addr_v6_to
);
520 verify_range("fec1::5-fec1::1", AF_INET6
, addr_v6_to
, addr_v6
);
522 verify_range("fec1::1", 0, chunk_empty
, chunk_empty
);
523 verify_range("fec1::1-", 0, chunk_empty
, chunk_empty
);
524 verify_range("-fec1::1", 0, chunk_empty
, chunk_empty
);
525 verify_range("fec1::1-fec1", 0, chunk_empty
, chunk_empty
);
526 verify_range("foo::bar", 0, chunk_empty
, chunk_empty
);
527 verify_range("foo::bar-bar::foo", 0, chunk_empty
, chunk_empty
);
529 verify_range("fec1::1-192.168.0.1", 0, chunk_empty
, chunk_empty
);
530 verify_range("192.168.0.1-fec1::1", 0, chunk_empty
, chunk_empty
);
534 /*******************************************************************************
535 * host_create_netmask
538 static void test_create_netmask(int family
)
541 int i
, len
= (family
== AF_INET
) ?
32 : 128;
543 netmask
= host_create_netmask(family
, -1);
544 ck_assert(netmask
== NULL
);
545 for (i
= 0; i
<= len
; i
++)
547 netmask
= host_create_netmask(family
, i
);
548 verify_netmask(netmask
->get_address(netmask
), i
);
549 netmask
->destroy(netmask
);
551 netmask
= host_create_netmask(family
, len
+ 1);
552 ck_assert(netmask
== NULL
);
555 START_TEST(test_create_netmask_v4
)
557 test_create_netmask(AF_INET
);
561 START_TEST(test_create_netmask_v6
)
563 test_create_netmask(AF_INET6
);
567 START_TEST(test_create_netmask_other
)
571 netmask
= host_create_netmask(AF_UNSPEC
, 0);
572 ck_assert(netmask
== NULL
);
576 /*******************************************************************************
580 START_TEST(test_equals
)
584 a
= host_create_from_string("192.168.0.1", 500);
585 b
= host_create_from_string("192.168.0.1", 0);
586 ck_assert(!a
->equals(a
, b
));
587 ck_assert(!b
->equals(b
, a
));
588 ck_assert(a
->ip_equals(a
, b
));
589 ck_assert(b
->ip_equals(b
, a
));
591 ck_assert(a
->equals(a
, b
));
592 ck_assert(b
->equals(b
, a
));
593 ck_assert(a
->ip_equals(a
, b
));
594 ck_assert(b
->ip_equals(b
, a
));
596 b
= host_create_from_string("192.168.0.2", 500);
597 ck_assert(!a
->ip_equals(a
, b
));
598 ck_assert(!a
->equals(a
, b
));
601 b
= host_create_from_string("fec1::1", 500);
602 ck_assert(!a
->ip_equals(a
, b
));
603 ck_assert(!a
->equals(a
, b
));
605 a
= host_create_from_string("fec1::1", 500);
606 ck_assert(a
->equals(a
, b
));
607 ck_assert(a
->ip_equals(a
, b
));
613 START_TEST(test_equals_any
)
617 a
= host_create_from_string("%any", 500);
618 b
= host_create_from_string("%any", 0);
619 ck_assert(!a
->equals(a
, b
));
620 ck_assert(a
->ip_equals(a
, b
));
622 ck_assert(a
->equals(a
, b
));
623 ck_assert(a
->ip_equals(a
, b
));
625 b
= host_create_from_string("%any6", 0);
626 ck_assert(a
->ip_equals(a
, b
));
627 ck_assert(!a
->equals(a
, b
));
629 ck_assert(a
->ip_equals(a
, b
));
630 ck_assert(a
->equals(a
, b
));
636 /*******************************************************************************
640 START_TEST(test_clone
)
644 a
= host_create_from_string("192.168.0.1", 500);
647 ck_assert(a
->equals(a
, b
));
653 /*******************************************************************************
660 /* results for %H, %+H, %#H (falls back to [0]) */
663 {NULL
, 0, { "(null)" }},
664 {NULL
, 500, { "(null)" }},
665 {"%any", 0, { "%any", "0.0.0.0", "0.0.0.0[0]" }},
666 {"%any", 500, { "%any", "0.0.0.0", "0.0.0.0[500]" }},
667 {"%any6", 0, { "%any6", "::", "::[0]" }},
668 {"%any6", 500, { "%any6", "::", "::[500]" }},
669 {"192.168.0.1", 0, { "192.168.0.1", "192.168.0.1", "192.168.0.1[0]" }},
670 {"192.168.0.1", 500, { "192.168.0.1", "192.168.0.1", "192.168.0.1[500]" }},
671 {"fec1::1", 0, { "fec1::1", "fec1::1", "fec1::1[0]" }},
672 {"fec1::1", 500, { "fec1::1", "fec1::1", "fec1::1[500]" }},
675 static void verify_printf(host_t
*host
, const char *format
, char *expected
)
679 snprintf(buf
, sizeof(buf
), format
, host
);
680 ck_assert_str_eq(expected
, buf
);
683 START_TEST(test_printf_hook
)
685 static const char *formats
[] = { "%H", "%+H", "%#H" };
690 if (printf_data
[_i
].addr
)
692 host
= host_create_from_string(printf_data
[_i
].addr
,
693 printf_data
[_i
].port
);
695 for (i
= 0; i
< countof(formats
); i
++)
697 expected
= printf_data
[_i
].result
[i
];
698 expected
= expected ?
: printf_data
[_i
].result
[0];
699 verify_printf(host
, formats
[i
], expected
);
705 START_TEST(test_printf_hook_align
)
709 verify_printf(NULL
, "%14H", " (null)");
710 verify_printf(NULL
, "%-14H", "(null) ");
712 host
= host_create_from_string("192.168.0.1", 0);
713 verify_printf(host
, "%14H", " 192.168.0.1");
714 verify_printf(host
, "%-14H", "192.168.0.1 ");
715 verify_printf(host
, "%4H", "192.168.0.1");
716 verify_printf(host
, "%-4H", "192.168.0.1");
721 Suite
*host_suite_create()
726 s
= suite_create("host");
728 tc
= tcase_create("host_create_any");
729 tcase_add_test(tc
, test_create_any_v4
);
730 tcase_add_test(tc
, test_create_any_v6
);
731 tcase_add_test(tc
, test_create_any_other
);
732 suite_add_tcase(s
, tc
);
734 tc
= tcase_create("host_create_from_string");
735 tcase_add_test(tc
, test_create_from_string_v4
);
736 tcase_add_test(tc
, test_create_from_string_any_v6
);
737 suite_add_tcase(s
, tc
);
739 tc
= tcase_create("host_create_from_string_and_family");
740 tcase_add_test(tc
, test_create_from_string_and_family_v4
);
741 tcase_add_test(tc
, test_create_from_string_and_family_v6
);
742 tcase_add_test(tc
, test_create_from_string_and_family_other
);
743 suite_add_tcase(s
, tc
);
745 tc
= tcase_create("host_create_from_dns");
746 tcase_add_test(tc
, test_create_from_dns_any
);
747 tcase_add_test(tc
, test_create_from_dns_v4
);
748 tcase_add_test(tc
, test_create_from_dns_v6
);
749 suite_add_tcase(s
, tc
);
751 tc
= tcase_create("host_create_from_sockaddr");
752 tcase_add_test(tc
, test_create_from_sockaddr_v4
);
753 tcase_add_test(tc
, test_create_from_sockaddr_v6
);
754 tcase_add_test(tc
, test_create_from_sockaddr_other
);
755 suite_add_tcase(s
, tc
);
757 tc
= tcase_create("host_create_from_chunk");
758 tcase_add_test(tc
, test_create_from_chunk_v4
);
759 tcase_add_test(tc
, test_create_from_chunk_v6
);
760 tcase_add_test(tc
, test_create_from_chunk_other
);
761 suite_add_tcase(s
, tc
);
763 tc
= tcase_create("host_create_from_subnet");
764 tcase_add_test(tc
, test_create_from_subnet_v4
);
765 tcase_add_test(tc
, test_create_from_subnet_v6
);
766 suite_add_tcase(s
, tc
);
768 tc
= tcase_create("host_create_from_range");
769 tcase_add_test(tc
, test_create_from_range_v4
);
770 tcase_add_test(tc
, test_create_from_range_v6
);
771 suite_add_tcase(s
, tc
);
773 tc
= tcase_create("host_create_netmask");
774 tcase_add_test(tc
, test_create_netmask_v4
);
775 tcase_add_test(tc
, test_create_netmask_v6
);
776 tcase_add_test(tc
, test_create_netmask_other
);
777 suite_add_tcase(s
, tc
);
779 tc
= tcase_create("equals, ip_equals");
780 tcase_add_test(tc
, test_equals
);
781 tcase_add_test(tc
, test_equals_any
);
782 suite_add_tcase(s
, tc
);
784 tc
= tcase_create("clone");
785 tcase_add_test(tc
, test_clone
);
786 suite_add_tcase(s
, tc
);
788 tc
= tcase_create("printf hook");
789 tcase_add_loop_test(tc
, test_printf_hook
, 0, countof(printf_data
));
790 tcase_add_test(tc
, test_printf_hook_align
);
791 suite_add_tcase(s
, tc
);