From: Jeremy Kerr Date: Wed, 6 Mar 2013 05:42:15 +0000 (+0800) Subject: test: Add URL parser test infrastructure X-Git-Tag: v1.0.0~738 X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=bf40f5fbd759241d1505c985fa02441cd6febd64 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 --- 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