Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
085f6d2d
Commit
085f6d2d
authored
Nov 18, 2011
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
ssh://git.varnish-cache.org/git/varnish-cache
parents
8921e990
ab9cec7c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
131 additions
and
146 deletions
+131
-146
r01060.vtc
bin/varnishtest/tests/r01060.vtc
+48
-0
varnishtest.rst
doc/sphinx/reference/varnishtest.rst
+82
-145
vcc_dir_dns.c
lib/libvcl/vcc_dir_dns.c
+1
-1
No files found.
bin/varnishtest/tests/r01060.vtc
0 → 100644
View file @
085f6d2d
varnishtest "DNS director tramples on other backends"
server s1 {
rxreq
txresp
} -start
server s2 {
rxreq
txresp
} -start
varnish v1 -vcl {
backend b1 {
.host = "${s1_addr}";
.port = "${s1_port}";
}
director d1 dns {
.list = {
.port = "80";
"${bad_ip}"/32;
}
.ttl = 1m;
}
backend b2 {
.host = "${s2_addr}";
.port = "${s2_port}";
}
sub vcl_recv {
set req.backend = d1;
if (req.url == "/1") {
set req.backend = b1;
} else {
set req.backend = b2;
}
}
} -start
client c1 {
txreq -url "/1"
rxresp
txreq -url "/2"
rxresp
} -run
doc/sphinx/reference/varnishtest.rst
View file @
085f6d2d
...
@@ -7,14 +7,16 @@ Test program for Varnish
...
@@ -7,14 +7,16 @@ Test program for Varnish
------------------------
------------------------
:Author: Stig Sandbeck Mathisen
:Author: Stig Sandbeck Mathisen
:Date: 2010-05-31
:Author: Kristian Lyngstøl
:Version: 1.0
:Date: 2011-11-15
:Version: 1.1
:Manual section: 1
:Manual section: 1
SYNOPSIS
SYNOPSIS
========
========
varnishtest [-n iter] [-q] [-v] file [file ...]
varnishtest [-iklLqv] [-n iter] [-D name=val] [-j jobs] [-t duration] file [file ...]
DESCRIPTION
DESCRIPTION
===========
===========
...
@@ -24,160 +26,95 @@ Varnish Cache.
...
@@ -24,160 +26,95 @@ Varnish Cache.
The varnishtest program, when started and given one or more script
The varnishtest program, when started and given one or more script
files, can create a number of threads representing backends, some
files, can create a number of threads representing backends, some
threads representing clients, and a varnishd process.
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:
The following options are available:
-n iter Run iter number of iterations.
-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
-q Be quiet.
file File to use as a script
-v Be verbose.
-t Dunno
.
Macro definitions that can be overridden
.
file File to use as a script
varnishd Path to varnishd to use [varnishd]
SCRIPTS
SCRIPTS
=======
=======
Example script
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.
# Start a varnish instance called "v1"
varnish v1 -arg "-b localhost:9080" -start
An example::
# Create a server thread called "s1"
varnishtest "#1029"
server s1 {
# Receive a request
server s1 {
rxreq
rxreq
# Send a standard response
expect req.url == "/bar"
txresp -hdr "Connection: close" -body "012345\n"
txresp -gzipbody {[bar]}
}
rxreq
# Start the server thread
expect req.url == "/foo"
server s1 -start
txresp -body {<h1>FOO<esi:include src="/bar"/>BARF</h1>}
# Create a client thread called "c1"
} -start
client c1 {
# Send a request
varnish v1 -vcl+backend {
txreq -url "/"
sub vcl_fetch {
# Wait for a response
set beresp.do_esi = true;
rxresp
if (req.url == "/foo") {
# Insist that it be a success
set beresp.ttl = 0s;
expect resp.status == 200
} else {
}
set beresp.ttl = 10m;
}
# Run the client
}
client c1 -run
} -start
# Wait for the server to die
client c1 {
server s1 -wait
txreq -url "/bar" -hdr "Accept-Encoding: gzip"
rxresp
# (Forcefully) Stop the varnish instance.
gunzip
varnish v1 -stop
expect resp.bodylen == 5
Example script output
txreq -url "/foo" -hdr "Accept-Encoding: gzip"
~~~~~~~~~~~~~~~~~~~~~
rxresp
expect resp.bodylen == 21
The output, running this script looks as follows. The "bargraph" at
} -run
the beginning of the line is an indication of the level of detail in
the line. The second field where the message comes from. The rest of
When run, the above script will simulate a server (s1) that expects two
the line is anyones guess :-)
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.
# TEST tests/b00000.vtc starting
### v1 CMD: cd ../varnishd && ./varnishd -d -d -n v1 -a :9081 -T :9001 -b localhost:9080
### v1 opening CLI connection
#### v1 debug| NB: Storage size limited to 2GB on 32 bit architecture,\n
#### v1 debug| NB: otherwise we could run out of address space.\n
#### v1 debug| storage_file: filename: ./varnish.Shkoq5 (unlinked) size 2047 MB.\n
### v1 CLI connection fd = 3
#### v1 CLI TX| start
#### v1 debug| Using old SHMFILE\n
#### v1 debug| Notice: locking SHMFILE in core failed: Operation not permitted\n
#### v1 debug| bind(): Address already in use\n
#### v1 debug| rolling(1)...
#### v1 debug| \n
#### v1 debug| rolling(2)...\n
#### v1 debug| Debugging mode, enter "start" to start child\n
### v1 CLI 200 <start>
## s1 Starting server
### s1 listen on :9080 (fd 6)
## c1 Starting client
## c1 Waiting for client
## s1 started on :9080
## c1 started
### c1 connect to :9081
### c1 connected to :9081 fd is 8
#### c1 | GET / HTTP/1.1\r\n
#### c1 | \r\n
### c1 rxresp
#### s1 Accepted socket 7
### s1 rxreq
#### s1 | GET / HTTP/1.1\r\n
#### s1 | X-Varnish: 422080121\r\n
#### s1 | X-Forwarded-For: 127.0.0.1\r\n
#### s1 | Host: localhost\r\n
#### s1 | \r\n
#### s1 http[ 0] | GET
#### s1 http[ 1] | /
#### s1 http[ 2] | HTTP/1.1
#### s1 http[ 3] | X-Varnish: 422080121
#### s1 http[ 4] | X-Forwarded-For: 127.0.0.1
#### s1 http[ 5] | Host: localhost
#### s1 | HTTP/1.1 200 Ok\r\n
#### s1 | Connection: close\r\n
#### s1 | \r\n
#### s1 | 012345\n
#### s1 | \r\n
## s1 ending
#### c1 | HTTP/1.1 200 Ok\r\n
#### c1 | Content-Length: 9\r\n
#### c1 | Date: Mon, 16 Jun 2008 22:16:55 GMT\r\n
#### c1 | X-Varnish: 422080121\r\n
#### c1 | Age: 0\r\n
#### c1 | Via: 1.1 varnish\r\n
#### c1 | Connection: keep-alive\r\n
#### c1 | \r\n
#### c1 http[ 0] | HTTP/1.1
#### c1 http[ 1] | 200
#### c1 http[ 2] | Ok
#### c1 http[ 3] | Content-Length: 9
#### c1 http[ 4] | Date: Mon, 16 Jun 2008 22:16:55 GMT
#### c1 http[ 5] | X-Varnish: 422080121
#### c1 http[ 6] | Age: 0
#### c1 http[ 7] | Via: 1.1 varnish
#### c1 http[ 8] | Connection: keep-alive
#### c1 EXPECT resp.status (200) == 200 (200) match
## c1 ending
## s1 Waiting for server
#### v1 CLI TX| stop
### v1 CLI 200 <stop>
# TEST tests/b00000.vtc completed
If instead of 200 we had expected 201 with the line:::
expect resp.status == 201
The output would have ended with:::
#### c1 http[ 0] | HTTP/1.1
#### c1 http[ 1] | 200
#### c1 http[ 2] | Ok
#### c1 http[ 3] | Content-Length: 9
#### c1 http[ 4] | Date: Mon, 16 Jun 2008 22:26:35 GMT
#### c1 http[ 5] | X-Varnish: 648043653 648043652
#### c1 http[ 6] | Age: 6
#### c1 http[ 7] | Via: 1.1 varnish
#### c1 http[ 8] | Connection: keep-alive
---- c1 EXPECT resp.status (200) == 201 (201) failed
SEE ALSO
SEE ALSO
========
========
* varnishtest source code repository with tests
* varnishhist(1)
* varnishhist(1)
* varnishlog(1)
* varnishlog(1)
* varnishncsa(1)
* varnishncsa(1)
...
@@ -190,9 +127,9 @@ HISTORY
...
@@ -190,9 +127,9 @@ HISTORY
The varnishtest program was developed by Poul-Henning Kamp
The varnishtest program was developed by Poul-Henning Kamp
⟨phk@phk.freebsd.dk⟩ in cooperation with Varnish Software AS.
⟨phk@phk.freebsd.dk⟩ in cooperation with Varnish Software AS.
This manual page
This manual page
was originally written by Stig Sandbeck Mathisen
was written by Stig Sandbeck Mathisen ⟨ssm@linpro.no⟩ using examples
⟨ssm@linpro.no⟩ and updated by Kristian Lyngstøl
by Poul-Henning Kamp ⟨phk@phk.freebsd.dk⟩
.
(kristian@varnish-cache.org)
.
COPYRIGHT
COPYRIGHT
=========
=========
...
@@ -200,4 +137,4 @@ COPYRIGHT
...
@@ -200,4 +137,4 @@ COPYRIGHT
This document is licensed under the same licence as Varnish
This document is licensed under the same licence as Varnish
itself. See LICENCE for details.
itself. See LICENCE for details.
* Copyright (c) 2007-20
08
Varnish Software AS
* Copyright (c) 2007-20
11
Varnish Software AS
lib/libvcl/vcc_dir_dns.c
View file @
085f6d2d
...
@@ -79,7 +79,7 @@ print_backend(struct vcc *tl,
...
@@ -79,7 +79,7 @@ print_backend(struct vcc *tl,
AN
(
vsb
);
AN
(
vsb
);
tl
->
fb
=
vsb
;
tl
->
fb
=
vsb
;
Fc
(
tl
,
0
,
"
\t
{ .host = VGC_backend_%s },
\n
"
,
vgcname
);
Fc
(
tl
,
0
,
"
\t
{ .host = VGC_backend_%s },
\n
"
,
vgcname
);
Fh
(
tl
,
1
,
"
\n
#define VGC_backend_%s %d
\n
"
,
vgcname
,
serial
);
Fh
(
tl
,
1
,
"
\n
#define VGC_backend_%s %d
\n
"
,
vgcname
,
tl
->
ndirector
);
Fb
(
tl
,
0
,
"
\n
static const struct vrt_backend vgc_dir_priv_%s = {
\n
"
,
Fb
(
tl
,
0
,
"
\n
static const struct vrt_backend vgc_dir_priv_%s = {
\n
"
,
vgcname
);
vgcname
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment