From: Wouter Wijngaards Date: Fri, 26 Jan 2007 11:57:09 +0000 (+0000) Subject: testbound program. X-Git-Tag: release-0.0~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4450012aaca175085cb1c362e7f1363981d6d34b;p=thirdparty%2Funbound.git testbound program. git-svn-id: file:///svn/unbound/trunk@39 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/Makefile.in b/Makefile.in index 06ef13504..5e6aa8a73 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 diff --git a/aclocal.m4 b/aclocal.m4 index dac046e7f..e1fc6602f 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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 , 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]) ]) + diff --git a/doc/Changelog b/doc/Changelog index 625b87f9e..776fc90bd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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 index 000000000..88d684ebd --- /dev/null +++ b/testcode/testbound.c @@ -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