From bf40f5fbd759241d1505c985fa02441cd6febd64 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Wed, 6 Mar 2013 13:42:15 +0800 Subject: test: Add URL parser test infrastructure This change adds some simple testing infrastrcture to the URL parser. We use a small C binary (parse-url) to run the url parser on its argument, and compare the output with an expected datafile. An initial test is included, to check the behaviour of URLs with multiple slashes between host and pathname. This test currently fails. Signed-off-by: Jeremy Kerr Signed-off-by: Geoff Levand --- configure.ac.in | 1 + test/Makefile.am | 2 +- test/urls/Makefile.am | 52 ++++++++++++++++++++++++++++++++++++++++ test/urls/data/double-slash.test | 7 ++++++ test/urls/parse-url.c | 35 +++++++++++++++++++++++++++ test/urls/run-url-test.in | 27 +++++++++++++++++++++ 6 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 test/urls/Makefile.am create mode 100644 test/urls/data/double-slash.test create mode 100644 test/urls/parse-url.c create mode 100755 test/urls/run-url-test.in diff --git a/configure.ac.in b/configure.ac.in index 0121579..501528f 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -214,6 +214,7 @@ AC_CONFIG_FILES([ man/Makefile test/Makefile test/parser/Makefile + test/urls/Makefile ui/Makefile ui/common/Makefile ui/ncurses/Makefile diff --git a/test/Makefile.am b/test/Makefile.am index 3798a87..21971a6 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -12,7 +12,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -SUBDIRS = parser +SUBDIRS = parser urls noinst_SCRIPTS = hotplug-device.sh diff --git a/test/urls/Makefile.am b/test/urls/Makefile.am new file mode 100644 index 0000000..9bb9569 --- /dev/null +++ b/test/urls/Makefile.am @@ -0,0 +1,52 @@ +# 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 +# the Free Software Foundation; 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +AUTOMAKE_OPTIONS = parallel-tests + +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/lib \ + -I$(includedir) \ + $(DEFAULT_CPPFLAGS) + +AM_CFLAGS = \ + $(DEFAULT_CFLAGS) + +parse_url_SOURCES = \ + parse-url.c \ + ../../ui/common/url.c \ + ../../ui/common/url.h + +parse_url_LDADD = ../../lib/libpbcore.la + +check_PROGRAMS = parse-url +check_SCRIPTS = run-url-test + +TESTS = data/double-slash.test \ + data/http-simple.test +TEST_EXTENSIONS = .test +TEST_LOG_COMPILER = $(builddir)/run-url-test + +edit = sed \ + -e 's|@PACKAGE_NAME\@|$(PACKAGE_NAME)|g' \ + -e 's|@PACKAGE_VERSION\@|$(PACKAGE_VERSION)|g' \ + -e 's|@PACKAGE_BUGREPORT\@|$(PACKAGE_BUGREPORT)|g' \ + -e 's|@abs_srcdir\@|$(abs_srcdir)|g' \ + -e 's|@abs_builddir\@|$(abs_builddir)|g' \ + -e 's|@prefix\@|$(prefix)|g' + +run-url-test: Makefile $(srcdir)/run-url-test.in + rm -f $@ $@.tmp + $(edit) $(srcdir)/$@.in >$@.tmp + chmod +x $@.tmp + mv $@.tmp $@ diff --git a/test/urls/data/double-slash.test b/test/urls/data/double-slash.test new file mode 100644 index 0000000..aeaf830 --- /dev/null +++ b/test/urls/data/double-slash.test @@ -0,0 +1,7 @@ +tftp://127.0.0.1//file +scheme tftp +host 127.0.0.1 +port (null) +path /file +dir / +file file diff --git a/test/urls/parse-url.c b/test/urls/parse-url.c new file mode 100644 index 0000000..3e2f10f --- /dev/null +++ b/test/urls/parse-url.c @@ -0,0 +1,35 @@ + +#include +#include + +#include +#include + +int main(int argc, char **argv) +{ + struct pb_url *url; + FILE *null; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + /* discard log output */ + null = fopen("/dev/null", "w"); + pb_log_set_stream(null); + + url = pb_url_parse(NULL, argv[1]); + if (!url) + return EXIT_FAILURE; + + printf("%s\n", argv[1]); + printf("scheme\t%s\n", pb_url_scheme_name(url->scheme)); + printf("host\t%s\n", url->host); + printf("port\t%s\n", url->port); + printf("path\t%s\n", url->path); + printf("dir\t%s\n", url->dir); + printf("file\t%s\n", url->file); + + return EXIT_SUCCESS; +} diff --git a/test/urls/run-url-test.in b/test/urls/run-url-test.in new file mode 100755 index 0000000..834166f --- /dev/null +++ b/test/urls/run-url-test.in @@ -0,0 +1,27 @@ +#!/bin/bash + +parser="@abs_builddir@/parse-url" +testfile=$1 + +url=$(head -n1 $testfile) + +tmp=$(mktemp) +trap "rm $tmp" EXIT + +$parser $url > $tmp +if test $? -ne 0 +then + echo "Error running $parser on $testfile" + exit 2 +fi + +cmp --silent $testfile $tmp +result=$? + +if test $result -ne 0 +then + echo "FAIL: URL parse results differ:" + diff -u $testfile $tmp +fi + +exit $result -- cgit v1.2.1