<!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" >5. Testing Guidelines</A ></H1 ><P >To be filled.</P ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="TESTING-PLAN" >5.1. Testplan for releases</A ></H2 ><P > Explain release numbers. major, minor. developer releases. etc. </P ><P ></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 ><P ></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" >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" >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 >