From 21a2b4f95b4488645ba5a6254fcb8919c4915f73 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 20 Jun 2013 08:32:50 +0000 Subject: continuing refactoring of regex library structure, disambiguating symbol names between old regex library which is now internal and the public API; moving IP-to-regex conversion functions to tun library, as only vpn is using those to begin with --- src/tun/Makefile.am | 16 ++++++-- src/tun/test_regex.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 src/tun/test_regex.c (limited to 'src/tun') diff --git a/src/tun/Makefile.am b/src/tun/Makefile.am index 3b2b573b6..96e79d0d8 100644 --- a/src/tun/Makefile.am +++ b/src/tun/Makefile.am @@ -12,18 +12,19 @@ endif lib_LTLIBRARIES = libgnunettun.la libgnunettun_la_SOURCES = \ - tun.c + tun.c \ + regex.c libgnunettun_la_LIBADD = \ $(top_builddir)/src/util/libgnunetutil.la $(XLIB) \ $(LTLIBINTL) libgnunettun_la_LDFLAGS = \ $(GN_LIB_LDFLAGS) \ - -version-info 0:0:0 + -version-info 1:0:1 check_PROGRAMS = \ - test_tun - + test_tun \ + test_regex if ENABLE_TEST_RUN TESTS = $(check_PROGRAMS) @@ -34,3 +35,10 @@ test_tun_SOURCES = \ test_tun_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/tun/libgnunettun.la + + +test_regex_SOURCES = \ + test_regex.c +test_regex_LDADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/tun/libgnunettun.la diff --git a/src/tun/test_regex.c b/src/tun/test_regex.c new file mode 100644 index 000000000..c4c618d85 --- /dev/null +++ b/src/tun/test_regex.c @@ -0,0 +1,103 @@ +/* + This file is part of GNUnet + (C) 2012, 2013 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 tun/test_regex.c + * @brief simple test for regex.c iptoregex functions + * @author Maximilian Szengel + */ +#include "platform.h" +#include "gnunet_tun_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_TUN_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_TUN_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", "WARNING", 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 ("187.238.225.0", "255.255.255.128", + "1011101111101110111000010(0|1)+", "E1E1:73F9:51BE::0", + 49, + "1110000111100001011100111111100101010001101111100(0|1)+"); + + error += + test_iptoregex ("255.255.255.255", "255.255.255.255", + "11111111111111111111111111111111", + "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", 128, + "11111111111111111111111111111111" + "11111111111111111111111111111111" + "11111111111111111111111111111111" + "11111111111111111111111111111111"); + + error += + test_iptoregex ("0.0.0.0", "255.255.255.255", + "00000000000000000000000000000000", "0::0", 128, + "00000000000000000000000000000000" + "00000000000000000000000000000000" + "00000000000000000000000000000000" + "00000000000000000000000000000000"); + + return error; +} -- cgit v1.2.3