diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-03-06 13:42:15 +0800 |
---|---|---|
committer | Geoff Levand <geoff@infradead.org> | 2013-03-06 06:06:36 -0800 |
commit | bf40f5fbd759241d1505c985fa02441cd6febd64 (patch) | |
tree | 30971d65cdbd70c9df43fbec6eb80464b1d17737 /test/urls | |
parent | 56c142e5406160a58ee345e3e0433eb998ee046e (diff) | |
download | petitboot-bf40f5fbd759241d1505c985fa02441cd6febd64.zip petitboot-bf40f5fbd759241d1505c985fa02441cd6febd64.tar.gz |
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 <jk@ozlabs.org>
Signed-off-by: Geoff Levand <geoff@infradead.org>
Diffstat (limited to 'test/urls')
-rw-r--r-- | test/urls/Makefile.am | 52 | ||||
-rw-r--r-- | test/urls/data/double-slash.test | 7 | ||||
-rw-r--r-- | test/urls/parse-url.c | 35 | ||||
-rwxr-xr-x | test/urls/run-url-test.in | 27 |
4 files changed, 121 insertions, 0 deletions
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 <stdlib.h> +#include <stdio.h> + +#include <ui/common/url.h> +#include <log/log.h> + +int main(int argc, char **argv) +{ + struct pb_url *url; + FILE *null; + + if (argc != 2) { + fprintf(stderr, "Usage: %s <URL>\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 |