/* * 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 "ldns-testpkts.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("-p file playback text file\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