summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-03-06 13:42:15 +0800
committerGeoff Levand <geoff@infradead.org>2013-03-06 06:06:36 -0800
commitbf40f5fbd759241d1505c985fa02441cd6febd64 (patch)
tree30971d65cdbd70c9df43fbec6eb80464b1d17737
parent56c142e5406160a58ee345e3e0433eb998ee046e (diff)
downloadtalos-petitboot-bf40f5fbd759241d1505c985fa02441cd6febd64.tar.gz
talos-petitboot-bf40f5fbd759241d1505c985fa02441cd6febd64.zip
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>
-rw-r--r--configure.ac.in1
-rw-r--r--test/Makefile.am2
-rw-r--r--test/urls/Makefile.am52
-rw-r--r--test/urls/data/double-slash.test7
-rw-r--r--test/urls/parse-url.c35
-rwxr-xr-xtest/urls/run-url-test.in27
6 files changed, 123 insertions, 1 deletions
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 <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
OpenPOWER on IntegriCloud