Annotation of embedaddon/bird2/lib/ip_test.c, revision 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>