1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Testing Guidelines</title>
<meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
<link rel="HOME" title="Privoxy Developer Manual" href="index.html">
<link rel="PREVIOUS" title="Coding Guidelines" href="coding.html">
<link rel="NEXT" title="Releasing a New Version" href="newrelease.html">
<link rel="STYLESHEET" type="text/css" href="../p_doc.css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body class="SECT1" bgcolor="#EEEEEE" text="#000000" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="NAVHEADER">
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<th colspan="3" align="center">Privoxy Developer Manual</th>
</tr>
<tr>
<td width="10%" align="left" valign="bottom"><a href="coding.html" accesskey="P">Prev</a></td>
<td width="80%" align="center" valign="bottom"></td>
<td width="10%" align="right" valign="bottom"><a href="newrelease.html" accesskey="N">Next</a></td>
</tr>
</table>
<hr align="left" width="100%">
</div>
<div class="SECT1">
<h1 class="SECT1"><a name="TESTING" id="TESTING">5. Testing Guidelines</a></h1>
<p>To be filled.</p>
<div class="SECT2">
<h2 class="SECT2"><a name="TESTING-PLAN" id="TESTING-PLAN">5.1. Testplan for releases</a></h2>
<p>Explain release numbers. major, minor. developer releases. etc.</p>
<ol type="1">
<li>
<p>Remove any existing rpm with rpm -e</p>
</li>
<li>
<p>Remove any file that was left over. This includes (but is not limited to)</p>
<ul>
<li>
<p>/var/log/privoxy</p>
</li>
<li>
<p>/etc/privoxy</p>
</li>
<li>
<p>/usr/sbin/privoxy</p>
</li>
<li>
<p>/etc/init.d/privoxy</p>
</li>
<li>
<p>/usr/doc/privoxy*</p>
</li>
</ul>
</li>
<li>
<p>Install the rpm. Any error messages?</p>
</li>
<li>
<p>start,stop,status <span class="APPLICATION">Privoxy</span> with the specific script (e.g.
/etc/rc.d/init/privoxy stop). Reboot your machine. Does autostart work?</p>
</li>
<li>
<p>Start browsing. Does <span class="APPLICATION">Privoxy</span> work? Logfile written?</p>
</li>
<li>
<p>Remove the rpm. Any error messages? All files removed?</p>
</li>
</ol>
</div>
<div class="SECT2">
<h2 class="SECT2"><a name="PRIVOXY-REGRESSION-TEST" id="PRIVOXY-REGRESSION-TEST">5.2. Testing with <span class=
"APPLICATION">Privoxy-Regression-Test</span></a></h2>
<p>If you compiled, packaged or merely installed Privoxy, it is recommended to run <span class=
"APPLICATION">Privoxy-Regression-Test</span> to verify that at least the tested parts of <span class=
"APPLICATION">Privoxy</span> are working as expected.</p>
<p>This is actually pretty easy. For details, please see <b class="COMMAND">perldoc
privoxy-regression-test.pl</b>.</p>
<p>Here is an example of what <span class="APPLICATION">Privoxy-Regression-Test</span> can do for you:</p>
<table border="0" bgcolor="#E0E0E0" width="100%">
<tr>
<td>
<pre class="PROGRAMLISTING"> # Run all the tests
fk@t520 ~ $privoxy-regression-test.pl
2020-12-14 12:16:32: Asking Privoxy for the number of action files available ...
2020-12-14 12:16:32: Gathering regression tests from 9 action file(s) delivered by Privoxy 3.0.30.
2020-12-14 12:16:32: Executing regression tests ...
2020-12-14 12:16:41: Ooops. Expected removal but: 'Referer: https://p.p/' is still there.
2020-12-14 12:16:41: Failure for test 785. Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-block}'
2020-12-14 12:16:41: Ooops. Got: 'Referer: https://p.p/' while expecting: 'Referer: http://p.p/'
2020-12-14 12:16:41: Failure for test 791. Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-forge}'
2020-12-14 12:16:44: Executed 1087 regression tests. Skipped 115. 1085 successes, 2 failures.
# Repeat one of the failing tests and get a curl command to quickly reproduce the problem
# without causing too much log noise.
fk@t520 ~ $privoxy-regression-test.pl --test-number 785 --verbose --debug 4
2020-12-14 12:17:55: Asking Privoxy for the number of action files available ...
[...]
2020-12-14 12:17:56: Executing regression tests ...
2020-12-14 12:17:56: Executing: curl --include -H 'Proxy-Connection:' -H 'Connection: close' -s -S --user-agent 'Privoxy-Regression-Test 0.7.2' --max-time '5' --globoff -H 'X-Privoxy-Control: hide-referrer{conditional-block}' -H 'Referer: https://p.p/' http://p.p/show-request 2>&1
2020-12-14 12:17:56: Ooops. Expected removal but: 'Referer: https://p.p/' is still there.
2020-12-14 12:17:56: Failure for test 785 (0/13/5). Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-block}'
2020-12-14 12:17:56: Executed 1 regression tests. Skipped 1201. 0 successes, 1 failures.</pre>
</td>
</tr>
</table>
<p>Use the if the <b class="COMMAND">--privoxy-address</b> option if the http_proxy environment variable isn't
configured and you don't want to use the default (http://127.0.0.1:8118/).</p>
</div>
<div class="SECT2">
<h2 class="SECT2"><a name="FUZZING" id="FUZZING">5.3. Fuzzing Privoxy</a></h2>
<p>To make fuzzing more convenient, Privoxy can be configured with --enable-fuzz which will result in the --fuzz
option becoming available.</p>
<p>Example (tested on ElectroBSD):</p>
<table border="0" bgcolor="#E0E0E0" width="100%">
<tr>
<td>
<pre class="PROGRAMLISTING"> # Compile Privoxy with instrumentation for afl
$ export CC=afl-clang
$ export CFLAGS="-fsanitize=address -ggdb"
$ export CPPFLAGS=-I/usr/local/include/
$ export LDFLAGS="-fsanitize=address -L/usr/local/lib"
$ export AFL_USE_ASAN=1
$ export AFL_HARDEN=1
$ ./configure --with-debug --enable-extended-host-patterns --enable-accept-filter --enable-no-gifs --enable-compression --enable-strptime-sanity-checks --enable-external-filters --enable-fuzz
$ ./privoxy --fuzz
Privoxy version 3.0.24 (http://www.privoxy.org/)
Usage: ./privoxy [--config-test] [--chroot] [--help] [--no-daemon] [--pidfile pidfile] [--pre-chroot-nslookup hostname] [--user user[.group]] [--version] [configfile]
./privoxy --fuzz fuzz-mode ./path/to/fuzzed/input [--stfu]
Supported fuzz modes and the expected input:
action: Text to parse as action file.
client-request: Client request to parse. Currently incomplete
client-header: Client header to parse.
chunked-transfer-encoding: Chunk-encoded data to dechunk.
deflate: deflate-compressed data to decompress.
filter: Text to parse as filter file.
gif: gif to deanimate.
gzip: gzip-compressed data to decompress.
pcrs-substitute: A pcrs-substitute to compile. Not a whole pcrs job! Example: Bla $1 bla C $3 blah.
server-header: Server header to parse.
server-response: Server response to parse.
The following fuzz modes read data from stdin if the 'file' is '-'
client-request
client-header
chunked-transfer-encoding
deflate
gif
gzip
pcrs-substitute
server-header
server-response
Aborting
$ export ASAN_OPTIONS='abort_on_error=1'
$ mkdir input output
$ echo '$1 bla fasel $2' > input/pcrs
$ afl-fuzz -i input -o output -m none ~/git/privoxy/privoxy --fuzz pcrs-substitute - --stfu
$ cat >input/pcrs.txt
FILTER: bla fasel
s@(.{1})[432](\d+)@$1$2$hostname@UgisT
$ afl-fuzz -i input/ -o output/ -f bla.filter -m none privoxy --fuzz filter bla.filter --stfu</pre>
</td>
</tr>
</table>
</div>
</div>
<div class="NAVFOOTER">
<hr align="left" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="33%" align="left" valign="top"><a href="coding.html" accesskey="P">Prev</a></td>
<td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">Home</a></td>
<td width="33%" align="right" valign="top"><a href="newrelease.html" accesskey="N">Next</a></td>
</tr>
<tr>
<td width="33%" align="left" valign="top">Coding Guidelines</td>
<td width="34%" align="center" valign="top"> </td>
<td width="33%" align="right" valign="top">Releasing a New Version</td>
</tr>
</table>
</div>
</body>
</html>
|