[tests] t/test_mod_indexfile

also remove some now-redundant tests from request.t
and reduce scripts and directories under tests
(because automake is sloooow and the fewer dirs, the better)
master
Glenn Strauss 12 months ago
parent 7a21b3856e
commit ca2898f678
  1. 1
      .gitignore
  2. 1
      configure.ac
  3. 21
      src/CMakeLists.txt
  4. 5
      src/Makefile.am
  5. 27
      src/meson.build
  6. 140
      src/t/test_mod_indexfile.c
  7. 4
      tests/docroot/www/404.pl
  8. 2
      tests/docroot/www/Makefile.am
  9. 3
      tests/docroot/www/cgi.pl
  10. 1
      tests/docroot/www/indexfile/Makefile.am
  11. 8
      tests/docroot/www/indexfile/index.pl
  12. 4
      tests/lighttpd.conf
  13. 2
      tests/prepare.sh
  14. 19
      tests/request.t

1
.gitignore vendored

@ -54,6 +54,7 @@ test_keyvalue
test_configfile
test_mod_access
test_mod_evhost
test_mod_indexfile
test_mod_simple_vhost
test_mod_staticfile
test_mod_userdir

@ -1696,7 +1696,6 @@ AC_CONFIG_FILES([\
Makefile \
src/Makefile \
tests/docroot/Makefile \
tests/docroot/www/indexfile/Makefile \
tests/docroot/www/Makefile \
tests/Makefile \
])

