From 4b329697f7b1171baea433b24e8886f318a845c9 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 29 Jun 2010 07:20:12 +0000 Subject: move url database test to test directory svn path=/trunk/netsurf/; revision=10589 --- content/urldb.c | 214 ------------------------------------------------ content/urldb.h | 5 ++ test/Makefile | 23 +++++- test/urldbtest.c | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 267 insertions(+), 218 deletions(-) create mode 100644 test/urldbtest.c diff --git a/content/urldb.c b/content/urldb.c index dcd331946..e4a163738 100644 --- a/content/urldb.c +++ b/content/urldb.c @@ -256,14 +256,9 @@ static bool urldb_iterate_entries_path(const struct path_data *parent, /* Insertion */ static struct host_part *urldb_add_host_node(const char *part, struct host_part *parent); -static struct host_part *urldb_add_host(const char *host); static struct path_data *urldb_add_path_node(const char *scheme, unsigned int port, const char *segment, const char *fragment, struct path_data *parent); -static struct path_data *urldb_add_path(const char *scheme, - unsigned int port, const struct host_part *host, - const char *path, const char *query, const char *fragment, - const char *url); static int urldb_add_path_fragment_cmp(const void *a, const void *b); static struct path_data *urldb_add_path_fragment(struct path_data *segment, const char *fragment); @@ -4076,212 +4071,3 @@ void urldb_destroy_search_tree(struct search_node *root) free(root); } - -#ifdef TEST_URLDB -int option_expire_url = 0; -bool verbose_log = true; - -bool cookies_update(const char *domain, const struct cookie_data *data) -{ - return true; -} - -void die(const char *error) -{ - printf("die: %s\n", error); - exit(1); -} - - -void warn_user(const char *warning, const char *detail) -{ - printf("WARNING: %s %s\n", warning, detail); -} - -void bitmap_destroy(void *bitmap) -{ -} - -char *path_to_url(const char *path) -{ - char *r = malloc(strlen(path) + 7 + 1); - - strcpy(r, "file://"); - strcat(r, path); - - return r; -} - -int main(void) -{ - struct host_part *h; - struct path_data *p; - const struct url_data *u; - int i; - - url_init(); - - h = urldb_add_host("127.0.0.1"); - if (!h) { - LOG(("failed adding host")); - return 1; - } - - h = urldb_add_host("intranet"); - if (!h) { - LOG(("failed adding host")); - return 1; - } - - p = urldb_add_path("http", 0, h, "/", NULL, NULL, "http://intranet/"); - if (!p) { - LOG(("failed adding path")); - return 1; - } - - urldb_set_url_title("http://intranet/", "foo"); - - u = urldb_get_url_data("http://intranet/"); - assert(u && strcmp(u->title, "foo") == 0); - - /* Get host entry */ - h = urldb_add_host("netsurf.strcprstskrzkrk.co.uk"); - if (!h) { - LOG(("failed adding host")); - return 1; - } - - /* Get path entry */ - p = urldb_add_path("http", 0, h, "/path/to/resource.htm", "a=b", "zz", - "http://netsurf.strcprstskrzkrk.co.uk/path/to/resource.htm?a=b"); - if (!p) { - LOG(("failed adding path")); - return 1; - } - - p = urldb_add_path("http", 0, h, "/path/to/resource.htm", "a=b", "aa", - "http://netsurf.strcprstskrzkrk.co.uk/path/to/resource.htm?a=b"); - if (!p) { - LOG(("failed adding path")); - return 1; - } - - p = urldb_add_path("http", 0, h, "/path/to/resource.htm", "a=b", "yy", - "http://netsurf.strcprstskrzkrk.co.uk/path/to/resource.htm?a=b"); - if (!p) { - LOG(("failed adding path")); - return 1; - } - - urldb_set_cookie("mmblah=foo; path=/; expires=Thur, 31-Dec-2099 00:00:00 GMT\r\n", "http://www.minimarcos.org.uk/cgi-bin/forum/Blah.pl?,v=login,p=2", NULL); - - urldb_set_cookie("BlahPW=bar; path=/; expires=Thur, 31-Dec-2099 00:00:00 GMT\r\n", "http://www.minimarcos.org.uk/cgi-bin/forum/Blah.pl?,v=login,p=2", NULL); - - urldb_set_cookie("details=foo|bar|Sun, 03-Jun-2007;expires=Mon, 24-Jul-2006 09:53:45 GMT\r\n", "http://ccdb.cropcircleresearch.com/", NULL); - - urldb_set_cookie("PREF=ID=a:TM=b:LM=c:S=d; path=/; domain=.google.com\r\n", "http://www.google.com/", NULL); - - urldb_set_cookie("test=foo, bar, baz; path=/, quux=blah; path=/", "http://www.bbc.co.uk/", NULL); - -// urldb_set_cookie("a=b; path=/; domain=.a.com", "http://a.com/", NULL); - - urldb_set_cookie("foo=bar;Path=/blah;Secure\r\n", "https://www.foo.com/blah/moose", "https://www.foo.com/blah/moose"); - - urldb_get_cookie("https://www.foo.com/blah/wxyzabc"); - - /* 1563546 */ - assert(urldb_add_url("http:moodle.org") == false); - assert(urldb_get_url("http:moodle.org") == NULL); - - /* also 1563546 */ - assert(urldb_add_url("http://a_a/")); - assert(urldb_get_url("http://a_a/")); - - /* 1597646 */ - if (urldb_add_url("http://foo@moose.com/")) { - LOG(("added http://foo@moose.com/")); - assert(urldb_get_url("http://foo@moose.com/") != NULL); - } - - /* 1535120 */ - assert(urldb_add_url("http://www2.2checkout.com/")); - assert(urldb_get_url("http://www2.2checkout.com/")); - - /* Valid path */ - assert(urldb_set_cookie("name=value;Path=/\r\n", "http://www.google.com/", NULL)); - - /* Valid path (non-root directory) */ - assert(urldb_set_cookie("name=value;Path=/foo/bar/\r\n", "http://www.example.org/foo/bar/", NULL)); - - /* Defaulted path */ - assert(urldb_set_cookie("name=value\r\n", "http://www.example.org/foo/bar/baz/bat.html", NULL)); - assert(urldb_get_cookie("http://www.example.org/foo/bar/baz/quux.htm")); - - /* Valid path (includes leafname) */ - assert(urldb_set_cookie("name=value;Version=1;Path=/index.cgi\r\n", "http://example.org/index.cgi", NULL)); - assert(urldb_get_cookie("http://example.org/index.cgi")); - - /* Valid path (includes leafname in non-root directory) */ - assert(urldb_set_cookie("name=value;Path=/foo/index.html\r\n", "http://www.example.org/foo/index.html", NULL)); - /* Should _not_ match the above, as the leafnames differ */ - assert(urldb_get_cookie("http://www.example.org/foo/bar.html") == NULL); - - /* Invalid path (contains different leafname) */ - assert(urldb_set_cookie("name=value;Path=/index.html\r\n", "http://example.org/index.htm", NULL) == false); - - /* Invalid path (contains leafname in different directory) */ - assert(urldb_set_cookie("name=value;Path=/foo/index.html\r\n", "http://www.example.org/bar/index.html", NULL) == false); - - /* Test partial domain match with IP address failing */ - assert(urldb_set_cookie("name=value;Domain=.foo.org\r\n", "http://192.168.0.1/", NULL) == false); - - /* Test handling of non-domain cookie sent by server (domain part should - * be ignored) */ - assert(urldb_set_cookie("foo=value;Domain=blah.com\r\n", "http://www.example.com/", NULL)); - assert(strcmp(urldb_get_cookie("http://www.example.com/"), "foo=value") == 0); - - /* Test handling of domain cookie from wrong host (strictly invalid but - * required to support the real world) */ - assert(urldb_set_cookie("name=value;Domain=.example.com\r\n", "http://foo.bar.example.com/", NULL)); - assert(strcmp(urldb_get_cookie("http://www.example.com/"), "foo=value; name=value") == 0); - - /* Test presence of separators in cookie value */ - assert(urldb_set_cookie("name=\"value=foo\\\\bar\\\\\\\";\\\\baz=quux\";Version=1\r\n", "http://www.example.org/", NULL)); - assert(strcmp(urldb_get_cookie("http://www.example.org/"), "$Version=1; name=\"value=foo\\\\bar\\\\\\\";\\\\baz=quux\"") == 0); - - /* Test cookie with blank value */ - assert(urldb_set_cookie("a=\r\n", "http://www.example.net/", NULL)); - assert(strcmp(urldb_get_cookie("http://www.example.net/"), "a=") == 0); - - /* Test specification of multiple cookies in one header */ - assert(urldb_set_cookie("a=b, foo=bar; Path=/\r\n", "http://www.example.net/", NULL)); - assert(strcmp(urldb_get_cookie("http://www.example.net/"), "a=b; foo=bar") == 0); - - /* Test use of separators in unquoted cookie value */ - assert(urldb_set_cookie("foo=moo@foo:blah?moar\\ text\r\n", "http://example.com/", NULL)); - assert(strcmp(urldb_get_cookie("http://example.com/"), "foo=moo@foo:blah?moar\\ text; name=value") == 0); - - /* Test use of unnecessary quotes */ - assert(urldb_set_cookie("foo=\"hello\";Version=1,bar=bat\r\n", "http://example.com/", NULL)); - assert(strcmp(urldb_get_cookie("http://example.com/"), "foo=\"hello\"; bar=bat; name=value") == 0); - - /* Test domain matching in unverifiable transactions */ - assert(urldb_set_cookie("foo=bar; domain=.example.tld\r\n", "http://www.foo.example.tld/", "http://bar.example.tld/")); - assert(strcmp(urldb_get_cookie("http://www.foo.example.tld/"), "foo=bar") == 0); - - urldb_dump(); - - printf("PASS\n"); - - return 0; -} - -/* - gcc -g -o urldbtest -std=c99 -DTEST_URLDB -I. \ - `pkg-config --cflags --libs libxml-2.0 libcurl` \ - content/urldb.c utils/url.c utils/utils.c utils/messages.c \ - utils/hashtable.c utils/filename.c - */ - -#endif - diff --git a/content/urldb.h b/content/urldb.h index f31409c41..5080dc52d 100644 --- a/content/urldb.h +++ b/content/urldb.h @@ -73,6 +73,11 @@ void urldb_set_url_persistence(const char *url, bool persist); /* URL insertion */ bool urldb_add_url(const char *url); +struct host_part *urldb_add_host(const char *host); +struct path_data *urldb_add_path(const char *scheme, + unsigned int port, const struct host_part *host, + const char *path, const char *query, const char *fragment, + const char *url); /* URL data modification / lookup */ void urldb_set_url_title(const char *url, const char *title); diff --git a/test/Makefile b/test/Makefile index f480f4809..babde6e65 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,6 +1,9 @@ CFLAGS := -std=c99 -g -O0 -D_BSD_SOURCE -D_POSIX_C_SOURCE -I.. \ - `pkg-config --cflags libxml-2.0 libcurl libparserutils` -LDFLAGS := `pkg-config --libs libxml-2.0 libcurl libparserutils` + `pkg-config --cflags libxml-2.0 libcurl` +LDFLAGS := `pkg-config --libs libxml-2.0 libcurl` + +llcache_CFLAGS := `pkg-config --cflags libparserutils` +llcache_LDFLAGS := `pkg-config --libs libparserutils` llcache_SRCS := content/fetch.c content/fetchers/fetch_curl.c \ content/fetchers/fetch_data.c content/llcache.c \ @@ -9,11 +12,23 @@ llcache_SRCS := content/fetch.c content/fetchers/fetch_curl.c \ utils/url.c utils/useragent.c utils/utf8.c utils/utils.c \ test/llcache.c +urldbtest_SRCS := content/urldb.c utils/url.c utils/utils.c utils/messages.c \ + utils/hashtable.c utils/filename.c test/urldbtest.c + +urldbtest_CFLAGS := -O2 +urldbtest_LDFLAGS := + +.PHONY: all + +all: llcache urldbtest + llcache: $(addprefix ../,$(llcache_SRCS)) - $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) + $(CC) $(CFLAGS) $(llcache_CFLAGS) $^ -o $@ $(LDFLAGS) $(llcache_LDFLAGS) +urldbtest: $(addprefix ../,$(urldbtest_SRCS)) + $(CC) $(CFLAGS) $(urldbtest_CFLAGS) $^ -o $@ $(LDFLAGS) $(urldbtest_LDFLAGS) .PHONY: clean clean: - $(RM) llcache + $(RM) llcache urldbtest diff --git a/test/urldbtest.c b/test/urldbtest.c new file mode 100644 index 000000000..dfb3b6ea5 --- /dev/null +++ b/test/urldbtest.c @@ -0,0 +1,243 @@ +/* + * Copyright 2006 John M Bell + * Copyright 2009 John Tytgat + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf 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. + * + * NetSurf 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, see . + */ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "image/bitmap.h" +#include "content/content.h" +#include "content/urldb.h" +#include "desktop/cookies.h" +#include "desktop/options.h" +#ifdef riscos +/** \todo lose this */ +#include "riscos/bitmap.h" +#endif +#include "utils/log.h" +#include "utils/filename.h" +#include "utils/url.h" +#include "utils/utils.h" + +int option_expire_url = 0; +bool verbose_log = true; + +bool cookies_update(const char *domain, const struct cookie_data *data) +{ + return true; +} + +void die(const char *error) +{ + printf("die: %s\n", error); + exit(1); +} + + +void warn_user(const char *warning, const char *detail) +{ + printf("WARNING: %s %s\n", warning, detail); +} + +void bitmap_destroy(void *bitmap) +{ +} + +char *path_to_url(const char *path) +{ + char *r = malloc(strlen(path) + 7 + 1); + + strcpy(r, "file://"); + strcat(r, path); + + return r; +} + +int main(void) +{ + struct host_part *h; + struct path_data *p; + const struct url_data *u; + int i; + + url_init(); + + h = urldb_add_host("127.0.0.1"); + if (!h) { + LOG(("failed adding host")); + return 1; + } + + h = urldb_add_host("intranet"); + if (!h) { + LOG(("failed adding host")); + return 1; + } + + p = urldb_add_path("http", 0, h, "/", NULL, NULL, "http://intranet/"); + if (!p) { + LOG(("failed adding path")); + return 1; + } + + urldb_set_url_title("http://intranet/", "foo"); + + u = urldb_get_url_data("http://intranet/"); + assert(u && strcmp(u->title, "foo") == 0); + + /* Get host entry */ + h = urldb_add_host("netsurf.strcprstskrzkrk.co.uk"); + if (!h) { + LOG(("failed adding host")); + return 1; + } + + /* Get path entry */ + p = urldb_add_path("http", 0, h, "/path/to/resource.htm", "a=b", "zz", + "http://netsurf.strcprstskrzkrk.co.uk/path/to/resource.htm?a=b"); + if (!p) { + LOG(("failed adding path")); + return 1; + } + + p = urldb_add_path("http", 0, h, "/path/to/resource.htm", "a=b", "aa", + "http://netsurf.strcprstskrzkrk.co.uk/path/to/resource.htm?a=b"); + if (!p) { + LOG(("failed adding path")); + return 1; + } + + p = urldb_add_path("http", 0, h, "/path/to/resource.htm", "a=b", "yy", + "http://netsurf.strcprstskrzkrk.co.uk/path/to/resource.htm?a=b"); + if (!p) { + LOG(("failed adding path")); + return 1; + } + + urldb_set_cookie("mmblah=foo; path=/; expires=Thur, 31-Dec-2099 00:00:00 GMT\r\n", "http://www.minimarcos.org.uk/cgi-bin/forum/Blah.pl?,v=login,p=2", NULL); + + urldb_set_cookie("BlahPW=bar; path=/; expires=Thur, 31-Dec-2099 00:00:00 GMT\r\n", "http://www.minimarcos.org.uk/cgi-bin/forum/Blah.pl?,v=login,p=2", NULL); + + urldb_set_cookie("details=foo|bar|Sun, 03-Jun-2007;expires=Mon, 24-Jul-2006 09:53:45 GMT\r\n", "http://ccdb.cropcircleresearch.com/", NULL); + + urldb_set_cookie("PREF=ID=a:TM=b:LM=c:S=d; path=/; domain=.google.com\r\n", "http://www.google.com/", NULL); + + urldb_set_cookie("test=foo, bar, baz; path=/, quux=blah; path=/", "http://www.bbc.co.uk/", NULL); + +// urldb_set_cookie("a=b; path=/; domain=.a.com", "http://a.com/", NULL); + + urldb_set_cookie("foo=bar;Path=/blah;Secure\r\n", "https://www.foo.com/blah/moose", "https://www.foo.com/blah/moose"); + + urldb_get_cookie("https://www.foo.com/blah/wxyzabc"); + + /* 1563546 */ + assert(urldb_add_url("http:moodle.org") == false); + assert(urldb_get_url("http:moodle.org") == NULL); + + /* also 1563546 */ + assert(urldb_add_url("http://a_a/")); + assert(urldb_get_url("http://a_a/")); + + /* 1597646 */ + if (urldb_add_url("http://foo@moose.com/")) { + LOG(("added http://foo@moose.com/")); + assert(urldb_get_url("http://foo@moose.com/") != NULL); + } + + /* 1535120 */ + assert(urldb_add_url("http://www2.2checkout.com/")); + assert(urldb_get_url("http://www2.2checkout.com/")); + + /* Valid path */ + assert(urldb_set_cookie("name=value;Path=/\r\n", "http://www.google.com/", NULL)); + + /* Valid path (non-root directory) */ + assert(urldb_set_cookie("name=value;Path=/foo/bar/\r\n", "http://www.example.org/foo/bar/", NULL)); + + /* Defaulted path */ + assert(urldb_set_cookie("name=value\r\n", "http://www.example.org/foo/bar/baz/bat.html", NULL)); + assert(urldb_get_cookie("http://www.example.org/foo/bar/baz/quux.htm")); + + /* Valid path (includes leafname) */ + assert(urldb_set_cookie("name=value;Version=1;Path=/index.cgi\r\n", "http://example.org/index.cgi", NULL)); + assert(urldb_get_cookie("http://example.org/index.cgi")); + + /* Valid path (includes leafname in non-root directory) */ + assert(urldb_set_cookie("name=value;Path=/foo/index.html\r\n", "http://www.example.org/foo/index.html", NULL)); + /* Should _not_ match the above, as the leafnames differ */ + assert(urldb_get_cookie("http://www.example.org/foo/bar.html") == NULL); + + /* Invalid path (contains different leafname) */ + assert(urldb_set_cookie("name=value;Path=/index.html\r\n", "http://example.org/index.htm", NULL) == false); + + /* Invalid path (contains leafname in different directory) */ + assert(urldb_set_cookie("name=value;Path=/foo/index.html\r\n", "http://www.example.org/bar/index.html", NULL) == false); + + /* Test partial domain match with IP address failing */ + assert(urldb_set_cookie("name=value;Domain=.foo.org\r\n", "http://192.168.0.1/", NULL) == false); + + /* Test handling of non-domain cookie sent by server (domain part should + * be ignored) */ + assert(urldb_set_cookie("foo=value;Domain=blah.com\r\n", "http://www.example.com/", NULL)); + assert(strcmp(urldb_get_cookie("http://www.example.com/"), "foo=value") == 0); + + /* Test handling of domain cookie from wrong host (strictly invalid but + * required to support the real world) */ + assert(urldb_set_cookie("name=value;Domain=.example.com\r\n", "http://foo.bar.example.com/", NULL)); + assert(strcmp(urldb_get_cookie("http://www.example.com/"), "foo=value; name=value") == 0); + + /* Test presence of separators in cookie value */ + assert(urldb_set_cookie("name=\"value=foo\\\\bar\\\\\\\";\\\\baz=quux\";Version=1\r\n", "http://www.example.org/", NULL)); + assert(strcmp(urldb_get_cookie("http://www.example.org/"), "$Version=1; name=\"value=foo\\\\bar\\\\\\\";\\\\baz=quux\"") == 0); + + /* Test cookie with blank value */ + assert(urldb_set_cookie("a=\r\n", "http://www.example.net/", NULL)); + assert(strcmp(urldb_get_cookie("http://www.example.net/"), "a=") == 0); + + /* Test specification of multiple cookies in one header */ + assert(urldb_set_cookie("a=b, foo=bar; Path=/\r\n", "http://www.example.net/", NULL)); + assert(strcmp(urldb_get_cookie("http://www.example.net/"), "a=b; foo=bar") == 0); + + /* Test use of separators in unquoted cookie value */ + assert(urldb_set_cookie("foo=moo@foo:blah?moar\\ text\r\n", "http://example.com/", NULL)); + assert(strcmp(urldb_get_cookie("http://example.com/"), "foo=moo@foo:blah?moar\\ text; name=value") == 0); + + /* Test use of unnecessary quotes */ + assert(urldb_set_cookie("foo=\"hello\";Version=1,bar=bat\r\n", "http://example.com/", NULL)); + assert(strcmp(urldb_get_cookie("http://example.com/"), "foo=\"hello\"; bar=bat; name=value") == 0); + + /* Test domain matching in unverifiable transactions */ + assert(urldb_set_cookie("foo=bar; domain=.example.tld\r\n", "http://www.foo.example.tld/", "http://bar.example.tld/")); + assert(strcmp(urldb_get_cookie("http://www.foo.example.tld/"), "foo=bar") == 0); + + urldb_dump(); + + printf("PASS\n"); + + return 0; +} + -- cgit v1.2.3