LCOV - code coverage report
Current view: top level - src/plugins/ipaddr - test_ipaddr.h (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 530 530 100.0 %
Date: 2019-09-12 12:28:41 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Tests for ipaddr plugin
       5             :  *
       6             :  * @copyright BSD License (see doc/LICENSE.md or https://www.libelektra.org)
       7             :  *
       8             :  */
       9             : 
      10             : #include <stdio.h>
      11             : 
      12             : #include <tests_plugin.h>
      13             : 
      14             : #include <kdbconfig.h>
      15             : 
      16             : #ifdef HAVE_FEATURES_H
      17             : 
      18             : #include <features.h>
      19             : // The function `getaddrinfo` used in the `network` plugin leaks memory, if we use the default value for `ai_flags` on systems that use
      20             : // `glibc` 2.19.
      21             : // See also: https://travis-ci.org/ElektraInitiative/libelektra/builds/428298531
      22             : #if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
      23             : #if !(__GLIBC_PREREQ(2, 20))
      24             : #include <string.h>
      25             : #define PLUGIN_LEAKS_MEMORY (strcmp (PLUGIN_NAME, "network") == 0)
      26             : #endif
      27             : #endif
      28             : 
      29             : #endif // HAVE_FEATURES_H
      30             : 
      31             : #ifndef PLUGIN_LEAKS_MEMORY
      32             : #define PLUGIN_LEAKS_MEMORY 0
      33             : #endif
      34             : 
      35        1076 : static void testIP (char const * const ip, const int ret, char const * const version)
      36             : {
      37        1076 :         Key * parentKey = keyNew ("user/tests/ipaddr", KEY_VALUE, "", KEY_END);
      38        1076 :         KeySet * conf = ksNew (0, KS_END);
      39        1076 :         KeySet * ks = ksNew (10, keyNew ("user/test/ipaddr/totest", KEY_VALUE, ip, KEY_META, "check/ipaddr", version, KEY_END), KS_END);
      40        1076 :         PLUGIN_OPEN (PLUGIN_NAME);
      41        1076 :         const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey);
      42             :         char message[200];
      43        1076 :         (void) snprintf (message, 200, "validation of %s address ā€œ%sā€ returned %d instead of %d", version[0] == '\0' ? "IP" : version, ip,
      44             :                          pluginStatus, ret);
      45        1076 :         succeed_if (pluginStatus == ret, message);
      46        1076 :         ksDel (ks);
      47        1076 :         keyDel (parentKey);
      48        1076 :         PLUGIN_CLOSE ();
      49        1076 : }
      50             : 
      51             : static inline void testIPv6 (char const * const ip, int ret)
      52             : {
      53        1018 :         testIP (ip, ret, "ipv6");
      54             : }
      55             : 
      56             : static inline void testIPv4 (char const * const ip, int ret)
      57             : {
      58          30 :         testIP (ip, ret, "ipv4");
      59             : }
      60             : 
      61             : static inline void testIPAny (char const * const ip, int ret)
      62             : {
      63          28 :         testIP (ip, ret, "");
      64             : }
      65             : 
      66           4 : static void testIPAll (void)
      67             : {
      68           4 :         testIPv4 ("192.168.0.1", 1);
      69           4 :         testIPv4 ("192.168.1.1", 1);
      70           4 :         testIPv4 ("0.0.0.0", 1);
      71             : 
      72           4 :         testIPv4 ("192.168.0.x", -1);
      73           4 :         testIPv4 ("300.168.1.1", -1);
      74           4 :         testIPv4 ("192.168.a.1", -1);
      75           4 :         testIPv4 ("localhost", -1);
      76             : 
      77           4 :         testIPv6 ("2001:0db8:85a3:0000:0000:8a2e:0370:7334", 1);
      78           4 :         testIPv6 ("2001:0db8:85a3:0:0:8a2e:0370:7334", 1);
      79           4 :         testIPv6 ("2001:0db8:85a3::8a2e:0370:7334", 1);
      80           4 :         testIPv6 ("::1", 1);
      81           4 :         testIPv6 ("2001::7334", 1);
      82           4 :         testIPv6 ("::ffff:192.0.2.128", 1);
      83             : 
      84           4 :         testIPv6 (":::", -1);
      85           4 :         testIPv6 ("2001:0db8:85a3:1234:0000:0000:8a2e:0370:7334", -1);
      86           4 :         testIPv6 ("2001:0db8:85a3:0:0:z:0370:7334", -1);
      87           4 :         testIPv6 ("0db8:85a3:0370:7334", -1);
      88           4 :         testIPv6 (":0db8:85a3:0000:0000:1234:8a2e:0370:7334", -1);
      89           4 :         testIPv6 ("::ffff:192.0.128", -1);
      90           4 :         testIPv6 ("localhost", -1);
      91             : 
      92             :         if (strncmp (PLUGIN_NAME, "network", sizeof ("ipaddr") - 1) == 0)
      93             :         {
      94             :                 // Tested with
      95             :                 //      - http://formvalidation.io/validators/ip/
      96             :                 //      - https://www.helpsystems.com/intermapper/ipv6-test-address-validation
      97           2 :                 testIPv6 (":0db8:85a3:0000:0000:8a2e:0370:7334", -1); // Invalid
      98           2 :                 testIPv6 ("::", 1);                                 // Valid
      99           2 :                 testIPAny ("should_not_exist", -1);
     100           2 :                 testIPAny ("www.google.com", 1);
     101           2 :                 testIPAny ("should_not_exist", -1);
     102           2 :                 testIPAny ("www.google.com", 1);
     103           2 :                 testIPv6 ("", -1);                               // empty string
     104           2 :                 testIPv6 ("::1", 1);                             // loopback, compressed, non-routable
     105           2 :                 testIPv6 ("::", 1);                              // unspecified, compressed, non-routable
     106           2 :                 testIPv6 ("0:0:0:0:0:0:0:1", 1);                 // loopback, full
     107           2 :                 testIPv6 ("0:0:0:0:0:0:0:0", 1);                 // unspecified, full
     108           2 :                 testIPv6 ("2001:DB8:0:0:8:800:200C:417A", 1);      // unicast, full
     109           2 :                 testIPv6 ("FF01:0:0:0:0:0:0:101", 1);            // multicast, full
     110           2 :                 testIPv6 ("2001:DB8::8:800:200C:417A", 1);     // unicast, compressed
     111           2 :                 testIPv6 ("FF01::101", 1);                       // multicast, compressed
     112           2 :                 testIPv6 ("2001:DB8:0:0:8:800:200C:417A:221", -1); // unicast, full
     113           2 :                 testIPv6 ("FF01::101::2", -1);                           // multicast, compressed
     114           2 :                 testIPv6 ("fe80::217:f2ff:fe07:ed62", 1);
     115             : 
     116           2 :                 testIPv6 ("2001:0000:1234:0000:0000:C1C0:ABCD:0876", 1);
     117           2 :                 testIPv6 ("3ffe:0b00:0000:0000:0001:0000:0000:000a", 1);
     118           2 :                 testIPv6 ("FF02:0000:0000:0000:0000:0000:0000:0001", 1);
     119           2 :                 testIPv6 ("0000:0000:0000:0000:0000:0000:0000:0001", 1);
     120           2 :                 testIPv6 ("0000:0000:0000:0000:0000:0000:0000:0000", 1);
     121             : 
     122             :                 // TODO: These two tests actually fail.
     123             :                 // testIPv6("02001:0000:1234:0000:0000:C1C0:ABCD:0876", -1);// extra 0 not allowed!
     124             :                 // testIPv6("2001:0000:1234:0000:00001:C1C0:ABCD:0876", -1);// extra 0 not allowed!
     125             : 
     126             : 
     127             :                 // testIPv6(" 2001:0000:1234:0000:0000:C1C0:ABCD:0876", 1);// leading space
     128             :                 // testIPv6("2001:0000:1234:0000:0000:C1C0:ABCD:0876", 1);// trailing space
     129             :                 // testIPv6(" 2001:0000:1234:0000:0000:C1C0:ABCD:0876  ", 1);// leading and trailing space
     130           2 :                 testIPv6 ("2001:0000:1234:0000:0000:C1C0:ABCD:0876  0", -1); // junk after valid address
     131           2 :                 testIPv6 ("2001:0000:1234: 0000:0000:C1C0:ABCD:0876", -1);   // internal space
     132             : 
     133           2 :                 testIPv6 ("3ffe:0b00:0000:0001:0000:0000:000a", -1);     // seven segments
     134           2 :                 testIPv6 ("FF02:0000:0000:0000:0000:0000:0000:0000:0001", -1); // nine segments
     135           2 :                 testIPv6 ("3ffe:b00::1::a", -1);                             // double "::"
     136           2 :                 testIPv6 ("::1111:2222:3333:4444:5555:6666::", -1);       // double "::"
     137           2 :                 testIPv6 ("2::10", 1);
     138           2 :                 testIPv6 ("ff02::1", 1);
     139           2 :                 testIPv6 ("fe80::", 1);
     140           2 :                 testIPv6 ("2002::", 1);
     141           2 :                 testIPv6 ("2001:db8::", 1);
     142           2 :                 testIPv6 ("2001:0db8:1234::", 1);
     143           2 :                 testIPv6 ("::ffff:0:0", 1);
     144           2 :                 testIPv6 ("::1", 1);
     145           2 :                 testIPv6 ("1:2:3:4:5:6:7:8", 1);
     146           2 :                 testIPv6 ("1:2:3:4:5:6::8", 1);
     147           2 :                 testIPv6 ("1:2:3:4:5::8", 1);
     148           2 :                 testIPv6 ("1:2:3:4::8", 1);
     149           2 :                 testIPv6 ("1:2:3::8", 1);
     150           2 :                 testIPv6 ("1:2::8", 1);
     151           2 :                 testIPv6 ("1::8", 1);
     152           2 :                 testIPv6 ("1::2:3:4:5:6:7", 1);
     153           2 :                 testIPv6 ("1::2:3:4:5:6", 1);
     154           2 :                 testIPv6 ("1::2:3:4:5", 1);
     155           2 :                 testIPv6 ("1::2:3:4", 1);
     156           2 :                 testIPv6 ("1::2:3", 1);
     157           2 :                 testIPv6 ("1::8", 1);
     158           2 :                 testIPv6 ("::2:3:4:5:6:7:8", 1);
     159           2 :                 testIPv6 ("::2:3:4:5:6:7", 1);
     160           2 :                 testIPv6 ("::2:3:4:5:6", 1);
     161           2 :                 testIPv6 ("::2:3:4:5", 1);
     162           2 :                 testIPv6 ("::2:3:4", 1);
     163           2 :                 testIPv6 ("::2:3", 1);
     164           2 :                 testIPv6 ("::8", 1);
     165           2 :                 testIPv6 ("1:2:3:4:5:6::", 1);
     166           2 :                 testIPv6 ("1:2:3:4:5::", 1);
     167           2 :                 testIPv6 ("1:2:3:4::", 1);
     168           2 :                 testIPv6 ("1:2:3::", 1);
     169           2 :                 testIPv6 ("1:2::", 1);
     170           2 :                 testIPv6 ("1::", 1);
     171           2 :                 testIPv6 ("1:2:3:4:5::7:8", 1);
     172           2 :                 testIPv6 ("1:2:3::4:5::7:8", -1); // Double "::"
     173           2 :                 testIPv6 ("12345::6:7:8", -1);
     174           2 :                 testIPv6 ("1:2:3:4::7:8", 1);
     175           2 :                 testIPv6 ("1:2:3::7:8", 1);
     176           2 :                 testIPv6 ("1:2::7:8", 1);
     177           2 :                 testIPv6 ("1::7:8", 1);
     178             : 
     179             :                 // IPv4 addresses as dotted-quads
     180           2 :                 testIPv6 ("1:2:3:4:5:6:1.2.3.4", 1);
     181           2 :                 testIPv6 ("1:2:3:4:5::1.2.3.4", 1);
     182           2 :                 testIPv6 ("1:2:3:4::1.2.3.4", 1);
     183           2 :                 testIPv6 ("1:2:3::1.2.3.4", 1);
     184           2 :                 testIPv6 ("1:2::1.2.3.4", 1);
     185           2 :                 testIPv6 ("1::1.2.3.4", 1);
     186           2 :                 testIPv6 ("1:2:3:4::5:1.2.3.4", 1);
     187           2 :                 testIPv6 ("1:2:3::5:1.2.3.4", 1);
     188           2 :                 testIPv6 ("1:2::5:1.2.3.4", 1);
     189           2 :                 testIPv6 ("1::5:1.2.3.4", 1);
     190           2 :                 testIPv6 ("1::5:11.22.33.44", 1);
     191           2 :                 testIPv6 ("1::5:400.2.3.4", -1);
     192           2 :                 testIPv6 ("1::5:260.2.3.4", -1);
     193           2 :                 testIPv6 ("1::5:256.2.3.4", -1);
     194           2 :                 testIPv6 ("1::5:1.256.3.4", -1);
     195           2 :                 testIPv6 ("1::5:1.2.256.4", -1);
     196           2 :                 testIPv6 ("1::5:1.2.3.256", -1);
     197           2 :                 testIPv6 ("1::5:300.2.3.4", -1);
     198           2 :                 testIPv6 ("1::5:1.300.3.4", -1);
     199           2 :                 testIPv6 ("1::5:1.2.300.4", -1);
     200           2 :                 testIPv6 ("1::5:1.2.3.300", -1);
     201           2 :                 testIPv6 ("1::5:900.2.3.4", -1);
     202           2 :                 testIPv6 ("1::5:1.900.3.4", -1);
     203           2 :                 testIPv6 ("1::5:1.2.900.4", -1);
     204           2 :                 testIPv6 ("1::5:1.2.3.900", -1);
     205           2 :                 testIPv6 ("1::5:300.300.300.300", -1);
     206           2 :                 testIPv6 ("1::5:3000.30.30.30", -1);
     207           2 :                 testIPv6 ("1::400.2.3.4", -1);
     208           2 :                 testIPv6 ("1::260.2.3.4", -1);
     209           2 :                 testIPv6 ("1::256.2.3.4", -1);
     210           2 :                 testIPv6 ("1::1.256.3.4", -1);
     211           2 :                 testIPv6 ("1::1.2.256.4", -1);
     212           2 :                 testIPv6 ("1::1.2.3.256", -1);
     213           2 :                 testIPv6 ("1::300.2.3.4", -1);
     214           2 :                 testIPv6 ("1::1.300.3.4", -1);
     215           2 :                 testIPv6 ("1::1.2.300.4", -1);
     216           2 :                 testIPv6 ("1::1.2.3.300", -1);
     217           2 :                 testIPv6 ("1::900.2.3.4", -1);
     218           2 :                 testIPv6 ("1::1.900.3.4", -1);
     219           2 :                 testIPv6 ("1::1.2.900.4", -1);
     220           2 :                 testIPv6 ("1::1.2.3.900", -1);
     221           2 :                 testIPv6 ("1::300.300.300.300", -1);
     222           2 :                 testIPv6 ("1::3000.30.30.30", -1);
     223           2 :                 testIPv6 ("::400.2.3.4", -1);
     224           2 :                 testIPv6 ("::260.2.3.4", -1);
     225           2 :                 testIPv6 ("::256.2.3.4", -1);
     226           2 :                 testIPv6 ("::1.256.3.4", -1);
     227           2 :                 testIPv6 ("::1.2.256.4", -1);
     228           2 :                 testIPv6 ("::1.2.3.256", -1);
     229           2 :                 testIPv6 ("::300.2.3.4", -1);
     230           2 :                 testIPv6 ("::1.300.3.4", -1);
     231           2 :                 testIPv6 ("::1.2.300.4", -1);
     232           2 :                 testIPv6 ("::1.2.3.300", -1);
     233           2 :                 testIPv6 ("::900.2.3.4", -1);
     234           2 :                 testIPv6 ("::1.900.3.4", -1);
     235           2 :                 testIPv6 ("::1.2.900.4", -1);
     236           2 :                 testIPv6 ("::1.2.3.900", -1);
     237           2 :                 testIPv6 ("::300.300.300.300", -1);
     238           2 :                 testIPv6 ("::3000.30.30.30", -1);
     239           2 :                 testIPv6 ("fe80::217:f2ff:254.7.237.98", 1);
     240           2 :                 testIPv6 ("::ffff:192.168.1.26", 1);
     241           2 :                 testIPv6 ("2001:1:1:1:1:1:255Z255X255Y255", -1); // garbage instead of "." in IPv4
     242           2 :                 testIPv6 ("::ffff:192x168.1.26", -1);          // ditto
     243           2 :                 testIPv6 ("::ffff:192.168.1.1", 1);
     244           2 :                 testIPv6 ("0:0:0:0:0:0:13.1.68.3", 1);        // IPv4-compatible IPv6 address, full, deprecated
     245           2 :                 testIPv6 ("0:0:0:0:0:FFFF:129.144.52.38", 1); // IPv4-mapped IPv6 address, full
     246           2 :                 testIPv6 ("::13.1.68.3", 1);                // IPv4-compatible IPv6 address, compressed, deprecated
     247           2 :                 testIPv6 ("::FFFF:129.144.52.38", 1);  // IPv4-mapped IPv6 address, compressed
     248           2 :                 testIPv6 ("fe80:0:0:0:204:61ff:254.157.241.86", 1);
     249           2 :                 testIPv6 ("fe80::204:61ff:254.157.241.86", 1);
     250           2 :                 testIPv6 ("::ffff:12.34.56.78", 1);
     251           2 :                 testIPv6 ("::ffff:2.3.4", -1);
     252           2 :                 testIPv6 ("::ffff:257.1.2.3", -1);
     253           2 :                 testIPv6 ("1.2.3.4", -1);
     254             : 
     255           2 :                 testIPv6 ("1.2.3.4:1111:2222:3333:4444::5555", -1); // Aeron
     256           2 :                 testIPv6 ("1.2.3.4:1111:2222:3333::5555", -1);
     257           2 :                 testIPv6 ("1.2.3.4:1111:2222::5555", -1);
     258           2 :                 testIPv6 ("1.2.3.4:1111::5555", -1);
     259           2 :                 testIPv6 ("1.2.3.4::5555", -1);
     260           2 :                 testIPv6 ("1.2.3.4::", -1);
     261             : 
     262             :                 // Testing IPv4 addresses represented as dotted-quads
     263             :                 // Leading zero's in IPv4 addresses not allowed: some systems treat the leading "0" in ".086" as the start of an octal
     264             :                 // number Update: The BNF in RFC-3986 explicitly defines the dec-octet (for IPv4 addresses) not to have a leading zero
     265           2 :                 testIPv6 ("::ffff:192.0.2.128", 1); // but this is OK, since there's a single digit
     266           2 :                 testIPv6 ("XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4", -1);
     267             : 
     268             :                 // TODO: These tests also fail on some systems
     269             :                 // testIPv6("fe80:0000:0000:0000:0204:61ff:254.157.241.086", -1);
     270             :                 // testIPv6("1111:2222:3333:4444:5555:6666:00.00.00.00", -1);
     271             :                 // testIPv6("1111:2222:3333:4444:5555:6666:000.000.000.000", -1);
     272             : 
     273           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:256.256.256.256", -1);
     274             : 
     275             :                 // Not testing address with subnet mask
     276             :                 // testIPv6("2001:0DB8:0000:CD30:0000:0000:0000:0000/60", 1);// full, with prefix
     277             :                 // testIPv6("2001:0DB8::CD30:0:0:0:0/60", 1);// compressed, with prefix
     278             :                 // testIPv6("2001:0DB8:0:CD30::/60", 1);// compressed, with prefix //2
     279             :                 // testIPv6("::/128", 1);// compressed, unspecified address type, non-routable
     280             :                 // testIPv6("::1/128", 1);// compressed, loopback address type, non-routable
     281             :                 // testIPv6("FF00::/8", 1);// compressed, multicast address type
     282             :                 // testIPv6("FE80::/10", 1);// compressed, link-local unicast, non-routable
     283             :                 // testIPv6("FEC0::/10", 1);// compressed, site-local unicast, deprecated
     284             :                 // testIPv6("124.15.6.89/60", -1);// standard IPv4, prefix not allowed
     285             : 
     286           2 :                 testIPv6 ("fe80:0000:0000:0000:0204:61ff:fe9d:f156", 1);
     287           2 :                 testIPv6 ("fe80:0:0:0:204:61ff:fe9d:f156", 1);
     288           2 :                 testIPv6 ("fe80::204:61ff:fe9d:f156", 1);
     289           2 :                 testIPv6 ("::1", 1);
     290           2 :                 testIPv6 ("fe80::", 1);
     291           2 :                 testIPv6 ("fe80::1", 1);
     292           2 :                 testIPv6 (":", -1);
     293           2 :                 testIPv6 ("::ffff:c000:280", 1);
     294             : 
     295             :                 // Aeron supplied these test cases
     296           2 :                 testIPv6 ("1111:2222:3333:4444::5555:", -1);
     297           2 :                 testIPv6 ("1111:2222:3333::5555:", -1);
     298           2 :                 testIPv6 ("1111:2222::5555:", -1);
     299           2 :                 testIPv6 ("1111::5555:", -1);
     300           2 :                 testIPv6 ("::5555:", -1);
     301           2 :                 testIPv6 (":::", -1);
     302           2 :                 testIPv6 ("1111:", -1);
     303           2 :                 testIPv6 (":", -1);
     304             : 
     305           2 :                 testIPv6 (":1111:2222:3333:4444::5555", -1);
     306           2 :                 testIPv6 (":1111:2222:3333::5555", -1);
     307           2 :                 testIPv6 (":1111:2222::5555", -1);
     308           2 :                 testIPv6 (":1111::5555", -1);
     309           2 :                 testIPv6 (":::5555", -1);
     310           2 :                 testIPv6 (":::", -1);
     311             : 
     312             : 
     313             :                 // Additional test cases
     314             :                 // from http://rt.cpan.org/Public/Bug/Display.html?id=50693
     315           2 :                 testIPv6 ("2001:0db8:85a3:0000:0000:8a2e:0370:7334", 1);
     316           2 :                 testIPv6 ("2001:db8:85a3:0:0:8a2e:370:7334", 1);
     317           2 :                 testIPv6 ("2001:db8:85a3::8a2e:370:7334", 1);
     318           2 :                 testIPv6 ("2001:0db8:0000:0000:0000:0000:1428:57ab", 1);
     319           2 :                 testIPv6 ("2001:0db8:0000:0000:0000::1428:57ab", 1);
     320           2 :                 testIPv6 ("2001:0db8:0:0:0:0:1428:57ab", 1);
     321           2 :                 testIPv6 ("2001:0db8:0:0::1428:57ab", 1);
     322           2 :                 testIPv6 ("2001:0db8::1428:57ab", 1);
     323           2 :                 testIPv6 ("2001:db8::1428:57ab", 1);
     324           2 :                 testIPv6 ("0000:0000:0000:0000:0000:0000:0000:0001", 1);
     325           2 :                 testIPv6 ("::1", 1);
     326           2 :                 testIPv6 ("::ffff:0c22:384e", 1);
     327           2 :                 testIPv6 ("2001:0db8:1234:0000:0000:0000:0000:0000", 1);
     328           2 :                 testIPv6 ("2001:0db8:1234:ffff:ffff:ffff:ffff:ffff", 1);
     329           2 :                 testIPv6 ("2001:db8:a::123", 1);
     330           2 :                 testIPv6 ("fe80::", 1);
     331             : 
     332           2 :                 testIPv6 ("123", -1);
     333           2 :                 testIPv6 ("ldkfj", -1);
     334           2 :                 testIPv6 ("2001::FFD3::57ab", -1);
     335           2 :                 testIPv6 ("2001:db8:85a3::8a2e:37023:7334", -1);
     336           2 :                 testIPv6 ("2001:db8:85a3::8a2e:370k:7334", -1);
     337           2 :                 testIPv6 ("1:2:3:4:5:6:7:8:9", -1);
     338           2 :                 testIPv6 ("1::2::3", -1);
     339           2 :                 testIPv6 ("1:::3:4:5", -1);
     340           2 :                 testIPv6 ("1:2:3::4:5:6:7:8:9", -1);
     341             : 
     342             :                 // New from Aeron
     343           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:8888", 1);
     344           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777::", 1);
     345           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666::", 1);
     346           2 :                 testIPv6 ("1111:2222:3333:4444:5555::", 1);
     347           2 :                 testIPv6 ("1111:2222:3333:4444::", 1);
     348           2 :                 testIPv6 ("1111:2222:3333::", 1);
     349           2 :                 testIPv6 ("1111:2222::", 1);
     350           2 :                 testIPv6 ("1111::", 1);
     351             :                 // testIPv6("::", 1);     //duplicate
     352           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666::8888", 1);
     353           2 :                 testIPv6 ("1111:2222:3333:4444:5555::8888", 1);
     354           2 :                 testIPv6 ("1111:2222:3333:4444::8888", 1);
     355           2 :                 testIPv6 ("1111:2222:3333::8888", 1);
     356           2 :                 testIPv6 ("1111:2222::8888", 1);
     357           2 :                 testIPv6 ("1111::8888", 1);
     358           2 :                 testIPv6 ("::8888", 1);
     359           2 :                 testIPv6 ("1111:2222:3333:4444:5555::7777:8888", 1);
     360           2 :                 testIPv6 ("1111:2222:3333:4444::7777:8888", 1);
     361           2 :                 testIPv6 ("1111:2222:3333::7777:8888", 1);
     362           2 :                 testIPv6 ("1111:2222::7777:8888", 1);
     363           2 :                 testIPv6 ("1111::7777:8888", 1);
     364           2 :                 testIPv6 ("::7777:8888", 1);
     365           2 :                 testIPv6 ("1111:2222:3333:4444::6666:7777:8888", 1);
     366           2 :                 testIPv6 ("1111:2222:3333::6666:7777:8888", 1);
     367           2 :                 testIPv6 ("1111:2222::6666:7777:8888", 1);
     368           2 :                 testIPv6 ("1111::6666:7777:8888", 1);
     369           2 :                 testIPv6 ("::6666:7777:8888", 1);
     370           2 :                 testIPv6 ("1111:2222:3333::5555:6666:7777:8888", 1);
     371           2 :                 testIPv6 ("1111:2222::5555:6666:7777:8888", 1);
     372           2 :                 testIPv6 ("1111::5555:6666:7777:8888", 1);
     373           2 :                 testIPv6 ("::5555:6666:7777:8888", 1);
     374           2 :                 testIPv6 ("1111:2222::4444:5555:6666:7777:8888", 1);
     375           2 :                 testIPv6 ("1111::4444:5555:6666:7777:8888", 1);
     376           2 :                 testIPv6 ("::4444:5555:6666:7777:8888", 1);
     377           2 :                 testIPv6 ("1111::3333:4444:5555:6666:7777:8888", 1);
     378           2 :                 testIPv6 ("::3333:4444:5555:6666:7777:8888", 1);
     379           2 :                 testIPv6 ("::2222:3333:4444:5555:6666:7777:8888", 1);
     380           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:123.123.123.123", 1);
     381           2 :                 testIPv6 ("1111:2222:3333:4444:5555::123.123.123.123", 1);
     382           2 :                 testIPv6 ("1111:2222:3333:4444::123.123.123.123", 1);
     383           2 :                 testIPv6 ("1111:2222:3333::123.123.123.123", 1);
     384           2 :                 testIPv6 ("1111:2222::123.123.123.123", 1);
     385           2 :                 testIPv6 ("1111::123.123.123.123", 1);
     386           2 :                 testIPv6 ("::123.123.123.123", 1);
     387           2 :                 testIPv6 ("1111:2222:3333:4444::6666:123.123.123.123", 1);
     388           2 :                 testIPv6 ("1111:2222:3333::6666:123.123.123.123", 1);
     389           2 :                 testIPv6 ("1111:2222::6666:123.123.123.123", 1);
     390           2 :                 testIPv6 ("1111::6666:123.123.123.123", 1);
     391           2 :                 testIPv6 ("::6666:123.123.123.123", 1);
     392           2 :                 testIPv6 ("1111:2222:3333::5555:6666:123.123.123.123", 1);
     393           2 :                 testIPv6 ("1111:2222::5555:6666:123.123.123.123", 1);
     394           2 :                 testIPv6 ("1111::5555:6666:123.123.123.123", 1);
     395           2 :                 testIPv6 ("::5555:6666:123.123.123.123", 1);
     396           2 :                 testIPv6 ("1111:2222::4444:5555:6666:123.123.123.123", 1);
     397           2 :                 testIPv6 ("1111::4444:5555:6666:123.123.123.123", 1);
     398           2 :                 testIPv6 ("::4444:5555:6666:123.123.123.123", 1);
     399           2 :                 testIPv6 ("1111::3333:4444:5555:6666:123.123.123.123", 1);
     400           2 :                 testIPv6 ("::2222:3333:4444:5555:6666:123.123.123.123", 1);
     401             : 
     402             :                 // Playing with combinations of "0" and "::"
     403             :                 // NB: these are all sytactically correct, but are bad form
     404             :                 //   because "0" adjacent to "::" should be combined into "::"
     405           2 :                 testIPv6 ("::0:0:0:0:0:0:0", 1);
     406           2 :                 testIPv6 ("::0:0:0:0:0:0", 1);
     407           2 :                 testIPv6 ("::0:0:0:0:0", 1);
     408           2 :                 testIPv6 ("::0:0:0:0", 1);
     409           2 :                 testIPv6 ("::0:0:0", 1);
     410           2 :                 testIPv6 ("::0:0", 1);
     411           2 :                 testIPv6 ("::0", 1);
     412           2 :                 testIPv6 ("0:0:0:0:0:0:0::", 1);
     413           2 :                 testIPv6 ("0:0:0:0:0:0::", 1);
     414           2 :                 testIPv6 ("0:0:0:0:0::", 1);
     415           2 :                 testIPv6 ("0:0:0:0::", 1);
     416           2 :                 testIPv6 ("0:0:0::", 1);
     417           2 :                 testIPv6 ("0:0::", 1);
     418           2 :                 testIPv6 ("0::", 1);
     419             : 
     420             :                 // New invalid from Aeron
     421             :                 // Invalid data
     422           2 :                 testIPv6 ("XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX", -1);
     423             : 
     424             :                 // Too many components
     425           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:8888:9999", -1);
     426           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:8888::", -1);
     427           2 :                 testIPv6 ("::2222:3333:4444:5555:6666:7777:8888:9999", -1);
     428             : 
     429             :                 // Too few components
     430           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777", -1);
     431           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666", -1);
     432           2 :                 testIPv6 ("1111:2222:3333:4444:5555", -1);
     433           2 :                 testIPv6 ("1111:2222:3333:4444", -1);
     434           2 :                 testIPv6 ("1111:2222:3333", -1);
     435           2 :                 testIPv6 ("1111:2222", -1);
     436           2 :                 testIPv6 ("1111", -1);
     437             : 
     438             :                 // Missing :
     439           2 :                 testIPv6 ("11112222:3333:4444:5555:6666:7777:8888", -1);
     440           2 :                 testIPv6 ("1111:22223333:4444:5555:6666:7777:8888", -1);
     441           2 :                 testIPv6 ("1111:2222:33334444:5555:6666:7777:8888", -1);
     442           2 :                 testIPv6 ("1111:2222:3333:44445555:6666:7777:8888", -1);
     443           2 :                 testIPv6 ("1111:2222:3333:4444:55556666:7777:8888", -1);
     444           2 :                 testIPv6 ("1111:2222:3333:4444:5555:66667777:8888", -1);
     445           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:77778888", -1);
     446             : 
     447             :                 // Missing : intended for ::
     448           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:8888:", -1);
     449           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:", -1);
     450           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:", -1);
     451           2 :                 testIPv6 ("1111:2222:3333:4444:5555:", -1);
     452           2 :                 testIPv6 ("1111:2222:3333:4444:", -1);
     453           2 :                 testIPv6 ("1111:2222:3333:", -1);
     454           2 :                 testIPv6 ("1111:2222:", -1);
     455           2 :                 testIPv6 ("1111:", -1);
     456           2 :                 testIPv6 (":", -1);
     457           2 :                 testIPv6 (":8888", -1);
     458           2 :                 testIPv6 (":7777:8888", -1);
     459           2 :                 testIPv6 (":6666:7777:8888", -1);
     460           2 :                 testIPv6 (":5555:6666:7777:8888", -1);
     461           2 :                 testIPv6 (":4444:5555:6666:7777:8888", -1);
     462           2 :                 testIPv6 (":3333:4444:5555:6666:7777:8888", -1);
     463           2 :                 testIPv6 (":2222:3333:4444:5555:6666:7777:8888", -1);
     464           2 :                 testIPv6 (":1111:2222:3333:4444:5555:6666:7777:8888", -1);
     465             : 
     466             :                 // :::
     467           2 :                 testIPv6 (":::2222:3333:4444:5555:6666:7777:8888", -1);
     468           2 :                 testIPv6 ("1111:::3333:4444:5555:6666:7777:8888", -1);
     469           2 :                 testIPv6 ("1111:2222:::4444:5555:6666:7777:8888", -1);
     470           2 :                 testIPv6 ("1111:2222:3333:::5555:6666:7777:8888", -1);
     471           2 :                 testIPv6 ("1111:2222:3333:4444:::6666:7777:8888", -1);
     472           2 :                 testIPv6 ("1111:2222:3333:4444:5555:::7777:8888", -1);
     473           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:::8888", -1);
     474           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:::", -1);
     475             : 
     476             :                 // Double ::");
     477           2 :                 testIPv6 ("::2222::4444:5555:6666:7777:8888", -1);
     478           2 :                 testIPv6 ("::2222:3333::5555:6666:7777:8888", -1);
     479           2 :                 testIPv6 ("::2222:3333:4444::6666:7777:8888", -1);
     480           2 :                 testIPv6 ("::2222:3333:4444:5555::7777:8888", -1);
     481           2 :                 testIPv6 ("::2222:3333:4444:5555:7777::8888", -1);
     482           2 :                 testIPv6 ("::2222:3333:4444:5555:7777:8888::", -1);
     483             : 
     484           2 :                 testIPv6 ("1111::3333::5555:6666:7777:8888", -1);
     485           2 :                 testIPv6 ("1111::3333:4444::6666:7777:8888", -1);
     486           2 :                 testIPv6 ("1111::3333:4444:5555::7777:8888", -1);
     487           2 :                 testIPv6 ("1111::3333:4444:5555:6666::8888", -1);
     488           2 :                 testIPv6 ("1111::3333:4444:5555:6666:7777::", -1);
     489             : 
     490           2 :                 testIPv6 ("1111:2222::4444::6666:7777:8888", -1);
     491           2 :                 testIPv6 ("1111:2222::4444:5555::7777:8888", -1);
     492           2 :                 testIPv6 ("1111:2222::4444:5555:6666::8888", -1);
     493           2 :                 testIPv6 ("1111:2222::4444:5555:6666:7777::", -1);
     494             : 
     495           2 :                 testIPv6 ("1111:2222:3333::5555::7777:8888", -1);
     496           2 :                 testIPv6 ("1111:2222:3333::5555:6666::8888", -1);
     497           2 :                 testIPv6 ("1111:2222:3333::5555:6666:7777::", -1);
     498             : 
     499           2 :                 testIPv6 ("1111:2222:3333:4444::6666::8888", -1);
     500           2 :                 testIPv6 ("1111:2222:3333:4444::6666:7777::", -1);
     501             : 
     502           2 :                 testIPv6 ("1111:2222:3333:4444:5555::7777::", -1);
     503             : 
     504             : 
     505             :                 // Too many components"
     506           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:8888:1.2.3.4", -1);
     507           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:1.2.3.4", -1);
     508           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666::1.2.3.4", -1);
     509           2 :                 testIPv6 ("::2222:3333:4444:5555:6666:7777:1.2.3.4", -1);
     510           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:1.2.3.4.5", -1);
     511             : 
     512             :                 // Too few components
     513           2 :                 testIPv6 ("1111:2222:3333:4444:5555:1.2.3.4", -1);
     514           2 :                 testIPv6 ("1111:2222:3333:4444:1.2.3.4", -1);
     515           2 :                 testIPv6 ("1111:2222:3333:1.2.3.4", -1);
     516           2 :                 testIPv6 ("1111:2222:1.2.3.4", -1);
     517           2 :                 testIPv6 ("1111:1.2.3.4", -1);
     518           2 :                 testIPv6 ("1.2.3.4", -1);
     519             : 
     520             :                 // Missing :
     521           2 :                 testIPv6 ("11112222:3333:4444:5555:6666:1.2.3.4", -1);
     522           2 :                 testIPv6 ("1111:22223333:4444:5555:6666:1.2.3.4", -1);
     523           2 :                 testIPv6 ("1111:2222:33334444:5555:6666:1.2.3.4", -1);
     524           2 :                 testIPv6 ("1111:2222:3333:44445555:6666:1.2.3.4", -1);
     525           2 :                 testIPv6 ("1111:2222:3333:4444:55556666:1.2.3.4", -1);
     526           2 :                 testIPv6 ("1111:2222:3333:4444:5555:66661.2.3.4", -1);
     527             : 
     528             :                 // Missing .
     529           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:255255.255.255", -1);
     530           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:255.255255.255", -1);
     531           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:255.255.255255", -1);
     532             : 
     533             :                 // Missing : intended for ::
     534           2 :                 testIPv6 (":1.2.3.4", -1);
     535           2 :                 testIPv6 (":6666:1.2.3.4", -1);
     536           2 :                 testIPv6 (":5555:6666:1.2.3.4", -1);
     537           2 :                 testIPv6 (":4444:5555:6666:1.2.3.4", -1);
     538           2 :                 testIPv6 (":3333:4444:5555:6666:1.2.3.4", -1);
     539           2 :                 testIPv6 (":2222:3333:4444:5555:6666:1.2.3.4", -1);
     540           2 :                 testIPv6 (":1111:2222:3333:4444:5555:6666:1.2.3.4", -1);
     541             : 
     542             :                 // :::
     543           2 :                 testIPv6 (":::2222:3333:4444:5555:6666:1.2.3.4", -1);
     544           2 :                 testIPv6 ("1111:::3333:4444:5555:6666:1.2.3.4", -1);
     545           2 :                 testIPv6 ("1111:2222:::4444:5555:6666:1.2.3.4", -1);
     546           2 :                 testIPv6 ("1111:2222:3333:::5555:6666:1.2.3.4", -1);
     547           2 :                 testIPv6 ("1111:2222:3333:4444:::6666:1.2.3.4", -1);
     548           2 :                 testIPv6 ("1111:2222:3333:4444:5555:::1.2.3.4", -1);
     549             : 
     550             :                 // Double ::
     551           2 :                 testIPv6 ("::2222::4444:5555:6666:1.2.3.4", -1);
     552           2 :                 testIPv6 ("::2222:3333::5555:6666:1.2.3.4", -1);
     553           2 :                 testIPv6 ("::2222:3333:4444::6666:1.2.3.4", -1);
     554           2 :                 testIPv6 ("::2222:3333:4444:5555::1.2.3.4", -1);
     555             : 
     556           2 :                 testIPv6 ("1111::3333::5555:6666:1.2.3.4", -1);
     557           2 :                 testIPv6 ("1111::3333:4444::6666:1.2.3.4", -1);
     558           2 :                 testIPv6 ("1111::3333:4444:5555::1.2.3.4", -1);
     559             : 
     560           2 :                 testIPv6 ("1111:2222::4444::6666:1.2.3.4", -1);
     561           2 :                 testIPv6 ("1111:2222::4444:5555::1.2.3.4", -1);
     562             : 
     563           2 :                 testIPv6 ("1111:2222:3333::5555::1.2.3.4", -1);
     564             : 
     565             :                 // Missing parts
     566           2 :                 testIPv6 ("::.", -1);
     567           2 :                 testIPv6 ("::..", -1);
     568           2 :                 testIPv6 ("::...", -1);
     569           2 :                 testIPv6 ("::1...", -1);
     570           2 :                 testIPv6 ("::1.2..", -1);
     571           2 :                 testIPv6 ("::1.2.3.", -1);
     572           2 :                 testIPv6 ("::.2..", -1);
     573           2 :                 testIPv6 ("::.2.3.", -1);
     574           2 :                 testIPv6 ("::.2.3.4", -1);
     575           2 :                 testIPv6 ("::..3.", -1);
     576           2 :                 testIPv6 ("::..3.4", -1);
     577           2 :                 testIPv6 ("::...4", -1);
     578             : 
     579             :                 // Extra : in front
     580           2 :                 testIPv6 (":1111:2222:3333:4444:5555:6666:7777::", -1);
     581           2 :                 testIPv6 (":1111:2222:3333:4444:5555:6666::", -1);
     582           2 :                 testIPv6 (":1111:2222:3333:4444:5555::", -1);
     583           2 :                 testIPv6 (":1111:2222:3333:4444::", -1);
     584           2 :                 testIPv6 (":1111:2222:3333::", -1);
     585           2 :                 testIPv6 (":1111:2222::", -1);
     586           2 :                 testIPv6 (":1111::", -1);
     587           2 :                 testIPv6 (":::", -1);
     588           2 :                 testIPv6 (":1111:2222:3333:4444:5555:6666::8888", -1);
     589           2 :                 testIPv6 (":1111:2222:3333:4444:5555::8888", -1);
     590           2 :                 testIPv6 (":1111:2222:3333:4444::8888", -1);
     591           2 :                 testIPv6 (":1111:2222:3333::8888", -1);
     592           2 :                 testIPv6 (":1111:2222::8888", -1);
     593           2 :                 testIPv6 (":1111::8888", -1);
     594           2 :                 testIPv6 (":::8888", -1);
     595           2 :                 testIPv6 (":1111:2222:3333:4444:5555::7777:8888", -1);
     596           2 :                 testIPv6 (":1111:2222:3333:4444::7777:8888", -1);
     597           2 :                 testIPv6 (":1111:2222:3333::7777:8888", -1);
     598           2 :                 testIPv6 (":1111:2222::7777:8888", -1);
     599           2 :                 testIPv6 (":1111::7777:8888", -1);
     600           2 :                 testIPv6 (":::7777:8888", -1);
     601           2 :                 testIPv6 (":1111:2222:3333:4444::6666:7777:8888", -1);
     602           2 :                 testIPv6 (":1111:2222:3333::6666:7777:8888", -1);
     603           2 :                 testIPv6 (":1111:2222::6666:7777:8888", -1);
     604           2 :                 testIPv6 (":1111::6666:7777:8888", -1);
     605           2 :                 testIPv6 (":::6666:7777:8888", -1);
     606           2 :                 testIPv6 (":1111:2222:3333::5555:6666:7777:8888", -1);
     607           2 :                 testIPv6 (":1111:2222::5555:6666:7777:8888", -1);
     608           2 :                 testIPv6 (":1111::5555:6666:7777:8888", -1);
     609           2 :                 testIPv6 (":::5555:6666:7777:8888", -1);
     610           2 :                 testIPv6 (":1111:2222::4444:5555:6666:7777:8888", -1);
     611           2 :                 testIPv6 (":1111::4444:5555:6666:7777:8888", -1);
     612           2 :                 testIPv6 (":::4444:5555:6666:7777:8888", -1);
     613           2 :                 testIPv6 (":1111::3333:4444:5555:6666:7777:8888", -1);
     614           2 :                 testIPv6 (":::3333:4444:5555:6666:7777:8888", -1);
     615           2 :                 testIPv6 (":::2222:3333:4444:5555:6666:7777:8888", -1);
     616           2 :                 testIPv6 (":1111:2222:3333:4444:5555:6666:1.2.3.4", -1);
     617           2 :                 testIPv6 (":1111:2222:3333:4444:5555::1.2.3.4", -1);
     618           2 :                 testIPv6 (":1111:2222:3333:4444::1.2.3.4", -1);
     619           2 :                 testIPv6 (":1111:2222:3333::1.2.3.4", -1);
     620           2 :                 testIPv6 (":1111:2222::1.2.3.4", -1);
     621           2 :                 testIPv6 (":1111::1.2.3.4", -1);
     622           2 :                 testIPv6 (":::1.2.3.4", -1);
     623           2 :                 testIPv6 (":1111:2222:3333:4444::6666:1.2.3.4", -1);
     624           2 :                 testIPv6 (":1111:2222:3333::6666:1.2.3.4", -1);
     625           2 :                 testIPv6 (":1111:2222::6666:1.2.3.4", -1);
     626           2 :                 testIPv6 (":1111::6666:1.2.3.4", -1);
     627           2 :                 testIPv6 (":::6666:1.2.3.4", -1);
     628           2 :                 testIPv6 (":1111:2222:3333::5555:6666:1.2.3.4", -1);
     629           2 :                 testIPv6 (":1111:2222::5555:6666:1.2.3.4", -1);
     630           2 :                 testIPv6 (":1111::5555:6666:1.2.3.4", -1);
     631           2 :                 testIPv6 (":::5555:6666:1.2.3.4", -1);
     632           2 :                 testIPv6 (":1111:2222::4444:5555:6666:1.2.3.4", -1);
     633           2 :                 testIPv6 (":1111::4444:5555:6666:1.2.3.4", -1);
     634           2 :                 testIPv6 (":::4444:5555:6666:1.2.3.4", -1);
     635           2 :                 testIPv6 (":1111::3333:4444:5555:6666:1.2.3.4", -1);
     636           2 :                 testIPv6 (":::2222:3333:4444:5555:6666:1.2.3.4", -1);
     637             : 
     638             :                 // Extra : at end
     639           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:7777:::", -1);
     640           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666:::", -1);
     641           2 :                 testIPv6 ("1111:2222:3333:4444:5555:::", -1);
     642           2 :                 testIPv6 ("1111:2222:3333:4444:::", -1);
     643           2 :                 testIPv6 ("1111:2222:3333:::", -1);
     644           2 :                 testIPv6 ("1111:2222:::", -1);
     645           2 :                 testIPv6 ("1111:::", -1);
     646           2 :                 testIPv6 (":::", -1);
     647           2 :                 testIPv6 ("1111:2222:3333:4444:5555:6666::8888:", -1);
     648           2 :                 testIPv6 ("1111:2222:3333:4444:5555::8888:", -1);
     649           2 :                 testIPv6 ("1111:2222:3333:4444::8888:", -1);
     650           2 :                 testIPv6 ("1111:2222:3333::8888:", -1);
     651           2 :                 testIPv6 ("1111:2222::8888:", -1);
     652           2 :                 testIPv6 ("1111::8888:", -1);
     653           2 :                 testIPv6 ("::8888:", -1);
     654           2 :                 testIPv6 ("1111:2222:3333:4444:5555::7777:8888:", -1);
     655           2 :                 testIPv6 ("1111:2222:3333:4444::7777:8888:", -1);
     656           2 :                 testIPv6 ("1111:2222:3333::7777:8888:", -1);
     657           2 :                 testIPv6 ("1111:2222::7777:8888:", -1);
     658           2 :                 testIPv6 ("1111::7777:8888:", -1);
     659           2 :                 testIPv6 ("::7777:8888:", -1);
     660           2 :                 testIPv6 ("1111:2222:3333:4444::6666:7777:8888:", -1);
     661           2 :                 testIPv6 ("1111:2222:3333::6666:7777:8888:", -1);
     662           2 :                 testIPv6 ("1111:2222::6666:7777:8888:", -1);
     663           2 :                 testIPv6 ("1111::6666:7777:8888:", -1);
     664           2 :                 testIPv6 ("::6666:7777:8888:", -1);
     665           2 :                 testIPv6 ("1111:2222:3333::5555:6666:7777:8888:", -1);
     666           2 :                 testIPv6 ("1111:2222::5555:6666:7777:8888:", -1);
     667           2 :                 testIPv6 ("1111::5555:6666:7777:8888:", -1);
     668           2 :                 testIPv6 ("::5555:6666:7777:8888:", -1);
     669           2 :                 testIPv6 ("1111:2222::4444:5555:6666:7777:8888:", -1);
     670           2 :                 testIPv6 ("1111::4444:5555:6666:7777:8888:", -1);
     671           2 :                 testIPv6 ("::4444:5555:6666:7777:8888:", -1);
     672           2 :                 testIPv6 ("1111::3333:4444:5555:6666:7777:8888:", -1);
     673           2 :                 testIPv6 ("::3333:4444:5555:6666:7777:8888:", -1);
     674           2 :                 testIPv6 ("::2222:3333:4444:5555:6666:7777:8888:", -1);
     675             : 
     676             :                 // Additional cases: http://crisp.tweakblogs.net/blog/2031/ipv6-validation-%28and-caveats%29.html
     677           2 :                 testIPv6 ("0:a:b:c:d:e:f::", 1);
     678           2 :                 testIPv6 ("::0:a:b:c:d:e:f", 1); // syntactically correct, but bad form (::0:... could be combined)
     679           2 :                 testIPv6 ("a:b:c:d:e:f:0::", 1);
     680           2 :                 testIPv6 ("':10.0.0.1", -1);
     681             :         }
     682             :         else
     683             :         {
     684             :                 // Tested with
     685             :                 //      - http://formvalidation.io/validators/ip/
     686             :                 //      - http://www.csgnetwork.com/directipverify.html?IPvalue=192.168.1
     687           2 :                 testIPv4 ("192.168.1", -1); // Invalid
     688             :         }
     689             : 
     690             :         if (!PLUGIN_LEAKS_MEMORY)
     691             :         {
     692           4 :                 testIPAny ("::1", 1);
     693           4 :                 testIPAny ("192.168.0.1", 1);
     694           4 :                 testIPAny ("42.42.42.42", 1);
     695             : 
     696           4 :                 testIPAny ("::ffff:192.0.128", -1);
     697           4 :                 testIPAny ("x", -1);
     698             :         }
     699           4 : }

Generated by: LCOV version 1.13