@ -917,6 +917,25 @@ add_executable(test_mod_evhost
)
add_test(NAME test_mod_evhost COMMAND test_mod_evhost)
add_executable(test_mod_indexfile
t/test_mod_indexfile.c
request.c
base64.c
buffer.c
burl.c
array.c
fdevent.c
http_etag.c
http_header.c
http_kv.c
log.c
sock_addr.c
stat_cache.c
algo_splaytree.c
ck.c
)
add_test(NAME test_mod_indexfile COMMAND test_mod_indexfile)
add_executable(test_mod_simple_vhost
t/test_mod_simple_vhost.c
buffer.c
@ -1226,6 +1245,8 @@ if(WITH_LIBUNWIND)
add_target_properties(test_mod_access COMPILE_FLAGS ${LIBUNWIND_CFLAGS})
target_link_libraries(test_mod_evhost ${LIBUNWIND_LDFLAGS})
add_target_properties(test_mod_evhost COMPILE_FLAGS ${LIBUNWIND_CFLAGS})
target_link_libraries(test_mod_indexfile ${LIBUNWIND_LDFLAGS})
add_target_properties(test_mod_indexfile COMPILE_FLAGS ${LIBUNWIND_CFLAGS})
target_link_libraries(test_mod_simple_vhost ${LIBUNWIND_LDFLAGS})
add_target_properties(test_mod_simple_vhost COMPILE_FLAGS ${LIBUNWIND_CFLAGS})
target_link_libraries(test_mod_staticfile ${LIBUNWIND_LDFLAGS})

@ -9,6 +9,7 @@ noinst_PROGRAMS=\
t/test_keyvalue \
t/test_mod_access \
t/test_mod_evhost \
t/test_mod_indexfile \
t/test_mod_simple_vhost \
t/test_mod_staticfile \
t/test_mod_userdir \
@ -26,6 +27,7 @@ TESTS=\
t/test_keyvalue$(EXEEXT) \
t/test_mod_access$(EXEEXT) \
t/test_mod_evhost$(EXEEXT) \
t/test_mod_indexfile$(EXEEXT) \
t/test_mod_simple_vhost$(EXEEXT) \
t/test_mod_staticfile$(EXEEXT) \
t/test_mod_userdir$(EXEEXT) \
@ -662,6 +664,9 @@ t_test_mod_access_LDADD = $(LIBUNWIND_LIBS)
t_test_mod_evhost_SOURCES = t/test_mod_evhost.c buffer.c array.c log.c ck.c
t_test_mod_evhost_LDADD = $(LIBUNWIND_LIBS)
t_test_mod_indexfile_SOURCES = t/test_mod_indexfile.c request.c base64.c buffer.c burl.c array.c fdevent.c http_etag.c http_header.c http_kv.c log.c sock_addr.c stat_cache.c algo_splaytree.c ck.c
t_test_mod_indexfile_LDADD = $(LIBUNWIND_LIBS) $(FAM_LIBS)
t_test_mod_simple_vhost_SOURCES = t/test_mod_simple_vhost.c buffer.c array.c log.c ck.c
t_test_mod_simple_vhost_LDADD = $(LIBUNWIND_LIBS)

@ -942,6 +942,33 @@ test('test_mod_evhost', executable('test_mod_evhost',
build_by_default: false,
))
test('test_mod_indexfile', executable('test_mod_indexfile',
sources: [
't/test_mod_indexfile.c',
'request.c',
'base64.c',
'buffer.c',
'burl.c',
'array.c',
'fdevent.c',
'http_etag.c',
'http_header.c',
'http_kv.c',
'log.c',
'sock_addr.c',
'stat_cache.c',
'algo_splaytree.c',
'ck.c'
],
dependencies: [ common_flags
, libfam
, libpcre
, libunwind
, libws2_32
],
build_by_default: false,
))
test('test_mod_simple_vhost', executable('test_mod_simple_vhost',
sources: [
't/test_mod_simple_vhost.c',

@ -0,0 +1,140 @@
#include "first.h"
#undef NDEBUG
#include <sys/types.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "mod_indexfile.c"
__attribute_noinline__
static void test_mod_indexfile_reset (request_st * const r)
{
r->http_status = 0;
buffer_copy_string_len(&r->uri.path, CONST_STR_LEN("/"));
buffer_copy_string_len(&r->physical.doc_root, CONST_STR_LEN("/tmp"));
buffer_copy_string_len(&r->physical.path, CONST_STR_LEN("/tmp/"));
}
__attribute_noinline__
static void
run_mod_indexfile_tryfiles (request_st * const r, const array * const indexfiles, int line, int status, const char *desc)
{
handler_t rc = mod_indexfile_tryfiles(r, indexfiles);
if (r->http_status != status
|| rc != (status ? HANDLER_FINISHED : HANDLER_GO_ON)) {
fprintf(stderr,
"%s.%d: %s() failed: expected '%d', got '%d' for test %s\n",
__FILE__, line, "mod_indexfile_tryfiles", status,
r->http_status, desc);
fflush(stderr);
abort();
}
}
#include <unistd.h> /* unlink() */
static void
test_mod_indexfile_tryfiles (request_st * const r)
{
char fn[] = "/tmp/lighttpd_mod_indexfile.XXXXXX";
#ifdef __COVERITY__
/* POSIX-2008 requires mkstemp create file with 0600 perms */
umask(0600);
#endif
/* coverity[secure_temp : FALSE] */
int fd = mkstemp(fn);
if (fd < 0) {
perror("mkstemp()");
exit(1);
}
struct stat st;
if (0 != fstat(fd, &st)) {
perror("fstat()");
exit(1);
}
array * const indexfiles = array_init(3);
test_mod_indexfile_reset(r);
run_mod_indexfile_tryfiles(r, indexfiles, __LINE__, 0,
"empty indexfiles");
assert(buffer_eq_slen(&r->physical.path, CONST_STR_LEN("/tmp/")));
test_mod_indexfile_reset(r);
/*(assumes modified tempfile name does not exist)*/
array_insert_value(indexfiles, fn+5, sizeof(fn)-6-1);
run_mod_indexfile_tryfiles(r, indexfiles, __LINE__, 0,
"non-matching indexfiles");
assert(buffer_eq_slen(&r->physical.path, CONST_STR_LEN("/tmp/")));
test_mod_indexfile_reset(r);
array_insert_value(indexfiles, fn+5, sizeof(fn)-5-1);
run_mod_indexfile_tryfiles(r, indexfiles, __LINE__, 0,
"matching indexfile entry (w/o leading '/')");
assert(buffer_eq_slen(&r->physical.path, fn, sizeof(fn)-1));
test_mod_indexfile_reset(r);
array_reset_data_strings(indexfiles);
array_insert_value(indexfiles, fn+4, sizeof(fn)-4-1);
run_mod_indexfile_tryfiles(r, indexfiles, __LINE__, 0,
"matching indexfile entry (w/ leading '/')");
assert(buffer_eq_slen(&r->physical.path, fn, sizeof(fn)-1));
test_mod_indexfile_reset(r);
array_free(indexfiles);
unlink(fn);
}
int main (void)
{
request_st r;
memset(&r, 0, sizeof(request_st));
r.conf.errh = log_error_st_init();
r.conf.errh->errorlog_fd = -1; /* (disable) */
r.conf.follow_symlink = 1;
array * const mimetypes = array_init(0);
r.conf.mimetypes = mimetypes; /*(must not be NULL)*/
test_mod_indexfile_tryfiles(&r);
array_free(mimetypes);
log_error_st_free(r.conf.errh);
free(r.uri.path.ptr);
free(r.physical.path.ptr);
free(r.physical.doc_root.ptr);
stat_cache_free();
return 0;
}
/*
* stub functions
*/
#include "fdevent_impl.h"
int fdevent_select_init(struct fdevents *ev) { return NULL == ev; }
int fdevent_poll_init(struct fdevents *ev) { return NULL == ev; }
int fdevent_linux_sysepoll_init(struct fdevents *ev) { return NULL == ev; }
int fdevent_solaris_devpoll_init(struct fdevents *ev) { return NULL == ev; }
int fdevent_solaris_port_init(struct fdevents *ev) { return NULL == ev; }
int fdevent_freebsd_kqueue_init(struct fdevents *ev) { return NULL == ev; }
int fdevent_libev_init(struct fdevents *ev) { return NULL == ev; }
int config_plugin_values_init(server *srv, void *p_d, const config_plugin_keys_t *cpk, const char *mname) {
UNUSED(srv);
UNUSED(p_d);
UNUSED(cpk);
UNUSED(mname);
return 0;
}
int config_check_cond(request_st *r, int context_ndx) {
UNUSED(r);
UNUSED(context_ndx);
return 0;
}

@ -34,6 +34,10 @@ elsif ($request_uri =~ m/^\/dynamic\/redirect_status\// ) {
"\n",
"REDIRECT_STATUS\n";
}
elsif ($ENV{PATH_INFO} eq "/internal-redir" ) {
# (not actually 404 error, but use separate script from cgi.pl for testing)
print "Status: 200\r\n\r\n";
}
else {
print "Status: 500\n",
"Content-Type: text/plain\n",

@ -9,5 +9,3 @@ EXTRA_DIST=\
ssi-include.shtml \
ssi-include.txt \
ssi.shtml
SUBDIRS=\
indexfile

@ -8,7 +8,8 @@ if ($ENV{"QUERY_STRING"} =~ /^env=(\w+)/) {
# redirection
if ($ENV{"QUERY_STRING"} eq "internal-redir") {
print "Location: /indexfile/index.pl/foo\r\n\r\n";
# (not actually 404 error, but use separate script from cgi.pl for testing)
print "Location: /404.pl/internal-redir\r\n\r\n";
exit 0;
}

@ -1,8 +0,0 @@
#!/usr/bin/perl
if ($ENV{REDIRECT_STATUS}) {
print "Status: $ENV{REDIRECT_STATUS}\r\n\r\n$ENV{SCRIPT_NAME}";
exit 0;
}
print "Status: 200\r\n\r\n";

@ -167,8 +167,6 @@ $HTTP["host"] =~ "allow\.example\.org$" {
}
$HTTP["host"] == "cgi.example.org" {
index-file.names = ( "nonexistent.txt", "index.pl" )
server.error-handler-404 = "/indexfile/index.pl"
cgi.x-sendfile = "enable"
}
@ -179,7 +177,7 @@ $HTTP["host"] == "errors.example.org" {
else $HTTP["url"] =~ "^/dynamic/redirect_status/" {
server.error-handler = "/404.pl"
}
else $HTTP["url"] =~ "." {
else {
server.error-handler-404 = "/404.pl"
}
}

@ -20,7 +20,6 @@ mkdir -p "${tmpdir}/servers/www.example.org/pages/" \
"${tmpdir}/servers/www.example.org/pages/dummydir/" \
"${tmpdir}/servers/www.example.org/pages/~test ä_/" \
"${tmpdir}/servers/www.example.org/pages/expire/" \
"${tmpdir}/servers/www.example.org/pages/indexfile/" \
"${tmpdir}/servers/123.example.org/pages/" \
"${tmpdir}/servers/a.example.org/pages/a/" \
"${tmpdir}/servers/b.example.org/pages/b/" \
@ -35,7 +34,6 @@ cp "${srcdir}/docroot/www/"*.html \
"${srcdir}/docroot/www/"*.shtml \
"${srcdir}/docroot/www/"*.txt \
"${tmpdir}/servers/www.example.org/pages/"
cp "${srcdir}/docroot/www/indexfile/"*.pl "${tmpdir}/servers/www.example.org/pages/indexfile/"
cp "${srcdir}/lighttpd.user" "${tmpdir}/"
cp "${srcdir}/lighttpd.htpasswd" "${tmpdir}/"
cp "${srcdir}/var-include-sub.conf" "${tmpdir}/../"

@ -8,7 +8,7 @@ BEGIN {
use strict;
use IO::Socket;
use Test::More tests => 181;
use Test::More tests => 179;
use LightyTest;
my $tf = LightyTest->new();
@ -1407,23 +1407,6 @@ EOF
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => 'http://www.example.org/' } ];
ok($tf->handle_http($t) == 0, 'broken header via perl cgi');
$t->{REQUEST} = ( <<EOF
GET /indexfile/ HTTP/1.0
Host: cgi.example.org
EOF
);
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/indexfile/index.pl' } ];
ok($tf->handle_http($t) == 0, 'index-file handling, Bug #3, Bug #6');
$t->{REQUEST} = ( <<EOF
POST /indexfile/abc HTTP/1.0
Host: cgi.example.org
Content-Length: 0
EOF
);
$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => '/indexfile/index.pl' } ];
ok($tf->handle_http($t) == 0, 'server.error-handler-404, Bug #12');
## mod_deflate

Loading…
Cancel
Save