Annotation of embedaddon/bird2/lib/ip_test.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  *     BIRD Library -- IP address functions Tests
                      3:  *
                      4:  *     (c) 2015 CZ.NIC z.s.p.o.
                      5:  *
                      6:  *     Can be freely distributed and used under the terms of the GNU GPL.
                      7:  */
                      8: 
                      9: #include "test/birdtest.h"
                     10: 
                     11: #include "lib/ip.h"
                     12: 
                     13: #define IP4_MAX_LEN            16
                     14: 
                     15: static int
                     16: test_ipa_pton(void *out_, const void *in_, const void *expected_out_)
                     17: {
                     18:   ip_addr *out = out_;
                     19:   const char *in = in_;
                     20:   const ip_addr *expected_out = expected_out_;
                     21: 
                     22:   if (ipa_is_ip4(*expected_out))
                     23:   {
                     24:     ip4_addr ip4;
                     25:     bt_assert(ip4_pton(in, &ip4));
                     26:     *out = ipa_from_ip4(ip4);
                     27:   }
                     28:   else
                     29:   {
                     30:     bt_assert(ip6_pton(in, out));
                     31:     /* ip_addr == ip6_addr */
                     32:   }
                     33: 
                     34:   return ipa_equal(*out, *expected_out);
                     35: }
                     36: 
                     37: static int
                     38: t_ip4_pton(void)
                     39: {
                     40:   struct bt_pair test_vectors[] = {
                     41:     {
                     42:       .in  = "192.168.1.128",
                     43:       .out = & ipa_build4(192, 168, 1, 128),
                     44:     },
                     45:     {
                     46:       .in  = "255.255.255.255",
                     47:       .out = & ipa_build4(255, 255, 255, 255),
                     48:     },
                     49:     {
                     50:       .in  = "0.0.0.0",
                     51:       .out = & ipa_build4(0, 0, 0, 0),
                     52:     },
                     53:   };
                     54: 
                     55:   return bt_assert_batch(test_vectors, test_ipa_pton, bt_fmt_str, bt_fmt_ipa);
                     56: }
                     57: 
                     58: static int
                     59: t_ip6_pton(void)
                     60: {
                     61:   struct bt_pair test_vectors[] = {
                     62:     {
                     63:       .in  = "2001:0db8:0000:0000:0000:0000:1428:57ab",
                     64:       .out = & ipa_build6(0x20010DB8, 0x00000000, 0x00000000, 0x142857AB),
                     65:     },
                     66:     {
                     67:       .in  = "2001:0db8:0000:0000:0000::1428:57ab",
                     68:       .out = & ipa_build6(0x20010DB8, 0x00000000, 0x00000000, 0x142857AB),
                     69:     },
                     70:     {
                     71:       .in  = "2001:0db8::1428:57ab",
                     72:       .out = & ipa_build6(0x20010DB8, 0x00000000, 0x00000000, 0x142857AB),
                     73:     },
                     74:     {
                     75:       .in  = "2001:db8::1428:57ab",
                     76:       .out = & ipa_build6(0x20010DB8, 0x00000000, 0x00000000, 0x142857AB),
                     77:     },
                     78:     {
                     79:       .in  = "::1",
                     80:       .out = & ipa_build6(0x00000000, 0x00000000, 0x00000000, 0x00000001),
                     81:     },
                     82:     {
                     83:       .in  = "::",
                     84:       .out = & ipa_build6(0x00000000, 0x00000000, 0x00000000, 0x00000000),
                     85:     },
                     86:     {
                     87:       .in  = "2605:2700:0:3::4713:93e3",
                     88:       .out = & ipa_build6(0x26052700, 0x00000003, 0x00000000, 0x471393E3),
                     89:     },
                     90:   };
                     91: 
                     92:   return bt_assert_batch(test_vectors, test_ipa_pton, bt_fmt_str, bt_fmt_ipa);
                     93: }
                     94: 
                     95: static int
                     96: test_ipa_ntop(void *out_, const void *in_, const void *expected_out_)
                     97: {
                     98:   char *out = out_;
                     99:   const ip_addr *in = in_;
                    100:   const char *expected_out = expected_out_;
                    101: 
                    102:   if (ipa_is_ip4(*in))
                    103:     ip4_ntop(ipa_to_ip4(*in), out);
                    104:   else
                    105:     ip6_ntop(ipa_to_ip6(*in), out);
                    106: 
                    107:   int result = strncmp(out, expected_out, ipa_is_ip4(*in) ? IP4_MAX_TEXT_LENGTH : IP6_MAX_TEXT_LENGTH) == 0;
                    108:   return result;
                    109: }
                    110: 
                    111: static int
                    112: t_ip4_ntop(void)
                    113: {
                    114:   struct bt_pair test_vectors[] = {
                    115:     {
                    116:       .in  = & ipa_build4(192, 168, 1, 128),
                    117:       .out = "192.168.1.128",
                    118:     },
                    119:     {
                    120:       .in  = & ipa_build4(255, 255, 255, 255),
                    121:       .out = "255.255.255.255",
                    122:     },
                    123:     {
                    124:       .in  = & ipa_build4(0, 0, 0, 1),
                    125:       .out = "0.0.0.1",
                    126:     },
                    127:   };
                    128: 
                    129:   return bt_assert_batch(test_vectors, test_ipa_ntop, bt_fmt_ipa, bt_fmt_str);
                    130: }
                    131: 
                    132: static int
                    133: t_ip6_ntop(void)
                    134: {
                    135:   struct bt_pair test_vectors[] = {
                    136:     {
                    137:       .in  = & ipa_build6(0x20010DB8, 0x00000000, 0x00000000, 0x142857AB),
                    138:       .out = "2001:db8::1428:57ab",
                    139:     },
                    140:     {
                    141:       .in  = & ipa_build6(0x26052700, 0x00000003, 0x00000000, 0x471393E3),
                    142:       .out = "2605:2700:0:3::4713:93e3",
                    143:     },
                    144:   };
                    145: 
                    146:   return bt_assert_batch(test_vectors, test_ipa_ntop, bt_fmt_ipa, bt_fmt_str);
                    147: }
                    148: 
                    149: int
                    150: main(int argc, char *argv[])
                    151: {
                    152:   bt_init(argc, argv);
                    153: 
                    154:   bt_test_suite(t_ip4_pton, "Converting IPv4 string to ip4_addr struct");
                    155:   bt_test_suite(t_ip6_pton, "Converting IPv6 string to ip6_addr struct");
                    156:   bt_test_suite(t_ip4_ntop, "Converting ip4_addr struct to IPv4 string");
                    157:   bt_test_suite(t_ip6_ntop, "Converting ip6_addr struct to IPv6 string");
                    158: 
                    159:   return bt_exit_value();
                    160: }
                    161: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>