===========
varnishtest
===========

------------------------
Test program for Varnish
------------------------

:Author: Stig Sandbeck Mathisen
:Author: Kristian Lyngstøl
:Date:   2011-11-15
:Version: 1.1
:Manual section: 1


SYNOPSIS
========

     varnishtest [-iklLqv] [-n iter] [-D name=val] [-j jobs] [-t duration] file [file ...]

DESCRIPTION
===========

The varnishtest program is a script driven program used to test the
Varnish Cache.

The varnishtest program, when started and given one or more script
files, can create a number of threads representing backends, some
threads representing clients, and a varnishd process. This is then used to
simulate a transaction to provoke a specific behavior.

The following options are available:

-D name=val      Define macro for use in scripts

-i               Find varnishd in build tree

-j jobs          Run this many tests in parallel

-k               Continue on test failure

-l               Leave /tmp/vtc.* if test fails

-L               Always leave /tmp/vtc.*

-n iterations    Run tests this many times

-q               Quiet mode: report only failures

-t duration      Time tests out after this long

-v               Verbose mode: always report test log

-h               Show help

file             File to use as a script


Macro definitions that can be overridden.

varnishd         Path to varnishd to use [varnishd]


SCRIPTS
=======

The script language used for Varnishtest is not a strictly defined
language. The best reference for writing scripts is the varnishtest program
itself. In the Varnish source code repository, under
`bin/varnishtest/tests/`, all the regression tests for Varnish are kept.

An example::

        varnishtest "#1029"

        server s1 {
                rxreq
                expect req.url == "/bar"
                txresp -gzipbody {[bar]}

                rxreq
                expect req.url == "/foo"
                txresp -body {<h1>FOO<esi:include src="/bar"/>BARF</h1>}

        } -start

        varnish v1 -vcl+backend {
                sub vcl_fetch {
                        set beresp.do_esi = true;
                        if (req.url == "/foo") {
                                set beresp.ttl = 0s;
                        } else {
                                set beresp.ttl = 10m;
                        }
                }
        } -start

        client c1 {
                txreq -url "/bar" -hdr "Accept-Encoding: gzip"
                rxresp
                gunzip
                expect resp.bodylen == 5

                txreq -url "/foo" -hdr "Accept-Encoding: gzip"
                rxresp
                expect resp.bodylen == 21
        } -run

When run, the above script will simulate a server (s1) that expects two
different requests. It will start a varnish server (v1) and add the backend
definition to the VCL specified (-vcl+backend). Finally it starts the
c1-client, which is a single client sending two requests.

SEE ALSO
========

* varnishtest source code repository with tests
* varnishhist(1)
* varnishlog(1)
* varnishncsa(1)
* varnishstat(1)
* varnishtop(1)
* vcl(7)

HISTORY
=======

The varnishtest program was developed by Poul-Henning Kamp
⟨phk@phk.freebsd.dk⟩ in cooperation with Varnish Software AS.
This manual page was originally written by Stig Sandbeck Mathisen
⟨ssm@linpro.no⟩ and updated by Kristian Lyngstøl
(kristian@varnish-cache.org).

COPYRIGHT
=========

This document is licensed under the same licence as Varnish
itself. See LICENCE for details.

* Copyright (c) 2007-2011 Varnish Software AS
