]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
testbound program.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 26 Jan 2007 11:57:09 +0000 (11:57 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 26 Jan 2007 11:57:09 +0000 (11:57 +0000)
git-svn-id: file:///svn/unbound/trunk@39 be551aaa-1e26-0410-a405-d3ace91eadb9

Makefile.in
aclocal.m4
doc/Changelog
testcode/testbound.c [new file with mode: 0644]
testcode/unitmain.c

index 06ef1350474b1958362655f54e73a2a233d71945..5e6aa8a732dfbbbb8d45db96e933f2a0eefaa25e 100644 (file)
@@ -48,11 +48,13 @@ INSTALL=$(srcdir)/install-sh
 
 COMMON_SRC=$(wildcard services/*.c util/*.c)
 COMMON_OBJ=$(addprefix $(BUILD),$(COMMON_SRC:.c=.o) $(LIBOBJS))
-UNITTEST_SRC=$(wildcard testcode/*.c)
+UNITTEST_SRC=testcode/unitmain.c
 UNITTEST_OBJ=$(addprefix $(BUILD),$(UNITTEST_SRC:.c=.o))
 DAEMON_SRC=$(wildcard daemon/*.c)
 DAEMON_OBJ=$(addprefix $(BUILD),$(DAEMON_SRC:.c=.o))
-ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC)
+TESTBOUND_SRC=testcode/testbound.c
+TESTBOUND_OBJ=$(addprefix $(BUILD),$(TESTBOUND_SRC:.c=.o))
+ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) $(TESTBOUND_SRC)
 ALL_OBJ=$(addprefix $(BUILD),$(ALL_SRC:.c=.o) $(LIBOBJS))
 
 COMPILE=$(LIBTOOL) --tag=CC --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS)
@@ -66,7 +68,7 @@ $(BUILD)%.o:    $(srcdir)/%.c
 
 .PHONY:        clean realclean doc lint all 
 
-all:   $(COMMON_OBJ) unbound unittest
+all:   $(COMMON_OBJ) unbound unittest testbound
 
 unbound:       $(COMMON_OBJ) $(DAEMON_OBJ)
        $(INFO) Link $@
@@ -76,6 +78,10 @@ unittest:    $(COMMON_OBJ) $(UNITTEST_OBJ)
        $(INFO) Link $@
        $Q$(LINK) -o $@ $^ $(LIBS)
 
+testbound:     $(COMMON_OBJ) $(TESTBOUND_OBJ)
+       $(INFO) Link $@
+       $Q$(LINK) -o $@ $^ $(LIBS)
+
 clean:
        rm -f *.o *.d *.lo *~ tags
        rm -rf autom4te.cache .libs build doc/html
@@ -92,8 +98,8 @@ lint:
                if [ $$? -ne 0 ] ; then exit 1 ; fi ; \
        done
 
-tags:  $(srcdir)/*.c ldns/*.[ch]
-       ctags  -f $(srcdir)/tags $(srcdir)/*.[ch] ldns/*.[ch]
+tags:  $(srcdir)/*.[ch] $(srcdir)/*/*.[ch]
+       ctags  -f $(srcdir)/tags $(srcdir)/*.[ch] $(srcdir)/*/*.[ch]
 
 doc:
 ifdef doxygen
index dac046e7fe1e222e0996a1ea99fff803ca979b7b..e1fc6602fc0b7b2e085610abec285b2334fff058 100644 (file)
@@ -1,11 +1,17 @@
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
-## Free Software Foundation, Inc.
-## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-##
-## This file is free software; the Free Software Foundation gives
-## unlimited permission to copy and/or distribute it, with or without
-## modifications, as long as this notice is preserved.
 
 # serial 48 AC_PROG_LIBTOOL
 
@@ -2688,10 +2694,6 @@ _LT_AC_SYS_COMPILER
 _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
 AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
 AC_LIBTOOL_PROG_COMPILER_PIC($1)
 AC_LIBTOOL_PROG_CC_C_O($1)
@@ -3720,10 +3722,6 @@ test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
 _LT_AC_TAGVAR(GCC, $1)="$GXX"
 _LT_AC_TAGVAR(LD, $1)="$LD"
 
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
 AC_LIBTOOL_POSTDEP_PREDEP($1)
 AC_LIBTOOL_PROG_COMPILER_PIC($1)
 AC_LIBTOOL_PROG_CC_C_O($1)
@@ -4050,10 +4048,6 @@ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 
 _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
 
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
 AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
 AC_LIBTOOL_PROG_COMPILER_PIC($1)
 AC_LIBTOOL_PROG_CC_C_O($1)
@@ -6350,12 +6344,10 @@ AC_DEFUN([LT_AC_PROG_RC],
 [AC_CHECK_TOOL(RC, windres, no)
 ])
 
-############################################################
 # NOTE: This macro has been submitted for inclusion into   #
 #  GNU Autoconf as AC_PROG_SED.  When it is available in   #
 #  a released version of Autoconf we should remove this    #
 #  macro and use it instead.                               #
-############################################################
 # LT_AC_PROG_SED
 # --------------
 # Check for a fully-functional sed program, that truncates
@@ -6412,3 +6404,4 @@ done
 SED=$lt_cv_path_SED
 AC_MSG_RESULT([$SED])
 ])
