diff options
author | semarie <semarie@cvs.openbsd.org> | 2015-06-23 18:03:10 +0000 |
---|---|---|
committer | semarie <semarie@cvs.openbsd.org> | 2015-06-23 18:03:10 +0000 |
commit | 19911aea68d0922a59de179fd97d6c735550e197 (patch) | |
tree | 0b0b138a37b46df33f5e3672f5cfc6ee1e6e5673 /regress | |
parent | 70e618a788b57a19be6964fc14c336dc7f7fc912 (diff) |
add regress tests for httpd
- this testsuite covers patterns
Diffstat (limited to 'regress')
-rw-r--r-- | regress/usr.sbin/httpd/Makefile | 5 | ||||
-rw-r--r-- | regress/usr.sbin/httpd/patterns/Makefile | 31 | ||||
-rw-r--r-- | regress/usr.sbin/httpd/patterns/patterns-tester.c | 98 | ||||
-rw-r--r-- | regress/usr.sbin/httpd/patterns/patterns-tester.lua | 3 | ||||
-rw-r--r-- | regress/usr.sbin/httpd/patterns/test-patterns-lua.out | 128 | ||||
-rw-r--r-- | regress/usr.sbin/httpd/patterns/test-patterns.in | 27 | ||||
-rw-r--r-- | regress/usr.sbin/httpd/patterns/test-patterns.out | 99 |
7 files changed, 391 insertions, 0 deletions
diff --git a/regress/usr.sbin/httpd/Makefile b/regress/usr.sbin/httpd/Makefile new file mode 100644 index 00000000000..94c29fc20f2 --- /dev/null +++ b/regress/usr.sbin/httpd/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 2015/06/23 18:03:09 semarie Exp $ + +SUBDIR += patterns + +.include <bsd.subdir.mk> diff --git a/regress/usr.sbin/httpd/patterns/Makefile b/regress/usr.sbin/httpd/patterns/Makefile new file mode 100644 index 00000000000..912d0d54bf6 --- /dev/null +++ b/regress/usr.sbin/httpd/patterns/Makefile @@ -0,0 +1,31 @@ +# $OpenBSD: Makefile,v 1.1 2015/06/23 18:03:09 semarie Exp $ + +HTTPDSRC = ${.CURDIR}/../../../../usr.sbin/httpd + +.PATH: ${HTTPDSRC} + +REGRESS_TARGETS= test-patterns + +CLEANFILES += patterns-tester + +#LUA?= lua53 +.ifdef LUA +REGRESS_TARGETS+= test-patterns-lua +.endif + +patterns-tester: patterns-tester.c patterns.c patterns.h + ${CC} -o $@ ${CFLAGS} ${.CURDIR}/patterns-tester.c ${HTTPDSRC}/patterns.c -I${HTTPDSRC} + +test-patterns: patterns-tester test-patterns.out test-patterns.in + cat ${.CURDIR}/test-patterns.in | grep -v '^#' | \ + while IFS=' ' read string pattern comments ; do \ + ./patterns-tester "$${string}" "$${pattern}" 2>&1 || true; \ + done | diff -I 'OpenBSD' -u ${.CURDIR}/test-patterns.out - + +test-patterns-lua: patterns-tester.lua test-patterns-lua.out test-patterns.in + cat ${.CURDIR}/test-patterns.in | grep -v '^#' | \ + while IFS=' ' read string pattern comments ; do \ + ${LUA} ./patterns-tester.lua "$${string}" "$${pattern}" 2>&1 || true; \ + done | diff -I 'OpenBSD' -u ${.CURDIR}/test-patterns-lua.out - + +.include <bsd.regress.mk> diff --git a/regress/usr.sbin/httpd/patterns/patterns-tester.c b/regress/usr.sbin/httpd/patterns/patterns-tester.c new file mode 100644 index 00000000000..54f145620a5 --- /dev/null +++ b/regress/usr.sbin/httpd/patterns/patterns-tester.c @@ -0,0 +1,98 @@ +/* $OpenBSD: patterns-tester.c,v 1.1 2015/06/23 18:03:09 semarie Exp $ */ +/* + * Copyright (c) 2015 Sebastien Marie <semarie@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <err.h> +#include <string.h> + +#include "patterns.h" + +extern char * malloc_options; + +static void read_string(char *, size_t); +static void read_string_stop(void); + +static void +read_string(char *buf, size_t len) +{ + size_t i; + + /* init */ + bzero(buf, len); + + /* read */ + if (fgets(buf, len, stdin) == NULL) + err(1, "fgets"); + + /* strip '\n' */ + i = strnlen(buf, len); + if (i != 0) + buf[i-1] = '\0'; +} + +static void +read_string_stop() +{ + if (getchar() != EOF) + errx(1, "read_string_stop: too many input"); +} + +int +main(int argc, char *argv[]) +{ + char string[1024]; + char pattern[1024]; + struct str_match m; + const char *errstr = NULL; + int ret; + size_t i; + + /* configure malloc */ + malloc_options = "S"; + + /* read testcase */ + if (argc != 3) { + /* from stdin (useful for afl) */ + read_string(string, sizeof(string)); + read_string(pattern, sizeof(pattern)); + read_string_stop(); + } else { + /* from arguments */ + strlcpy(string, argv[1], sizeof(string)); + strlcpy(pattern, argv[2], sizeof(pattern)); + } + + /* print testcase */ + printf("string='%s'\n", string); + printf("pattern='%s'\n", pattern); + + /* test it ! */ + ret = str_match(string, pattern, &m, &errstr); + if (errstr != NULL) + errx(1, "str_match: %s", errstr); + + /* print result */ + printf("ret=%d num=%d\n", ret, m.sm_nmatch); + for (i=0; i<m.sm_nmatch; i++) { + printf("%ld: %s\n", i, m.sm_match[i]); + } + + str_match_free(&m); + + return (EXIT_SUCCESS); +} diff --git a/regress/usr.sbin/httpd/patterns/patterns-tester.lua b/regress/usr.sbin/httpd/patterns/patterns-tester.lua new file mode 100644 index 00000000000..5bc476a1a4b --- /dev/null +++ b/regress/usr.sbin/httpd/patterns/patterns-tester.lua @@ -0,0 +1,3 @@ +-- $OpenBSD: patterns-tester.lua,v 1.1 2015/06/23 18:03:09 semarie Exp $ +print(string.format("string='%s'\npattern='%s'", arg[1], arg[2])); +print(string.match(arg[1], arg[2])); diff --git a/regress/usr.sbin/httpd/patterns/test-patterns-lua.out b/regress/usr.sbin/httpd/patterns/test-patterns-lua.out new file mode 100644 index 00000000000..dd5f330c0d0 --- /dev/null +++ b/regress/usr.sbin/httpd/patterns/test-patterns-lua.out @@ -0,0 +1,128 @@ +# $OpenBSD: test-patterns-lua.out,v 1.1 2015/06/23 18:03:09 semarie Exp $ +string='/page/51' +pattern='^/(%a+)/(%d+)$' +page 51 +string='/Apage/51' +pattern='/[^%d][%w%u][^%c]+()[%d]+' +9 +string='/^page/51' +pattern='/^(.a.e)/(.)' +page 5 +string='/page/page-51' +pattern='/(.*)/%1-(%d+)' +page 51 +string='/page/[51]' +pattern='/page/(%b[])' +[51] +string=':-]' +pattern=']+' +] +string=':-)' +pattern='[)]+' +) +string='/page/51' +pattern='$^' +nil +string='1234567890' +pattern='([2-5]-)' + +string='****' +pattern='^**$' +**** +string='xxxx' +pattern='^x*$' +xxxx +string='/page/51' +pattern='no-%d-match' +nil +string='/page/page-51' +pattern='/(.*)/%9-(%d+)' +lua53: ./patterns-tester.lua:2: invalid capture index %9 +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string=':-)' +pattern=')+' +lua53: ./patterns-tester.lua:2: invalid pattern capture +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/51' +pattern='/page/51(' +lua53: ./patterns-tester.lua:2: unfinished capture +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/51' +pattern='/page/51%' +lua53: ./patterns-tester.lua:2: malformed pattern (ends with '%') +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/51' +pattern='/page/[51' +lua53: ./patterns-tester.lua:2: malformed pattern (missing ']') +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/(51)' +pattern='/page/%b(' +lua53: ./patterns-tester.lua:2: malformed pattern (missing arguments to '%b') +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/51' +pattern='()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()' +lua53: ./patterns-tester.lua:2: too many captures +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/51' +pattern='/page/%f' +lua53: ./patterns-tester.lua:2: missing '[' after '%f' in pattern +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='/page/51' +pattern='/page%f/51' +lua53: ./patterns-tester.lua:2: missing '[' after '%f' in pattern +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='q*********************************' +pattern='*************************************q' +lua53: ./patterns-tester.lua:2: max repetition items +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='q+++++++++++++++++++++++++++++++++' +pattern='+++++++++++++++++++++++++++++++++++++q' +lua53: ./patterns-tester.lua:2: max repetition items +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='q---------------------------------' +pattern='-------------------------------------q' +lua53: ./patterns-tester.lua:2: max repetition items +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? +string='q?????????????????????????????????' +pattern='?????????????????????????????????????q' +lua53: ./patterns-tester.lua:2: max repetition items +stack traceback: + [C]: in function 'string.match' + ./patterns-tester.lua:2: in main chunk + [C]: in ? diff --git a/regress/usr.sbin/httpd/patterns/test-patterns.in b/regress/usr.sbin/httpd/patterns/test-patterns.in new file mode 100644 index 00000000000..a988d81ef1a --- /dev/null +++ b/regress/usr.sbin/httpd/patterns/test-patterns.in @@ -0,0 +1,27 @@ +# $OpenBSD: test-patterns.in,v 1.1 2015/06/23 18:03:09 semarie Exp $ +# string pattern comments +/page/51 ^/(%a+)/(%d+)$ +/Apage/51 /[^%d][%w%u][^%c]+()[%d]+ +/^page/51 /^(.a.e)/(.) +/page/page-51 /(.*)/%1-(%d+) +/page/[51] /page/(%b[]) +:-] ]+ +:-) [)]+ +/page/51 $^ +1234567890 ([2-5]-) +**** ^**$ equiv '[*]*' +xxxx ^x*$ same as before +/page/51 no-%d-match no match +/page/page-51 /(.*)/%9-(%d+) invalid capture index +:-) )+ invalid pattern capture +/page/51 /page/51( unfinished capture +/page/51 /page/51% malformed pattern (ends with '%') +/page/51 /page/[51 malformed pattern (missing ']') +/page/(51) /page/%b( malformed pattern (missing arguments to '%b') +/page/51 ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()() too many captures +/page/51 /page/%f missing '[' after '%f' in pattern +/page/51 /page%f/51 missing '[' after '%f' in pattern +q********************************* *************************************q max repetition items +q+++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++q max repetition items +q--------------------------------- -------------------------------------q max repetition items +q????????????????????????????????? ?????????????????????????????????????q max repetition items diff --git a/regress/usr.sbin/httpd/patterns/test-patterns.out b/regress/usr.sbin/httpd/patterns/test-patterns.out new file mode 100644 index 00000000000..2f460206c71 --- /dev/null +++ b/regress/usr.sbin/httpd/patterns/test-patterns.out @@ -0,0 +1,99 @@ +# $OpenBSD: test-patterns.out,v 1.1 2015/06/23 18:03:09 semarie Exp $ +string='/page/51' +pattern='^/(%a+)/(%d+)$' +ret=0 num=3 +0: /page/51 +1: page +2: 51 +string='/Apage/51' +pattern='/[^%d][%w%u][^%c]+()[%d]+' +ret=0 num=2 +0: /Apage/51 +1: +string='/^page/51' +pattern='/^(.a.e)/(.)' +ret=0 num=3 +0: /^page/51 +1: page +2: 5 +string='/page/page-51' +pattern='/(.*)/%1-(%d+)' +ret=0 num=3 +0: /page/page-51 +1: page +2: 51 +string='/page/[51]' +pattern='/page/(%b[])' +ret=0 num=2 +0: /page/[51] +1: [51] +string=':-]' +pattern=']+' +ret=0 num=2 +0: :-] +1: ] +string=':-)' +pattern='[)]+' +ret=0 num=2 +0: :-) +1: ) +string='/page/51' +pattern='$^' +ret=-1 num=0 +string='1234567890' +pattern='([2-5]-)' +ret=0 num=2 +0: 1234567890 +1: +string='****' +pattern='^**$' +ret=0 num=2 +0: **** +1: **** +string='xxxx' +pattern='^x*$' +ret=0 num=2 +0: xxxx +1: xxxx +string='/page/51' +pattern='no-%d-match' +ret=-1 num=0 +patterns-tester: str_match: invalid capture index +string='/page/page-51' +pattern='/(.*)/%9-(%d+)' +patterns-tester: str_match: invalid pattern capture +string=':-)' +pattern=')+' +patterns-tester: str_match: unfinished capture +string='/page/51' +pattern='/page/51(' +patterns-tester: str_match: malformed pattern (ends with '%%') +string='/page/51' +pattern='/page/51%' +patterns-tester: str_match: malformed pattern (missing ']') +string='/page/51' +pattern='/page/[51' +patterns-tester: str_match: malformed pattern (missing arguments to '%b') +string='/page/(51)' +pattern='/page/%b(' +patterns-tester: str_match: too many captures +string='/page/51' +pattern='()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()' +patterns-tester: str_match: missing '[' after '%f' in pattern +string='/page/51' +pattern='/page/%f' +patterns-tester: str_match: missing '[' after '%f' in pattern +string='/page/51' +pattern='/page%f/51' +patterns-tester: str_match: max repetition items +string='q*********************************' +pattern='*************************************q' +patterns-tester: str_match: max repetition items +string='q+++++++++++++++++++++++++++++++++' +pattern='+++++++++++++++++++++++++++++++++++++q' +patterns-tester: str_match: max repetition items +string='q---------------------------------' +pattern='-------------------------------------q' +patterns-tester: str_match: max repetition items +string='q?????????????????????????????????' +pattern='?????????????????????????????????????q' |