diff options
author | szengel <szengel@140774ce-b5e7-0310-ab8b-a85725594a96> | 2012-09-27 13:18:09 +0000 |
---|---|---|
committer | szengel <szengel@140774ce-b5e7-0310-ab8b-a85725594a96> | 2012-09-27 13:18:09 +0000 |
commit | 9349bd0c434e611f45ef167c5c6aafbfad7a9887 (patch) | |
tree | 9f7ec68f2799f14e2ea4cb49fc0f54eecf4b3122 /src/regex | |
parent | 1f94b001d509af4488693390749a951406d7cf44 (diff) |
iptoregex test
git-svn-id: https://gnunet.org/svn/gnunet@24054 140774ce-b5e7-0310-ab8b-a85725594a96
Diffstat (limited to 'src/regex')
-rw-r--r-- | src/regex/Makefile.am | 7 | ||||
-rw-r--r-- | src/regex/regex.c | 6 | ||||
-rw-r--r-- | src/regex/test_regex_iptoregex.c | 98 |
3 files changed, 107 insertions, 4 deletions
diff --git a/src/regex/Makefile.am b/src/regex/Makefile.am index cd55d755e8..ca7e522651 100644 --- a/src/regex/Makefile.am +++ b/src/regex/Makefile.am @@ -23,7 +23,8 @@ check_PROGRAMS = \ test_regex_eval_api \ test_regex_iterate_api \ test_regex_proofs \ - test_regex_graph_api + test_regex_graph_api \ + test_regex_iptoregex if ENABLE_TEST_RUN TESTS = $(check_PROGRAMS) @@ -53,6 +54,10 @@ test_regex_graph_api_LDADD = \ $(top_builddir)/src/regex/libgnunetregex.la \ $(top_builddir)/src/util/libgnunetutil.la +test_regex_iptoregex_SOURCES = \ +test_regex_iptoregex.c +test_regex_iptoregex_LDADD = \ +$(top_builddir)/src/regex/libgnunetregex.la EXTRA_DIST = # test_regex_data.conf diff --git a/src/regex/regex.c b/src/regex/regex.c index 676685395b..c92726096a 100644 --- a/src/regex/regex.c +++ b/src/regex/regex.c @@ -3006,7 +3006,7 @@ ipv4netmasktoprefixlen (const char *netmask) if (1 != inet_pton (AF_INET, netmask, &a)) return 0; len = 32; - for (t = htonl (~a.s_addr); 0 != t; t >>= 1) + for (t = htonl (~a.s_addr); 0 != t; t >>= 1) len--; return len; } @@ -3043,8 +3043,8 @@ GNUNET_REGEX_ipv4toregex (const struct in_addr *ip, const char *netmask, * bytes long. */ void -GNUNET_REGEX_ipv6toregex (const struct in6_addr *ipv6, - unsigned int prefixlen, char *rxstr) +GNUNET_REGEX_ipv6toregex (const struct in6_addr *ipv6, unsigned int prefixlen, + char *rxstr) { iptobinstr (AF_INET6, ipv6, rxstr); rxstr[prefixlen] = '\0'; diff --git a/src/regex/test_regex_iptoregex.c b/src/regex/test_regex_iptoregex.c new file mode 100644 index 0000000000..7fe1c384f8 --- /dev/null +++ b/src/regex/test_regex_iptoregex.c @@ -0,0 +1,98 @@ +/* + This file is part of GNUnet + (C) 2012 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +/** + * @file regex/test_regex_iptoregex.c + * @brief simple test for regex.c iptoregex functions + * @author Maximilian Szengel + */ +#include "platform.h" +#include "gnunet_regex_lib.h" + + +static int +test_iptoregex (const char *ipv4, const char *netmask, const char *expectedv4, + const char *ipv6, unsigned int prefixlen, + const char *expectedv6) +{ + int error = 0; + + struct in_addr a; + struct in6_addr b; + char rxv4[GNUNET_REGEX_IPV4_REGEXLEN]; + char rxv6[GNUNET_REGEX_IPV6_REGEXLEN]; + + GNUNET_assert (1 == inet_pton (AF_INET, ipv4, &a)); + GNUNET_REGEX_ipv4toregex (&a, netmask, rxv4); + + + if (0 != strcmp (rxv4, expectedv4)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected: %s but got: %s\n", + expectedv4, rxv4); + error++; + } + + GNUNET_assert (1 == inet_pton (AF_INET6, ipv6, &b)); + GNUNET_REGEX_ipv6toregex (&b, prefixlen, rxv6); + + if (0 != strcmp (rxv6, expectedv6)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected: %s but got: %s\n", + expectedv6, rxv6); + error++; + } + + return error; +} + +int +main (int argc, char *argv[]) +{ + GNUNET_log_setup ("test-regex", +#if VERBOSE + "DEBUG", +#else + "WARNING", +#endif + NULL); + + int error; + + error = 0; + + error += + test_iptoregex ("192.0.0.0", "255.255.255.0", + "110000000000000000000000(0|1)+", "FFFF::0", 16, + "1111111111111111(0|1)+"); + + error += + test_iptoregex ("255.255.255.255", "255.255.255.255", + "11111111111111111111111111111111", + "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", 128, + "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); + + error += + test_iptoregex ("0.0.0.0", "255.255.255.255", + "00000000000000000000000000000000", "0::0", 128, + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); + + + return error; +} |