Commit Graph

49 Commits (e843519fb899f36780756894f634238d67857ad8)

Author SHA1 Message Date
rofl0r a5890b621b run_tests_valgrind: use tougher valgrind settings 2020-09-15 23:39:04 +01:00
rofl0r 7014d050d9 run_tests: make travis happy, use signal nr instead of name 2020-09-14 17:02:36 +01:00
rofl0r 17e19a67cf run_tests: do some more extensive testing
1) force a config reload after some initial tests.
   this will allow to identify memleaks using the valgrind test,
   as this will free all structures allocated for the config, and
   recreate them.
2) test ErrorFile directive by adding several of them.
   this should help catch regressions such as the one fixed in
   4847d8cdb3.
   it will also test memleaks in the related code paths.
3) test some scenarios that should produce errors and use the
   configured ErrorFile directives.
2020-09-13 01:09:21 +01:00
rofl0r bfe59856b2 tests/webclient: return error when HTTP status > 399 2020-09-13 00:35:38 +01:00
rofl0r 0d26fab317 run_tests.sh: print more diagnostic if killing tp fails 2020-09-06 17:48:14 +01:00
rofl0r 55208eb2f6 run_tests.sh: print pid if killing tp fails 2020-09-06 17:20:06 +01:00
rofl0r b935dc85c3 simplify codebase by using one thread/conn, instead of preforked procs
the existing codebase used an elaborate and complex approach for
its parallelism:

5 different config file options, namely

- MaxClients
- MinSpareServers
- MaxSpareServers
- StartServers
- MaxRequestsPerChild

were used to steer how (and how many) parallel processes tinyproxy
would spin up at start, how many processes at each point needed to
be idle, etc.
it seems all preforked processes would listen on the server port
and compete with each other about who would get assigned the new
incoming connections.
since some data needs to be shared across those processes, a half-
baked "shared memory" implementation was provided for this purpose.
that implementation used to use files in the filesystem, and since
it had a big FIXME comment, the author was well aware of how hackish
that approach was.

this entire complexity is now removed. the main thread enters
a loop which polls on the listening fds, then spins up a new
thread per connection, until the maximum number of connections
(MaxClients) is hit. this is the only of the 5 config options
left after this cleanup. since threads share the same address space,
the code necessary for shared memory access has been removed.
this means that the other 4 mentioned config option will now
produce a parse error, when encountered.

currently each thread uses a hardcoded default of 256KB per thread
for the thread stack size, which is quite lavish and should be
sufficient for even the worst C libraries, but people may want
to tweak this value to the bare minimum, thus we may provide a new
config option for this purpose in the future.
i suspect that on heavily optimized C libraries such a musl, a
stack size of 8-16 KB per thread could be sufficient.

