test: Add URL parser test infrastructure
authorJeremy Kerr <jk@ozlabs.org>
Wed, 6 Mar 2013 05:42:15 +0000 (13:42 +0800)
committerGeoff Levand <geoff@infradead.org>
Wed, 6 Mar 2013 14:06:36 +0000 (06:06 -0800)
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>
configure.ac.in
test/Makefile.am
test/urls/Makefile.am [new file with mode: 0644]
test/urls/data/double-slash.test [new file with mode: 0644]
test/urls/parse-url.c [new file with mode: 0644]
test/urls/run-url-test.in [new file with mode: 0755]

index 0121579b508bb4ba406bdf669f648624773c453b..501528ff70758e758b542e9f4279bc8fd7d23856 100644 (file)
@@ -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
index 3798a87793d10284fcb7c23171215c6ccf1239d8..21971a6c396db9769079873e9db83a301ce947df 100644 (file)
@@ -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 (file)
index 0000000..9bb9569
--- /dev/null
@@ -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 (file)
index 0000000..aeaf830
--- /dev/null
@@ -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 (file)
index 0000000..3e2f10f
--- /dev/null
@@ -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 (executable)
index 0000000..834166f
--- /dev/null
@@ -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