+
index 625b87f9e16e7550e1225e6953bf572c85d143c4..776fc90bd3aa61f9442c8ee3f1b54f27b9b63062 100644 (file)
@@ -1,6 +1,8 @@
 26  January 2007: Wouter
        - fixed memleak.
        - make lint works on BSD and Linux (openssl defines).
+       - make tags works.
+       - testbound program start.
 
 25  January 2007: Wouter
        - fixed lint so it may work on BSD.
diff --git a/testcode/testbound.c b/testcode/testbound.c
new file mode 100644 (file)
index 0000000..88d684e
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * testcode/testbound.c - test program for unbound.
+ *
+ * Copyright (c) 2007, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/**
+ * \file
+ * Exits with code 1 on a failure. 0 if all unit tests are successfull.
+ */
+
+#include "config.h"
+
+/** 
+ * include the main program from the unbound daemon.
+ * rename main to daemon_main to call it
+ */
+#define main daemon_main
+#include "daemon/unbound.c"
+#undef main
+
+/** give commandline usage for testbound. */
+static void
+testbound_usage()
+{
+       printf("usage: testbound [options]\n");
+       printf("\ttest the unbound daemon.\n");
+       printf("-h      this help\n");
+       printf("-o str  unbound commandline options separated by spaces.\n");
+       printf("Version %s\n", PACKAGE_VERSION);
+       printf("BSD licensed, see LICENSE file in source package.\n");
+       printf("Report bugs to %s.\n", PACKAGE_BUGREPORT);
+}
+
+/** Max number of arguments to pass to unbound. */
+#define MAXARG 100
+
+/** 
+ * Add options from string to passed argc. splits on whitespace.
+ * @param optarg: the option argument, "-v -p 12345" or so.
+ * @param pass_argc: ptr to the argc for unbound. Modified.
+ * @param pass_argv: the argv to pass to unbound. Modified.
+ */
+static void
+add_opts(char* optarg, int* pass_argc, char* pass_argv[])
+{
+       char *p = optarg, *np;
+       size_t len;
+       while(p && isspace(*p)) 
+               p++;
+       while(p && *p) {
+               /* find location of next string and length of this one */
+               if((np = strchr(p, ' ')))
+                       len = (size_t)(np-p);
+               else    len = strlen(p);
+               /* allocate and copy option */
+               if(*pass_argc >= MAXARG-1) {
+                       printf("too many arguments: '%s'\n", p);
+                       exit(1);
+               }
+               pass_argv[*pass_argc] = (char*)malloc(len+1);
+               if(!pass_argv[*pass_argc]) {
+                       printf("out of memory\n");
+                       exit(1);
+               }
+               memcpy(pass_argv[*pass_argc], p, len);
+               pass_argv[*pass_argc][len] = 0;
+               (*pass_argc)++;
+               /* go to next option */
+               p = np;
+               while(p && isspace(*p)) 
+                       p++;
+       }
+}
+
+/** pretty print commandline for unbound in this test. */
+static void
+echo_cmdline(int argc, char* argv[])
+{
+       int i;
+       printf("starting:");
+       for(i=0; i<argc; i++) {
+               printf(" [%s]", argv[i]);
+       }
+       printf("\n");
+}
+       
+/**
+ * Main unit test program. Setup, teardown and report errors.
+ * @param argc: arg count.
+ * @param argv: array of commandline arguments.
+ */
+int main(int argc, char* argv[])
+{
+       int c, res;
+       int pass_argc = 0;
+       char* pass_argv[MAXARG];
+       int init_optind = optind;
+       char* init_optarg = optarg;
+
+       printf("Start of %s testbound program.\n", PACKAGE_STRING);
+       /* determine commandline options for the daemon */
+       pass_argc = 1;
+       pass_argv[0] = "unbound";
+       while( (c=getopt(argc, argv, "ho:")) != -1) {
+               switch(c) {
+               case 'o':
+                       add_opts(optarg, &pass_argc, pass_argv);
+                       break;
+               case '?':
+               case 'h':
+               default:
+                       testbound_usage();
+                       return 1;
+               }
+       }
+       argc -= optind;
+       argv += optind;
+       if(argc != 0) {
+               testbound_usage();
+               return 1;
+       }
+
+       /* setup test environment */
+
+       pass_argv[pass_argc] = NULL;
+       echo_cmdline(pass_argc, pass_argv);
+
+       /* reset getopt processing */
+       optind = init_optind;
+       optarg = init_optarg;
+
+       /* run the normal daemon */
+       res = daemon_main(pass_argc, pass_argv);
+
+       for(c=1; c<pass_argc; c++)
+               free(pass_argv[c]);
+       return res;
+}
index fcc48142a1f4751d4f5e22ad8b067fb87984c3c1..0627b7ddd347c38ff7e4a8ef129ebc9581ce5f08 100644 (file)
@@ -3,7 +3,34 @@
  *
  * Copyright (c) 2007, NLnet Labs. All rights reserved.
  *
- * See LICENSE for the license.
+ * This software is open source.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  *
  */
 /**