since the existing list implementation in vector.c did not provide
a way to remove a single item from an existing list, i added my
own list implementation from my libulz library which offers this
functionality, rather than trying to add an ad-hoc, and perhaps
buggy implementation to the vector_t list code. the sblist
code is contained in an 80 line C file and as simple as it can get,
while offering good performance and is proven bugfree due to years
of use in other projects.
2019-12-21 00:43:45 +00:00
Jordi Mallach 7da3e4854c [BB#83] Use output of id instead of $USER 2010-04-21 21:02:57 +05:30
Michael Adam cfa5792880 change the default log file location to "@LOCALSTATEDIR@/log/tinyproxy/tinyproxy.log"
i.e. add a tinyproxy subdirectory.
This is meant to ease running tinyproxy as non-root user
the subdirectory can be used to give the tinyproxy user
write permission.

Michael
2010-03-02 23:39:21 +01:00
Michael Adam 3f1632603c tests: fix bug #80: keep track of errors in return codes
Michael
2010-02-23 00:18:29 +01:00
Michael Adam 7c15563430 tests: fix a typo in run_tests.sh 2010-02-23 00:17:21 +01:00
Michael Adam d133eee36b tests: Fix bug #79. Finish "make test" without waiting for user input.
Old behaviour is preserved by passing in the environment variable
TINYPROXY_TESTS_WAIT=yes.

Michael
2010-02-22 23:12:51 +01:00
Michael Adam cbaa4b9fd2 tests:webclient: add option to send a request entity (body) 2009-10-12 02:01:25 +02:00
Michael Adam 7b8171fe01 tests: add commented out DisableViaHeader to tinyproxy conf in the tests. 2009-10-11 02:00:44 +02:00
Michael Adam cbe52ca43c tests:webserver: correctly answer http/0.9 requests by sending no headers
Michael
2009-10-10 20:57:07 +02:00
Michael Adam 4668ae9e06 tests: set XTinyproxy Yes in the test setup
Michael
2009-09-27 12:52:39 +02:00
Michael Adam 0539be08b4 tests: fix infinite loop "waiting for 3 seconds..." in bash
Michael
2009-09-27 12:07:54 +02:00
Michael Adam 79e994dd97 tests:webclient: allow HTTP/1.0 requests with methods other than GET
Michael
2009-09-27 11:18:52 +02:00
Michael Adam 92c64cabc1 tests: use the debug.html file as DefaultErrorFile in the tests.
Michael
2009-09-21 09:42:47 +02:00
Michael Adam 87f7a79e89 tests:webclient: fix default version (string, not number...)
Michael
2009-09-20 13:24:06 +02:00
Michael Adam 4d4f7d2a09 tests:webclient: add copyright notice to the pod documentation.
Michael
2009-09-17 00:25:57 +02:00
Michael Adam d1c8a68375 tests:webserver: Add copyright notice to the pod documentation.
Michael
2009-09-17 00:25:57 +02:00
Michael Adam aae8ae5d8d tests:webclient: reduce duplication.
Michael
2009-09-17 00:25:57 +02:00
Michael Adam b7d9256a7a tests:webclient: add a --dry-run mode that prints the request to stdout
and does not connect to the server at all.

Michael
2009-09-16 22:35:35 +02:00
Michael Adam 4ef7901115 tests:webclient: extend webclient to support HTTP/0.9, 1.0 and 1.1 requests.
Enable spcifying HTTP protocol version on command line ( --http-version).
Enable specifying method (GET, CONNECT, ...) on the command line (--method).
Add POD documentation.
Use pod2usage() to print help message.

Michael
2009-09-16 22:35:35 +02:00
Michael Adam b5a69151fa tests: add Makefile.am to tests/ and tests/scripts dir (for packaging)
Michael
2009-09-16 22:35:35 +02:00
Michael Adam f648d82edc tests: prepare tinyproxy for filter file usage in tests.
Michael
2009-09-15 02:25:10 +02:00
Michael Adam b6413068e2 tests:webserver: record the value of the server header field in a variable.
Michael
2009-09-14 22:12:30 +02:00
Michael Adam df4892d939 tests:webclient: add User-Agent header to request.
Michael
2009-09-14 13:30:58 +02:00
Michael Adam 8c5391ab6e tests:webserver: add handing of bad request error.
Michael
2009-09-14 13:30:57 +02:00
Michael Adam 78502e4565 tests:webserver: add parsing of request
Michael
2009-09-14 13:30:57 +02:00
Michael Adam afacc3d80b tests:webserver: move parsing of request to its own function.
(Prepare for really parsing the request...)

Michael
2009-09-14 11:02:28 +02:00
Michael Adam f1a586648e tests: test retreival of stathost page.
Michael
2009-09-13 01:52:26 +02:00
Michael Adam 282ec11792 tests: set stathost to 127.0.0.127 in the testsuite
Michael
2009-09-13 01:52:11 +02:00
Michael Adam 5a96099cde tests: print IP and port after firing up tinyproxy and webserver
Michael
2009-09-13 01:31:05 +02:00
Michael Adam abb2283e2e tests:webserver: be more rfc 1945 compliant in the server-header.
Michael
2009-09-13 01:14:44 +02:00
Michael Adam 71f3721bb1 tests: fix run_tests.sh after templates have moved.
Michael
2009-09-13 01:09:44 +02:00
Michael Adam 6c83a49bbb tests: add a script wrapper to run tinyproxy under valgrind in the tests.
This runs valgrind with the -q switch - i.e. the log file
tests/env/var/log/valgrind.log will only contain anything when there were
valgrind errors. (Memory leaks...)

Michael
2009-09-11 01:10:11 +02:00
Michael Adam 26aa8648b6 tests: add support for running tinyproxy under valgrind.
When you want to run tinyproxy under valgrind,
set the environment variable VALGRIND to some useful
valgrind command line.

Michael
2009-09-11 01:02:52 +02:00
Michael Adam 408c781d14 tests: restructure run_tests into functions to make main flow clearer.
Also prepare for modularizing the testsuite.

Michael
2009-09-10 12:53:25 +02:00
Michael Adam dfa1763af9 tests:run_tests: add complete GPL boilerplate.
Michael
2009-09-10 12:09:12 +02:00
Michael Adam bc1da1cbb5 tests:webclient: add complete GPL boilerplate.
Michael
2009-09-10 12:08:17 +02:00
Michael Adam 290c4f581e tests/webserver: add complete GPL boilerplate.
Michael
2009-09-10 12:07:48 +02:00
Michael Adam 4d4f8bffef tests:webserver: make pid-file, log-dir and doc-root reside in /tmp by default
So simply starting the server will work.

Michael
2009-09-10 11:08:17 +02:00
Michael Adam 974be68476 tests/webserver: rework locking of pid file.
Michael
2009-09-10 11:08:17 +02:00
Michael Adam 449af292dc tests:webserver: reopen STDOUT/STDERR after locking pid file.
Michael
2009-09-10 11:08:08 +02:00
Michael Adam 526c70f687 tests: this is a first draft of the beginning of a test suite.
It provisions a test envirnonment, fires up the perl web server
and tinyproxy and currently makes one direct request to the
web server and one request through tinyproxy.

This will be modularized and extended in the sequel.

Michael
2009-09-10 01:20:59 +02:00
Michael Adam 158f8a7e15 tests: add a simple web client written in perl.
This should be one of the test tools for writing our testsuite.

This can be used to make direct connects to web servers like so:

webclient.pl server_ip:port /path/file.html

and to make requestis via a proxy like this:

webclient.pl proxy_ip:port http://webserver:port/path/file.html

Michael
2009-09-10 01:15:01 +02:00
Michael Adam a39d7cd8d8 tests: add a simple webserver written in perl.
This should be the web server to test against in the upcoming selftest suite.
This web server will evolve as the test suite grows.
Currently, it just returns a web site quoting the request and a fortune
(if fortune is installed...) for whatever request it gets.

The option to provide a document root is already present.

Michael
2009-09-10 01:13:01 +02:00