From de9a8b415bcb8d81989bab02457fdeda48bb7219 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Wed, 25 Jul 2012 10:21:09 -0400 Subject: [PATCH] Add unit tests for URIs Tests uri_parse() using multiple URI strings where some are bad and some are well formed. Signed-off-by: David Goulet --- .gitignore | 1 + tests/tools/Makefile.am | 2 +- tests/tools/runall.sh | 2 +- tests/tools/streaming/Makefile.am | 17 ++- tests/tools/streaming/{run => runall} | 2 +- tests/tools/streaming/unit_tests.c | 204 ++++++++++++++++++++++++++ 6 files changed, 221 insertions(+), 7 deletions(-) rename tests/tools/streaming/{run => runall} (86%) create mode 100644 tests/tools/streaming/unit_tests.c diff --git a/.gitignore b/.gitignore index b1295d4be..6d04272c4 100644 --- a/.gitignore +++ b/.gitignore @@ -54,5 +54,6 @@ gen-nevents gen-events-time gen-events gen-ust-events +unit_tests benchmark/ diff --git a/tests/tools/Makefile.am b/tests/tools/Makefile.am index 8bd7830c3..555d8239e 100644 --- a/tests/tools/Makefile.am +++ b/tests/tools/Makefile.am @@ -1,4 +1,4 @@ -SUBDIR = . streaming +SUBDIRS = streaming AM_CFLAGS = -g -Wall -I../ AM_LDFLAGS = -lurcu -lurcu-cds diff --git a/tests/tools/runall.sh b/tests/tools/runall.sh index b90e42489..7630a1321 100755 --- a/tests/tools/runall.sh +++ b/tests/tools/runall.sh @@ -3,7 +3,7 @@ DIR=$(dirname $0) tests=( $DIR/test_kernel_data_trace $DIR/test_sessions $DIR/test_ust_data_trace \ - $DIR/streaming/run ) + $DIR/streaming/runall ) exit_code=0 function start_tests () diff --git a/tests/tools/streaming/Makefile.am b/tests/tools/streaming/Makefile.am index 251a378f8..27ef18b03 100644 --- a/tests/tools/streaming/Makefile.am +++ b/tests/tools/streaming/Makefile.am @@ -1,4 +1,4 @@ -AM_CFLAGS = -I. -O2 +AM_CFLAGS = -I. -O2 -g -I../../ AM_LDFLAGS = if LTTNG_TOOLS_BUILD_WITH_LIBDL @@ -8,11 +8,20 @@ if LTTNG_TOOLS_BUILD_WITH_LIBC_DL AM_LDFLAGS += -lc endif +#UTILS=../../utils.h +UTILS= +LIBSESSIOND_COMM=$(top_builddir)/src/common/sessiond-comm/libsessiond-comm.la +LIBCOMMON=$(top_builddir)/src/common/libcommon.la + +noinst_PROGRAMS = unit_tests +unit_tests_SOURCES = unit_tests.c $(UTILS) +unit_tests_LDADD = $(LIBCOMMON) + if HAVE_LIBLTTNG_UST_CTL -noinst_PROGRAMS = gen-ust-events +noinst_PROGRAMS += gen-ust-events gen_ust_events_SOURCES = gen-ust-events.c tp.c tp.h gen_ust_events_LDADD = -llttng-ust endif -noinst_SCRIPTS = run -EXTRA_DIST = run +noinst_SCRIPTS = runall run-ust run-kernel +EXTRA_DIST = runall run-ust run-kernel diff --git a/tests/tools/streaming/run b/tests/tools/streaming/runall similarity index 86% rename from tests/tools/streaming/run rename to tests/tools/streaming/runall index d7ca754fd..dbf5228ce 100755 --- a/tests/tools/streaming/run +++ b/tests/tools/streaming/runall @@ -2,7 +2,7 @@ DIR=$(dirname $0) -tests=( $DIR/run-kernel $DIR/run-ust ) +tests=( $DIR/unit_tests $DIR/run-kernel $DIR/run-ust ) exit_code=0 function start_tests () diff --git a/tests/tools/streaming/unit_tests.c b/tests/tools/streaming/unit_tests.c new file mode 100644 index 000000000..6fea139c3 --- /dev/null +++ b/tests/tools/streaming/unit_tests.c @@ -0,0 +1,204 @@ +/* + * Copyright (C) - 2012 David Goulet + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by as + * published by the Free Software Foundation; only version 2 of the License. + * + * This program 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 + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "utils.h" + +/* This path will NEVER be created in this test */ +#define PATH1 "tmp/.test-junk-lttng" + +#define RANDOM_STRING_LEN 16 + +/* For lttngerr.h */ +int lttng_opt_quiet = 1; +int lttng_opt_verbose = 0; + +/* + * Test string URI and if uri_parse works well. + */ +int test_uri(void) +{ + ssize_t size; + const char *s_uri1; + struct lttng_uri *uri; + + fprintf(stdout, "Testing URIs...\n"); + + s_uri1 = "net://localhost"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 2); + assert(uri[0].dtype == LTTNG_DST_IPV4); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 0); + assert(strlen(uri[0].subdir) == 0); + assert(strcmp(uri[0].dst.ipv4, "127.0.0.1") == 0); + + assert(uri[1].dtype == LTTNG_DST_IPV4); + assert(uri[1].utype == LTTNG_URI_DST); + assert(uri[1].stype == 0); + assert(uri[1].port == 0); + assert(strlen(uri[1].subdir) == 0); + assert(strcmp(uri[1].dst.ipv4, "127.0.0.1") == 0); + PRINT_OK(); + + s_uri1 = "net://localhost:8989:4242/my/test/path"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 2); + assert(uri[0].dtype == LTTNG_DST_IPV4); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 8989); + assert(strcmp(uri[0].subdir, "my/test/path") == 0); + assert(strcmp(uri[0].dst.ipv4, "127.0.0.1") == 0); + + assert(uri[1].dtype == LTTNG_DST_IPV4); + assert(uri[1].utype == LTTNG_URI_DST); + assert(uri[1].stype == 0); + assert(uri[1].port == 4242); + assert(strcmp(uri[0].subdir, "my/test/path") == 0); + assert(strcmp(uri[1].dst.ipv4, "127.0.0.1") == 0); + PRINT_OK(); + + s_uri1 = "net://localhost:8989:4242"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 2); + assert(uri[0].dtype == LTTNG_DST_IPV4); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 8989); + assert(strlen(uri[1].subdir) == 0); + assert(strcmp(uri[0].dst.ipv4, "127.0.0.1") == 0); + + assert(uri[1].dtype == LTTNG_DST_IPV4); + assert(uri[1].utype == LTTNG_URI_DST); + assert(uri[1].stype == 0); + assert(uri[1].port == 4242); + assert(strlen(uri[1].subdir) == 0); + assert(strcmp(uri[1].dst.ipv4, "127.0.0.1") == 0); + PRINT_OK(); + + s_uri1 = "net6://localhost:8989"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 2); + assert(uri[0].dtype == LTTNG_DST_IPV6); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 8989); + assert(strlen(uri[1].subdir) == 0); + assert(strcmp(uri[0].dst.ipv6, "::1") == 0); + + assert(uri[1].dtype == LTTNG_DST_IPV6); + assert(uri[1].utype == LTTNG_URI_DST); + assert(uri[1].stype == 0); + assert(uri[1].port == 0); + assert(strlen(uri[1].subdir) == 0); + assert(strcmp(uri[0].dst.ipv6, "::1") == 0); + PRINT_OK(); + + s_uri1 = "tcp://42.42.42.42/my/test/path"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 1); + assert(uri[0].dtype == LTTNG_DST_IPV4); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 0); + assert(strcmp(uri[0].subdir, "my/test/path") == 0); + assert(strcmp(uri[0].dst.ipv4, "42.42.42.42") == 0); + PRINT_OK(); + + s_uri1 = "tcp6://fe80::f66d:4ff:fe53:d220/my/test/path"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 1); + assert(uri[0].dtype == LTTNG_DST_IPV6); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 0); + assert(strcmp(uri[0].subdir, "my/test/path") == 0); + assert(strcmp(uri[0].dst.ipv6, "fe80::f66d:4ff:fe53:d220") == 0); + PRINT_OK(); + + s_uri1 = "file:///my/test/path"; + fprintf(stdout, " [+] URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == 1); + assert(uri[0].dtype == LTTNG_DST_PATH); + assert(uri[0].utype == LTTNG_URI_DST); + assert(uri[0].stype == 0); + assert(uri[0].port == 0); + assert(strlen(uri[1].subdir) == 0); + assert(strcmp(uri[0].dst.path, "/my/test/path") == 0); + PRINT_OK(); + + s_uri1 = "file/my/test/path"; + fprintf(stdout, " [+] Bad URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == -1); + PRINT_OK(); + + s_uri1 = "net://:8999"; + fprintf(stdout, " [+] Bad URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == -1); + PRINT_OK(); + + s_uri1 = "net://localhost/"; + fprintf(stdout, " [+] Bad URI set to %s ", s_uri1); + size = uri_parse(s_uri1, &uri); + assert(size == -1); + PRINT_OK(); + + return 0; +} + +int main(int argc, char **argv) +{ + int ret; + + srand(time(NULL)); + + printf("\nStreaming unit tests\n-----------\n"); + + ret = test_uri(); + if (ret < 0) { + goto error; + } + + /* Success */ + return 0; + +error: + return -1; +} -- 2.34.1