mirror of
https://github.com/novatiq/packages.git
synced 2026-06-28 00:00:26 +01:00
1784615d36
- Update haproxy download URL and hash - Add new patches (see https://www.haproxy.org/bugs/bugs-1.8.20.html) - Make halog use our CFLAGS - Update statically linked LUA to v5.3.5 Signed-off-by: Christian Lachner <gladiac@gmail.com>
926 lines
42 KiB
Diff
926 lines
42 KiB
Diff
commit 5aa7b32a94ad7ac38f465f0de279f09ff6d529d3
|
|
Author: Michael Prokop <haproxy.org@michael-prokop.at>
|
|
Date: Fri May 24 10:25:45 2019 +0200
|
|
|
|
DOC: fix typos
|
|
|
|
s/accidently/accidentally/
|
|
s/any ot these messages/any of theses messages/
|
|
s/catched/caught/
|
|
s/completly/completely/
|
|
s/convertor/converter/
|
|
s/desribing/describing/
|
|
s/developper/developer/
|
|
s/eventhough/even though/
|
|
s/exectution/execution/
|
|
s/functionnality/functionality/
|
|
s/If it receive a/If it receives a/
|
|
s/In can even/It can even/
|
|
s/informations/information/
|
|
s/it will be remove /it will be removed /
|
|
s/langage/language/
|
|
s/mentionned/mentioned/
|
|
s/negociated/negotiated/
|
|
s/Optionnaly/Optionally/
|
|
s/ouputs/outputs/
|
|
s/outweights/outweighs/
|
|
s/ressources/resources/
|
|
|
|
(cherry picked from commit 4438c6061d5a2ffd5b4251027038181af9b8dc22)
|
|
[wt: removed the wurfl+da notes as well as the part on peers/server]
|
|
Signed-off-by: Willy Tarreau <w@1wt.eu>
|
|
(cherry picked from commit a73e4f3d7a617a51551fffd80c5dbddee81e3aaf)
|
|
[wt: removed a few other keywords like ssl_bc_alpn and show peers]
|
|
Signed-off-by: Willy Tarreau <w@1wt.eu>
|
|
|
|
diff --git a/doc/DeviceAtlas-device-detection.txt b/doc/DeviceAtlas-device-detection.txt
|
|
index 4ecb44a4..144ee318 100644
|
|
--- a/doc/DeviceAtlas-device-detection.txt
|
|
+++ b/doc/DeviceAtlas-device-detection.txt
|
|
@@ -39,7 +39,7 @@ All HTTP headers via the sample / fetch
|
|
|
|
http-request set-header X-DeviceAtlas-Data %[da-csv-fetch(primaryHardwareType,osName,osVersion,browserName,browserVersion,browserRenderingEngine)]
|
|
|
|
-Single HTTP header (e.g. User-Agent) via the convertor
|
|
+Single HTTP header (e.g. User-Agent) via the converter
|
|
|
|
http-request set-header X-DeviceAtlas-Data %[req.fhdr(User-Agent),da-csv-conv(primaryHardwareType,osName,osVersion,browserName,browserVersion,browserRenderingEngine)]
|
|
|
|
diff --git a/doc/SPOE.txt b/doc/SPOE.txt
|
|
index dd36d43a..9602df95 100644
|
|
--- a/doc/SPOE.txt
|
|
+++ b/doc/SPOE.txt
|
|
@@ -96,7 +96,7 @@ for several engines. If no name is provided, the SPOE configuration must not
|
|
contain any scope directive.
|
|
|
|
We use a separate configuration file on purpose. By commenting SPOE filter
|
|
-line, you completly disable the feature, including the parsing of sections
|
|
+line, you completely disable the feature, including the parsing of sections
|
|
reserved to SPOE. This is also a way to keep the HAProxy configuration clean.
|
|
|
|
A SPOE configuration file must contains, at least, the SPOA configuration
|
|
@@ -272,7 +272,7 @@ option set-on-error <var name>
|
|
|
|
* 1 a timeout occurred during the event processing.
|
|
|
|
- * 2 an error was triggered during the ressources allocation.
|
|
+ * 2 an error was triggered during the resources allocation.
|
|
|
|
* 3 the frame payload exceeds the frame size and it cannot be
|
|
fragmented.
|
|
@@ -923,7 +923,7 @@ For more information about known errors, see section "Errors & timeouts"
|
|
-------------------------------
|
|
|
|
If an error occurs, at anytime, from the agent size, a AGENT-DISCONNECT frame
|
|
-is sent, with information desribing the error. such frame is also sent in reply
|
|
+is sent, with information describing the error. such frame is also sent in reply
|
|
to a HAPROXY-DISCONNECT. The agent must close the socket just after sending
|
|
this frame.
|
|
|
|
diff --git a/doc/coding-style.txt b/doc/coding-style.txt
|
|
index 5f252ed0..9f1bd79e 100644
|
|
--- a/doc/coding-style.txt
|
|
+++ b/doc/coding-style.txt
|
|
@@ -520,7 +520,7 @@ Wrong :
|
|
| bit = ! ! (~len++ ^ - (unsigned char) * x) ;
|
|
|
|
Note that "sizeof" is a unary operator which is sometimes considered as a
|
|
-langage keyword, but in no case it is a function. It does not require
|
|
+language keyword, but in no case it is a function. It does not require
|
|
parenthesis so it is sometimes followed by spaces and sometimes not when
|
|
there are no parenthesis. Most people do not really care as long as what
|
|
is written is unambiguous.
|
|
@@ -814,7 +814,7 @@ common to see such a thing :
|
|
This is wrong. The man page says that -1 is returned if an error occurred. It
|
|
does not suggest that any other negative value will be an error. It is possible
|
|
that a few such issues have been left in existing code. They are bugs for which
|
|
-fixes are accepted, eventhough they're currently harmless since open() is not
|
|
+fixes are accepted, even though they're currently harmless since open() is not
|
|
known for returning negative values at the moment.
|
|
|
|
|
|
diff --git a/doc/configuration.txt b/doc/configuration.txt
|
|
index 863508f5..e044639a 100644
|
|
--- a/doc/configuration.txt
|
|
+++ b/doc/configuration.txt
|
|
@@ -3051,7 +3051,7 @@ cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
|
|
|
|
already have a cookie that would have permitted it to access this
|
|
server. When used without the "preserve" option, if the server
|
|
- emits a cookie with the same name, it will be remove before
|
|
+ emits a cookie with the same name, it will be removed before
|
|
processing. For this reason, this mode can be used to upgrade
|
|
existing configurations running in the "rewrite" mode. The cookie
|
|
will only be a session cookie and will not be stored on the
|
|
@@ -4786,7 +4786,7 @@ http-reuse { never | safe | aggressive | always }
|
|
proving that the server correctly supports connection reuse.
|
|
It should only be used when it's sure that the client can
|
|
retry a failed request once in a while and where the benefit
|
|
- of aggressive connection reuse significantly outweights the
|
|
+ of aggressive connection reuse significantly outweighs the
|
|
downsides of rare connection failures.
|
|
|
|
- "always" : this mode is only recommended when the path to the server is
|
|
diff --git a/doc/intro.txt b/doc/intro.txt
|
|
index 7ad92db0..864fb8d6 100644
|
|
--- a/doc/intro.txt
|
|
+++ b/doc/intro.txt
|
|
@@ -1481,7 +1481,7 @@ they are mentioned here even if not directly related to HAProxy.
|
|
|
|
Apache is the de-facto standard HTTP server. It's a very complete and modular
|
|
project supporting both file serving and dynamic contents. It can serve as a
|
|
-frontend for some application servers. In can even proxy requests and cache
|
|
+frontend for some application servers. It can even proxy requests and cache
|
|
responses. In all of these use cases, a front load balancer is commonly needed.
|
|
Apache can work in various modes, some being heavier than others. Certain
|
|
modules still require the heavier pre-forked model and will prevent Apache from
|
|
diff --git a/doc/lua.txt b/doc/lua.txt
|
|
index 7b257ad8..2e266b03 100644
|
|
--- a/doc/lua.txt
|
|
+++ b/doc/lua.txt
|
|
@@ -412,7 +412,7 @@ The max amount of memory is configured with the option:
|
|
tune.lua.maxmem
|
|
|
|
As many other script languages, Lua uses a garbage collector for reusing its
|
|
-memory. The Lua developper can work without memory preoccupation. Usually, the
|
|
+memory. The Lua developer can work without memory preoccupation. Usually, the
|
|
garbage collector is controlled by the Lua core, but sometimes it will be useful
|
|
to run when the user/developer requires. So the garbage collector can be called
|
|
from C part or Lua part.
|
|
@@ -885,7 +885,7 @@ The task entry point
|
|
|
|
The function "core.register_task(fcn)" executes once the function "fcn" when the
|
|
scheduler starts. This way is used for executing background task. For example,
|
|
-you can use this functionnality for periodically checking the health of another
|
|
+you can use this functionality for periodically checking the health of another
|
|
service, and giving the result to each proxy needing it.
|
|
|
|
The task is started once, if you want periodic actions, you can use the
|
|
diff --git a/doc/management.txt b/doc/management.txt
|
|
index 1b41558a..8fdea722 100644
|
|
--- a/doc/management.txt
|
|
+++ b/doc/management.txt
|
|
@@ -1634,7 +1634,7 @@ set rate-limit ssl-sessions global <value>
|
|
|
|
set server <backend>/<server> addr <ip4 or ip6 address> [port <port>]
|
|
Replace the current IP address of a server by the one provided.
|
|
- Optionnaly, the port can be changed using the 'port' parameter.
|
|
+ Optionally, the port can be changed using the 'port' parameter.
|
|
Note that changing the port also support switching from/to port mapping
|
|
(notation with +X or -Y), only if a port is configured for the health check.
|
|
|
|
diff --git a/doc/netscaler-client-ip-insertion-protocol.txt b/doc/netscaler-client-ip-insertion-protocol.txt
|
|
index 559d98a8..dc64327a 100644
|
|
--- a/doc/netscaler-client-ip-insertion-protocol.txt
|
|
+++ b/doc/netscaler-client-ip-insertion-protocol.txt
|
|
@@ -1,4 +1,4 @@
|
|
-When NetScaler application switch is used as L3+ switch, informations
|
|
+When NetScaler application switch is used as L3+ switch, information
|
|
regarding the original IP and TCP headers are lost as a new TCP
|
|
connection is created between the NetScaler and the backend server.
|
|
|
|
diff --git a/doc/peers-v2.0.txt b/doc/peers-v2.0.txt
|
|
index a7f70dcc..02914743 100644
|
|
--- a/doc/peers-v2.0.txt
|
|
+++ b/doc/peers-v2.0.txt
|
|
@@ -275,11 +275,11 @@ if no available remote peers are found.
|
|
|
|
The chosen remote peer will push its all known data ending with a Resync Finished Message or a Resync Partial Message (if it it does not consider itself as full updated).
|
|
|
|
-If it receive a Resync Finished Message it will consider itself as fully updated and stops to ask for resync.
|
|
+If it receives a Resync Finished Message it will consider itself as fully updated and stops to ask for resync.
|
|
|
|
-If it receive a Resync Partial Message, the current peer will be flagged to anymore be requested and any other connected peer will be randomly chosen for a resync request (5s).
|
|
+If it receives a Resync Partial Message, the current peer will be flagged to anymore be requested and any other connected peer will be randomly chosen for a resync request (5s).
|
|
|
|
-If the session is broken before receiving any ot these messages any other connected peer will be randomly chosen for a resync request (5s).
|
|
+If the session is broken before receiving any of these messages any other connected peer will be randomly chosen for a resync request (5s).
|
|
|
|
If the timeout expire, the process will consider itself as fully updated
|
|
|
|
diff --git a/doc/proxy-protocol.txt b/doc/proxy-protocol.txt
|
|
index 4969180a..52d7bc71 100644
|
|
--- a/doc/proxy-protocol.txt
|
|
+++ b/doc/proxy-protocol.txt
|
|
@@ -561,7 +561,7 @@ Contains the host name value passed by the client, as an UTF8-encoded string.
|
|
In case of TLS being used on the client connection, this is the exact copy of
|
|
the "server_name" extension as defined by RFC3546 [10], section 3.1, often
|
|
referred to as "SNI". There are probably other situations where an authority
|
|
-can be mentionned on a connection without TLS being involved at all.
|
|
+can be mentioned on a connection without TLS being involved at all.
|
|
|
|
|
|
2.2.3. PP2_TYPE_CRC32C
|
|
diff --git a/doc/regression-testing.txt b/doc/regression-testing.txt
|
|
new file mode 100644
|
|
index 00000000..320c51cd
|
|
--- /dev/null
|
|
+++ b/doc/regression-testing.txt
|
|
@@ -0,0 +1,706 @@
|
|
+ +---------------------------------------+
|
|
+ | HAProxy regression testing with vtest |
|
|
+ +---------------------------------------+
|
|
+
|
|
+
|
|
+The information found in this file are a short starting guide to help you to
|
|
+write VTC (Varnish Test Case) scripts (or VTC files) for haproxy regression testing.
|
|
+Such VTC files are currently used to test Varnish cache application developed by
|
|
+Poul-Henning Kamp. A very big thanks you to him for having helped you to add
|
|
+our haproxy C modules to vtest tool. Note that vtest was formally developed for
|
|
+varnish cache reg testing and was named varnishtest. vtest is an haproxy specific
|
|
+version of varnishtest program which reuses the non varnish cache specific code.
|
|
+
|
|
+A lot of general information about how to write VTC files may be found in 'man/vtc.7'
|
|
+manual of varnish cache sources directory or directly on the web here:
|
|
+
|
|
+ https://varnish-cache.org/docs/trunk/reference/vtc.html
|
|
+
|
|
+It is *highly* recommended to read this manual before asking to haproxy ML. This
|
|
+documentation only deals with the vtest support for haproxy.
|
|
+
|
|
+
|
|
+vtest installation
|
|
+------------------------
|
|
+
|
|
+To use vtest you will have to download and compile the recent vtest
|
|
+sources found at https://github.com/vtest/VTest.
|
|
+
|
|
+To compile vtest:
|
|
+
|
|
+ $ cd VTest
|
|
+ $ make vtest
|
|
+
|
|
+Note that varnishtest may be also compiled but not without the varnish cache
|
|
+sources already compiled:
|
|
+
|
|
+ $ VARNISH_SRC=<...> make varnishtest
|
|
+
|
|
+After having compiled these sources, the vtest executable location is at the
|
|
+root of the vtest sources directory.
|
|
+
|
|
+
|
|
+vtest execution
|
|
+---------------------
|
|
+
|
|
+vtest is able to search for the haproxy executable file it is supposed to
|
|
+launch thanks to the PATH environment variable. To force the executable to be used by
|
|
+vtest, the HAPROXY_PROGRAM environment variable for vtest may be
|
|
+typically set as follows:
|
|
+
|
|
+ $ HAPROXY_PROGRAM=~/srcs/haproxy/haproxy vtest ...
|
|
+
|
|
+vtest program comes with interesting options. The most interesting are:
|
|
+
|
|
+ -t Timeout in seconds to abort the test if some launched program
|
|
+ -v By default, vtest does not dump the outputs of processus it launched
|
|
+ when the test passes. With this option the outputs are dumped even
|
|
+ when the test passes.
|
|
+ -L to always keep the temporary VTC directories.
|
|
+ -l to keep the temporary VTC directories only when the test fails.
|
|
+
|
|
+About haproxy, when launched by vtest, -d option is enabled by default.
|
|
+
|
|
+
|
|
+How to write VTC files
|
|
+----------------------
|
|
+
|
|
+A VTC file must start with a "varnishtest" or "vtest" command line followed by a
|
|
+descriptive line enclosed by double quotes. This is not specific to the VTC files
|
|
+for haproxy.
|
|
+
|
|
+The VTC files for haproxy must also contain a "feature ignore_unknown_macro" line
|
|
+if any macro is used for haproxy in this file. This is due to the fact that
|
|
+vtest parser code for haproxy commands generates macros the vtest
|
|
+parser code for varnish cache has no knowledge of. This line prevents vtest from
|
|
+failing in such cases. As a "cli" macro automatically generated, this
|
|
+"feature ignore_unknown_macro" is mandatory for each VTC file for haproxy.
|
|
+
|
|
+To make vtest capable of testing haproxy, two new VTC commands have been
|
|
+implemented: "haproxy" and "syslog". "haproxy" is used to start haproxy processus.
|
|
+"syslog" is used to start syslog servers (at this time, only used by haproxy).
|
|
+
|
|
+As haproxy cannot work without configuration file, a VTC file for haproxy must
|
|
+embed the configuration files contents for the haproxy instances it declares.
|
|
+This may be done using the following intuitive syntax construction: -conf {...}.
|
|
+Here -conf is an argument of "haproxy" VTC command to declare the configuration
|
|
+file of the haproxy instances it also declares (see "Basic HAProxy test" VTC file
|
|
+below).
|
|
+
|
|
+As for varnish VTC files, the parser of VTC files for haproxy automatically
|
|
+generates macros for the declared frontends to be reused by the clients later
|
|
+in the script, so after having written the "haproxy" command sections.
|
|
+The syntax "fd@${my_frontend_fd_name}" must be used to bind the frontend
|
|
+listeners to localhost address and random ports (see "Environment variables"
|
|
+section of haproxy documentation). This is mandatory.
|
|
+
|
|
+Each time the haproxy command parser finds a "fd@${xyz}" string in a 'ABC'
|
|
+"haproxy" command section, it generates three macros: 'ABC_xyz_addr', 'ABC_xyz_port'
|
|
+and 'ABC_xyz_sock', with 'ABC_xyz_sock' being resolved as 'ABC_xyz_addr
|
|
+ABC_xyz_port' typically used by clients -connect parameter.
|
|
+
|
|
+Each haproxy instance works in their own temporary working directories located
|
|
+at '/tmp/vtc.<varnitest PID>.XXXXXXXX/<haproxy_instance_name>' (with XXXXXXXX
|
|
+a random 8 digits hexadecimal integer. This is in this temporary directory that
|
|
+the configuration file is temporarily written.
|
|
+
|
|
+A 'stats.sock' UNIX socket is also created in this directory. There is no need
|
|
+to declare such stats sockets in the -conf {...} section. The name of the parent
|
|
+directory of the haproxy instances working directories is stored in 'tmpdir'. In
|
|
+fact this is the working directory of the current vtest processus.
|
|
+
|
|
+There also exists 'testdir' macro which is the parent directory of the VTC file.
|
|
+It may be useful to use other files located in the same directory than the current
|
|
+VTC file.
|
|
+
|
|
+
|
|
+
|
|
+VTC file examples
|
|
+-----------------
|
|
+
|
|
+The following first VTC file is a real regression test case file for a bug which has
|
|
+been fixed by 84c844e commit. We declare a basic configuration for a 'h1' haproxy
|
|
+instance.
|
|
+
|
|
+ varnishtest "SPOE bug: missing configuration file"
|
|
+
|
|
+ #commit 84c844eb12b250aa86f2aadaff77c42dfc3cb619
|
|
+ #Author: Christopher Faulet <cfaulet@haproxy.com>
|
|
+ #Date: Fri Mar 23 14:37:14 2018 +0100
|
|
+
|
|
+ # BUG/MINOR: spoe: Initialize variables used during conf parsing before any check
|
|
+
|
|
+ # Some initializations must be done at the beginning of parse_spoe_flt to avoid
|
|
+ # segmentaion fault when first errors are caught, when the "filter spoe" line is
|
|
+ # parsed.
|
|
+
|
|
+ haproxy h1 -conf-BAD {} {
|
|
+ defaults
|
|
+ timeout connect 5000ms
|
|
+ timeout client 50000ms
|
|
+ timeout server 50000ms
|
|
+
|
|
+ frontend my-front
|
|
+ filter spoe
|
|
+ }
|
|
+
|
|
+
|
|
+-conf-BAD haproxy command argument is used. Its role it to launch haproxy with
|
|
+-c option (configuration file checking) and check that 'h1' exit(3) with 1 as
|
|
+status. Here is the output when running this VTC file:
|
|
+
|
|
+
|
|
+ **** top 0.0 extmacro def pwd=/home/fred/src/haproxy
|
|
+ **** top 0.0 extmacro def localhost=127.0.0.1
|
|
+ **** top 0.0 extmacro def bad_backend=127.0.0.1 39564
|
|
+ **** top 0.0 extmacro def bad_ip=192.0.2.255
|
|
+ **** top 0.0 macro def testdir=//home/fred/src/varnish-cache-haproxy
|
|
+ **** top 0.0 macro def tmpdir=/tmp/vtc.6377.64329194
|
|
+ * top 0.0 TEST /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc starting
|
|
+ ** top 0.0 === varnishtest "SPOE bug: missing configuration file"
|
|
+ * top 0.0 TEST SPOE bug: missing configuration file
|
|
+ ** top 0.0 === haproxy h1 -conf-BAD {} {
|
|
+ **** h1 0.0 conf| global
|
|
+ **** h1 0.0 conf|\tstats socket /tmp/vtc.6377.64329194/h1/stats.sock level admin mode 600
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf|\tdefaults
|
|
+ **** h1 0.0 conf| timeout connect 5000ms
|
|
+ **** h1 0.0 conf| timeout client 50000ms
|
|
+ **** h1 0.0 conf| timeout server 50000ms
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf|\tfrontend my-front
|
|
+ **** h1 0.0 conf|\t\tfilter spoe
|
|
+ **** h1 0.0 conf|
|
|
+ ** h1 0.0 haproxy_start
|
|
+ **** h1 0.0 opt_worker 0 opt_daemon 0 opt_check_mode 1
|
|
+ **** h1 0.0 argv|exec /home/fred/src/haproxy/haproxy -c -f /tmp/vtc.6377.64329194/h1/cfg
|
|
+ **** h1 0.0 XXX 5 @277
|
|
+ *** h1 0.0 PID: 6395
|
|
+ **** h1 0.0 macro def h1_pid=6395
|
|
+ **** h1 0.0 macro def h1_name=/tmp/vtc.6377.64329194/h1
|
|
+ ** h1 0.0 Wait
|
|
+ ** h1 0.0 Stop HAproxy pid=6395
|
|
+ **** h1 0.0 STDOUT poll 0x10
|
|
+ ** h1 0.0 WAIT4 pid=6395 status=0x008b (user 0.000000 sys 0.000000)
|
|
+ * h1 0.0 Expected exit: 0x1 signal: 0 core: 0
|
|
+ ---- h1 0.0 Bad exit status: 0x008b exit 0x0 signal 11 core 128
|
|
+ * top 0.0 RESETTING after /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc
|
|
+ ** h1 0.0 Reset and free h1 haproxy 6395
|
|
+ ** h1 0.0 Wait
|
|
+ ---- h1 0.0 Assert error in haproxy_wait(), vtc_haproxy.c line 326: Condition(*(&h->fds[1]) >= 0) not true.
|
|
+
|
|
+ * top 0.0 failure during reset
|
|
+ # top TEST /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc FAILED (0.008) exit=2
|
|
+
|
|
+
|
|
+'h1' exited with (128 + 11) status and a core file was produced in
|
|
+/tmp/vtc.6377.64329194/h1 directory.
|
|
+With the patch provided by 84c844e commit, varnishtest makes this VTC file pass
|
|
+as expected (verbose mode execution):
|
|
+
|
|
+ **** top 0.0 extmacro def pwd=/home/fred/src/haproxy
|
|
+ **** top 0.0 extmacro def localhost=127.0.0.1
|
|
+ **** top 0.0 extmacro def bad_backend=127.0.0.1 42264
|
|
+ **** top 0.0 extmacro def bad_ip=192.0.2.255
|
|
+ **** top 0.0 macro def testdir=//home/fred/src/varnish-cache-haproxy
|
|
+ **** top 0.0 macro def tmpdir=/tmp/vtc.25540.59b6ec5d
|
|
+ * top 0.0 TEST /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc starting
|
|
+ ** top 0.0 === varnishtest "SPOE bug: missing configuration file"
|
|
+ * top 0.0 TEST SPOE bug: missing configuration file
|
|
+ ** top 0.0 === haproxy h1 -conf-BAD {} {
|
|
+ **** h1 0.0 conf| global
|
|
+ **** h1 0.0 conf|\tstats socket /tmp/vtc.25540.59b6ec5d/h1/stats.sock level admin mode 600
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf|\tdefaults
|
|
+ **** h1 0.0 conf| timeout connect 5000ms
|
|
+ **** h1 0.0 conf| timeout client 50000ms
|
|
+ **** h1 0.0 conf| timeout server 50000ms
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf|\tfrontend my-front
|
|
+ **** h1 0.0 conf|\t\tfilter spoe
|
|
+ **** h1 0.0 conf|
|
|
+ ** h1 0.0 haproxy_start
|
|
+ **** h1 0.0 opt_worker 0 opt_daemon 0 opt_check_mode 1
|
|
+ **** h1 0.0 argv|exec /home/fred/src/haproxy/haproxy -c -f /tmp/vtc.25540.59b6ec5d/h1/cfg
|
|
+ **** h1 0.0 XXX 5 @277
|
|
+ *** h1 0.0 PID: 25558
|
|
+ **** h1 0.0 macro def h1_pid=25558
|
|
+ **** h1 0.0 macro def h1_name=/tmp/vtc.25540.59b6ec5d/h1
|
|
+ ** h1 0.0 Wait
|
|
+ ** h1 0.0 Stop HAproxy pid=25558
|
|
+ *** h1 0.0 debug|[ALERT] 157/135318 (25558) : parsing [/tmp/vtc.25540.59b6ec5d/h1/cfg:10] : 'filter' : ''spoe' : missing config file'
|
|
+ *** h1 0.0 debug|[ALERT] 157/135318 (25558) : Error(s) found in configuration file : /tmp/vtc.25540.59b6ec5d/h1/cfg
|
|
+ *** h1 0.0 debug|[ALERT] 157/135318 (25558) : Fatal errors found in configuration.
|
|
+ **** h1 0.0 STDOUT poll 0x10
|
|
+ ** h1 0.0 WAIT4 pid=25558 status=0x0100 (user 0.000000 sys 0.000000)
|
|
+ ** h1 0.0 Found expected ''
|
|
+ * top 0.0 RESETTING after /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc
|
|
+ ** h1 0.0 Reset and free h1 haproxy -1
|
|
+ * top 0.0 TEST /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc completed
|
|
+ # top TEST /home/fred/src/varnish-cache-haproxy/spoe_bug.vtc passed (0.004)
|
|
+
|
|
+
|
|
+The following VTC file does almost nothing except running a shell to list
|
|
+the contents of 'tmpdir' directory after having launched a haproxy instance
|
|
+and 's1' HTTP server. This shell also prints the content of 'cfg' 'h1' configuration
|
|
+file.
|
|
+
|
|
+ varnishtest "List the contents of 'tmpdir'"
|
|
+ feature ignore_unknown_macro
|
|
+
|
|
+ server s1 {
|
|
+ } -start
|
|
+
|
|
+ haproxy h1 -conf {
|
|
+ defaults
|
|
+ mode http
|
|
+ timeout connect 5s
|
|
+ timeout server 30s
|
|
+ timeout client 30s
|
|
+
|
|
+ backend be1
|
|
+ server srv1 ${s1_addr}:${s1_port}
|
|
+
|
|
+ frontend http1
|
|
+ use_backend be1
|
|
+ bind "fd@${my_frontend_fd}"
|
|
+ } -start
|
|
+
|
|
+ shell {
|
|
+ echo "${tmpdir} working directory content:"
|
|
+ ls -lR ${tmpdir}
|
|
+ cat ${tmpdir}/h1/cfg
|
|
+ }
|
|
+
|
|
+We give only the output of the shell to illustrate this example:
|
|
+
|
|
+ .
|
|
+ .
|
|
+ .
|
|
+ ** top 0.0 === shell {
|
|
+ **** top 0.0 shell_cmd|exec 2>&1 ;
|
|
+ **** top 0.0 shell_cmd| echo "tmpdir: /tmp/vtc.32092.479d521e"
|
|
+ **** top 0.0 shell_cmd| ls -lR /tmp/vtc.32092.479d521e
|
|
+ **** top 0.0 shell_cmd| cat /tmp/vtc.32092.479d521e/h1/cfg
|
|
+ .
|
|
+ .
|
|
+ .
|
|
+ **** top 0.0 shell_out|/tmp/vtc.3808.448cbfe0 working directory content:
|
|
+ **** top 0.0 shell_out|/tmp/vtc.32092.479d521e:
|
|
+ **** top 0.0 shell_out|total 8
|
|
+ **** top 0.0 shell_out|drwxr-xr-x 2 users 4096 Jun 7 11:09 h1
|
|
+ **** top 0.0 shell_out|-rw-r--r-- 1 me users 84 Jun 7 11:09 INFO
|
|
+ **** top 0.0 shell_out|
|
|
+ **** top 0.0 shell_out|/tmp/vtc.32092.479d521e/h1:
|
|
+ **** top 0.0 shell_out|total 4
|
|
+ **** top 0.0 shell_out|-rw-r----- 1 fred users 339 Jun 7 11:09 cfg
|
|
+ **** top 0.0 shell_out|srw------- 1 fred users 0 Jun 7 11:09 stats.sock
|
|
+ **** top 0.0 shell_out| global
|
|
+ **** top 0.0 shell_out|\tstats socket /tmp/vtc.32092.479d521e/h1/stats.sock level admin mode 600
|
|
+ **** top 0.0 shell_out|
|
|
+ **** top 0.0 shell_out| defaults
|
|
+ **** top 0.0 shell_out| mode http
|
|
+ **** top 0.0 shell_out| timeout connect 5s
|
|
+ **** top 0.0 shell_out| timeout server 30s
|
|
+ **** top 0.0 shell_out| timeout client 30s
|
|
+ **** top 0.0 shell_out|
|
|
+ **** top 0.0 shell_out| backend be1
|
|
+ **** top 0.0 shell_out| server srv1 127.0.0.1:36984
|
|
+ **** top 0.0 shell_out|
|
|
+ **** top 0.0 shell_out| frontend http1
|
|
+ **** top 0.0 shell_out| use_backend be1
|
|
+ **** top 0.0 shell_out| bind "fd@${my_frontend_fd}"
|
|
+ **** top 0.0 shell_status = 0x0000
|
|
+
|
|
+
|
|
+The following example illustrate how to run a basic HTTP transaction between 'c1'
|
|
+client and 's1' server with 'http1' as haproxy frontend. This frontend listen
|
|
+on TCP socket with 'my_frontend_fd' as file descriptor.
|
|
+
|
|
+ # Mandatory line
|
|
+ varnishtest "Basic HAproxy test"
|
|
+
|
|
+ # As some macros for haproxy are used in this file, this line is mandatory.
|
|
+ feature ignore_unknown_macro
|
|
+
|
|
+ server s1 {
|
|
+ rxreq
|
|
+ txresp -body "s1 >>> Hello world!"
|
|
+ } -start
|
|
+
|
|
+ haproxy h1 -conf {
|
|
+ # Configuration file of 'h1' haproxy instance.
|
|
+ defaults
|
|
+ mode http
|
|
+ timeout connect 5s
|
|
+ timeout server 30s
|
|
+ timeout client 30s
|
|
+
|
|
+ backend be1
|
|
+ # declare 'srv1' server to point to 's1' server instance declare above.
|
|
+ server srv1 ${s1_addr}:${s1_port}
|
|
+
|
|
+ frontend http1
|
|
+ use_backend be1
|
|
+ bind "fd@${my_frontend_fd}"
|
|
+ } -start
|
|
+
|
|
+ client c1 -connect ${h1_my_frontend_fd_sock} {
|
|
+ txreq -url "/"
|
|
+ rxresp
|
|
+ expect resp.status == 200
|
|
+ expect resp.body == "s1 >>> Hello world!"
|
|
+ } -run
|
|
+
|
|
+
|
|
+It is possible to shorten the previous VTC file haproxy command section as follows:
|
|
+
|
|
+ haproxy h1 -conf {
|
|
+ # Configuration file of 'h1' haproxy instance.
|
|
+ defaults
|
|
+ mode http
|
|
+ timeout connect 5s
|
|
+ timeout server 30s
|
|
+ timeout client 30s
|
|
+ }
|
|
+
|
|
+In this latter example, "backend" and "frontend" sections are automatically
|
|
+generated depending on the declarations of server instances.
|
|
+
|
|
+
|
|
+Another interesting real regression test case is the following: we declare one
|
|
+server 's1', a syslog server 'Slg_1' and a basic haproxy configuration for 'h1'
|
|
+haproxy instance. Here we want to check that the syslog message are correctly
|
|
+formatted thanks to "expect" "syslog" command (see syslog Slg_1 {...} command)
|
|
+below.
|
|
+
|
|
+ varnishtest "Wrong ip/port logging"
|
|
+ feature ignore_unknown_macro
|
|
+
|
|
+ #commit d02286d6c866e5c0a7eb6fbb127fa57f3becaf16
|
|
+ #Author: Willy Tarreau <w@1wt.eu>
|
|
+ #Date: Fri Jun 23 11:23:43 2017 +0200
|
|
+ #
|
|
+ # BUG/MINOR: log: pin the front connection when front ip/ports are logged
|
|
+ #
|
|
+ # Mathias Weiersmueller reported an interesting issue with logs which Lukas
|
|
+ # diagnosed as dating back from commit 9b061e332 (1.5-dev9). When front
|
|
+ # connection information (ip, port) are logged in TCP mode and the log is
|
|
+ # emitted at the end of the connection (eg: because %B or any log tag
|
|
+ # requiring LW_BYTES is set), the log is emitted after the connection is
|
|
+ # closed, so the address and ports cannot be retrieved anymore.
|
|
+ #
|
|
+ # It could be argued that we'd make a special case of these to immediately
|
|
+ # retrieve the source and destination addresses from the connection, but it
|
|
+ # seems cleaner to simply pin the front connection, marking it "tracked" by
|
|
+ # adding the LW_XPRT flag to mention that we'll need some of these elements
|
|
+ # at the last moment. Only LW_FRTIP and LW_CLIP are affected. Note that after
|
|
+ # this change, LW_FRTIP could simply be removed as it's not used anywhere.
|
|
+
|
|
+ # Note that the problem doesn't happen when using %[src] or %[dst] since
|
|
+ # all sample expressions set LW_XPRT.
|
|
+
|
|
+
|
|
+ server s1 {
|
|
+ rxreq
|
|
+ txresp
|
|
+ } -start
|
|
+
|
|
+ syslog Slg_1 -level notice {
|
|
+ recv
|
|
+ recv
|
|
+ recv info
|
|
+ expect ~ \"dip\":\"${h1_fe_1_addr}\",\"dport\":\"${h1_fe_1_port}.*\"ts\":\"cD\",\"
|
|
+ } -start
|
|
+
|
|
+ haproxy h1 -conf {
|
|
+ global
|
|
+ log ${Slg_1_addr}:${Slg_1_port} local0
|
|
+
|
|
+ defaults
|
|
+ log global
|
|
+ timeout connect 3000
|
|
+ timeout client 5
|
|
+ timeout server 10000
|
|
+
|
|
+ frontend fe1
|
|
+ bind "fd@${fe_1}"
|
|
+ mode tcp
|
|
+ log-format {\"dip\":\"%fi\",\"dport\":\"%fp\",\"c_ip\":\"%ci\",\"c_port\":\"%cp\",\"fe_name\":\"%ft\",\"be_name\":\"%b\",\"s_name\":\"%s\",\"ts\":\"%ts\",\"bytes_read\":\"%B\"}
|
|
+ default_backend be_app
|
|
+
|
|
+ backend be_app
|
|
+ server app1 ${s1_addr}:${s1_port} check
|
|
+ } -start
|
|
+
|
|
+ client c1 -connect ${h1_fe_1_sock} {
|
|
+ txreq -url "/"
|
|
+ delay 0.02
|
|
+ } -run
|
|
+
|
|
+ syslog Slg_1 -wait
|
|
+
|
|
+
|
|
+Here is the output produced by varnishtest with the latter VTC file:
|
|
+
|
|
+ **** top 0.0 extmacro def pwd=/home/fred/src/haproxy
|
|
+ **** top 0.0 extmacro def localhost=127.0.0.1
|
|
+ **** top 0.0 extmacro def bad_backend=127.0.0.1 40386
|
|
+ **** top 0.0 extmacro def bad_ip=192.0.2.255
|
|
+ **** top 0.0 macro def testdir=//home/fred/src/varnish-cache-haproxy
|
|
+ **** top 0.0 macro def tmpdir=/tmp/vtc.15752.560ca66b
|
|
+ * top 0.0 TEST /home/fred/src/varnish-cache-haproxy/d02286d.vtc starting
|
|
+ ** top 0.0 === varnishtest "HAPEE bug 2788"
|
|
+ * top 0.0 TEST HAPEE bug 2788
|
|
+ ** top 0.0 === feature ignore_unknown_macro
|
|
+ ** top 0.0 === server s1 {
|
|
+ ** s1 0.0 Starting server
|
|
+ **** s1 0.0 macro def s1_addr=127.0.0.1
|
|
+ **** s1 0.0 macro def s1_port=35564
|
|
+ **** s1 0.0 macro def s1_sock=127.0.0.1 35564
|
|
+ * s1 0.0 Listen on 127.0.0.1 35564
|
|
+ ** top 0.0 === syslog Slg_1 -level notice {
|
|
+ ** Slg_1 0.0 Starting syslog server
|
|
+ ** s1 0.0 Started on 127.0.0.1 35564
|
|
+ **** Slg_1 0.0 macro def Slg_1_addr=127.0.0.1
|
|
+ **** Slg_1 0.0 macro def Slg_1_port=33012
|
|
+ **** Slg_1 0.0 macro def Slg_1_sock=127.0.0.1 33012
|
|
+ * Slg_1 0.0 Bound on 127.0.0.1 33012
|
|
+ ** top 0.0 === haproxy h1 -conf {
|
|
+ ** Slg_1 0.0 Started on 127.0.0.1 33012 (level: 5)
|
|
+ ** Slg_1 0.0 === recv
|
|
+ **** h1 0.0 macro def h1_fe_1_sock=::1 51782
|
|
+ **** h1 0.0 macro def h1_fe_1_addr=::1
|
|
+ **** h1 0.0 macro def h1_fe_1_port=51782
|
|
+ **** h1 0.0 setenv(fe_1, 7)
|
|
+ **** h1 0.0 conf| global
|
|
+ **** h1 0.0 conf|\tstats socket /tmp/vtc.15752.560ca66b/h1/stats.sock level admin mode 600
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| global
|
|
+ **** h1 0.0 conf| log 127.0.0.1:33012 local0
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| defaults
|
|
+ **** h1 0.0 conf| log global
|
|
+ **** h1 0.0 conf| timeout connect 3000
|
|
+ **** h1 0.0 conf| timeout client 5
|
|
+ **** h1 0.0 conf| timeout server 10000
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| frontend fe1
|
|
+ **** h1 0.0 conf| bind "fd@${fe_1}"
|
|
+ **** h1 0.0 conf| mode tcp
|
|
+ **** h1 0.0 conf| log-format {\"dip\":\"%fi\",\"dport\":\"%fp\",\"c_ip\":\"%ci\",\"c_port\":\"%cp\",\"fe_name\":\"%ft\",\"be_name\":\"%b\",\"s_name\":\"%s\",\"ts\":\"%ts\",\"bytes_read\":\"%B\"}
|
|
+ **** h1 0.0 conf| default_backend be_app
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| backend be_app
|
|
+ **** h1 0.0 conf| server app1 127.0.0.1:35564 check
|
|
+ ** h1 0.0 haproxy_start
|
|
+ **** h1 0.0 opt_worker 0 opt_daemon 0 opt_check_mode 0
|
|
+ **** h1 0.0 argv|exec /home/fred/src/haproxy/haproxy -d -f /tmp/vtc.15752.560ca66b/h1/cfg
|
|
+ **** h1 0.0 XXX 9 @277
|
|
+ *** h1 0.0 PID: 15787
|
|
+ **** h1 0.0 macro def h1_pid=15787
|
|
+ **** h1 0.0 macro def h1_name=/tmp/vtc.15752.560ca66b/h1
|
|
+ ** top 0.0 === client c1 -connect ${h1_fe_1_sock} {
|
|
+ ** c1 0.0 Starting client
|
|
+ ** c1 0.0 Waiting for client
|
|
+ *** c1 0.0 Connect to ::1 51782
|
|
+ *** c1 0.0 connected fd 8 from ::1 46962 to ::1 51782
|
|
+ ** c1 0.0 === txreq -url "/"
|
|
+ **** c1 0.0 txreq|GET / HTTP/1.1\r
|
|
+ **** c1 0.0 txreq|Host: 127.0.0.1\r
|
|
+ **** c1 0.0 txreq|\r
|
|
+ ** c1 0.0 === delay 0.02
|
|
+ *** c1 0.0 delaying 0.02 second(s)
|
|
+ *** h1 0.0 debug|Note: setting global.maxconn to 2000.
|
|
+ *** h1 0.0 debug|Available polling systems :
|
|
+ *** h1 0.0 debug| epoll :
|
|
+ *** h1 0.0 debug|pref=300,
|
|
+ *** h1 0.0 debug| test result OK
|
|
+ *** h1 0.0 debug| poll : pref=200, test result OK
|
|
+ *** h1 0.0 debug| select :
|
|
+ *** h1 0.0 debug|pref=150, test result FAILED
|
|
+ *** h1 0.0 debug|Total: 3 (2 usable), will use epoll.
|
|
+ *** h1 0.0 debug|
|
|
+ *** h1 0.0 debug|Available filters :
|
|
+ *** h1 0.0 debug|\t[SPOE] spoe
|
|
+ *** h1 0.0 debug|\t[COMP] compression
|
|
+ *** h1 0.0 debug|\t[TRACE] trace
|
|
+ **** Slg_1 0.0 syslog|<133>Jun 7 14:12:51 haproxy[15787]: Proxy fe1 started.
|
|
+ ** Slg_1 0.0 === recv
|
|
+ **** Slg_1 0.0 syslog|<133>Jun 7 14:12:51 haproxy[15787]: Proxy be_app started.
|
|
+ ** Slg_1 0.0 === recv info
|
|
+ *** h1 0.0 debug|00000000:fe1.accept(0007)=000a from [::1:46962]
|
|
+ *** s1 0.0 accepted fd 6 127.0.0.1 56770
|
|
+ ** s1 0.0 === rxreq
|
|
+ **** s1 0.0 rxhdr|GET / HTTP/1.1\r
|
|
+ **** s1 0.0 rxhdr|Host: 127.0.0.1\r
|
|
+ **** s1 0.0 rxhdr|\r
|
|
+ **** s1 0.0 rxhdrlen = 35
|
|
+ **** s1 0.0 http[ 0] |GET
|
|
+ **** s1 0.0 http[ 1] |/
|
|
+ **** s1 0.0 http[ 2] |HTTP/1.1
|
|
+ **** s1 0.0 http[ 3] |Host: 127.0.0.1
|
|
+ **** s1 0.0 bodylen = 0
|
|
+ ** s1 0.0 === txresp
|
|
+ **** s1 0.0 txresp|HTTP/1.1 200 OK\r
|
|
+ **** s1 0.0 txresp|Content-Length: 0\r
|
|
+ **** s1 0.0 txresp|\r
|
|
+ *** s1 0.0 shutting fd 6
|
|
+ ** s1 0.0 Ending
|
|
+ *** h1 0.0 debug|00000000:be_app.srvcls[000a:000c]
|
|
+ *** h1 0.0 debug|00000000:be_app.clicls[000a:000c]
|
|
+ *** h1 0.0 debug|00000000:be_app.closed[000a:000c]
|
|
+ **** Slg_1 0.0 syslog|<134>Jun 7 14:12:51 haproxy[15787]: {"dip":"","dport":"0","c_ip":"::1","c_port":"46962","fe_name":"fe1","be_name":"be_app","s_name":"app1","ts":"cD","bytes_read":"38"}
|
|
+ ** Slg_1 0.0 === expect ~ \"dip\":\"${h1_fe_1_addr}\",\"dport\":\"${h1_fe_1_p...
|
|
+ ---- Slg_1 0.0 EXPECT FAILED ~ "\"dip\":\"::1\",\"dport\":\"51782.*\"ts\":\"cD\",\""
|
|
+ *** c1 0.0 closing fd 8
|
|
+ ** c1 0.0 Ending
|
|
+ * top 0.0 RESETTING after /home/fred/src/varnish-cache-haproxy/d02286d.vtc
|
|
+ ** h1 0.0 Reset and free h1 haproxy 15787
|
|
+ ** h1 0.0 Wait
|
|
+ ** h1 0.0 Stop HAproxy pid=15787
|
|
+ **** h1 0.0 Kill(2)=0: Success
|
|
+ **** h1 0.0 STDOUT poll 0x10
|
|
+ ** h1 0.1 WAIT4 pid=15787 status=0x0002 (user 0.000000 sys 0.004000)
|
|
+ ** s1 0.1 Waiting for server (4/-1)
|
|
+ ** Slg_1 0.1 Waiting for syslog server (5)
|
|
+ * top 0.1 TEST /home/fred/src/varnish-cache-haproxy/d02286d.vtc FAILED
|
|
+ # top TEST /home/fred/src/varnish-cache-haproxy/d02286d.vtc FAILED (0.131) exit=2
|
|
+
|
|
+This test does not pass without the bug fix of d02286d commit. Indeed the third syslog
|
|
+message received by 'Slg_1' syslog server does not match the regular expression
|
|
+of the "syslog" "expect" command:
|
|
+
|
|
+ expect ~ \"dip\":\"${h1_fe_1_addr}\",\"dport\":\"${h1_fe_1_port}.*\"ts\":\"cD\",\"
|
|
+
|
|
+(the IP address and port are missing), contrary to what happens with the correct bug fix:
|
|
+
|
|
+ **** top 0.0 extmacro def pwd=/home/fred/src/haproxy
|
|
+ **** top 0.0 extmacro def localhost=127.0.0.1
|
|
+ **** top 0.0 extmacro def bad_backend=127.0.0.1 37284
|
|
+ **** top 0.0 extmacro def bad_ip=192.0.2.255
|
|
+ **** top 0.0 macro def testdir=//home/fred/src/varnish-cache-haproxy
|
|
+ **** top 0.0 macro def tmpdir=/tmp/vtc.12696.186b28b0
|
|
+ * top 0.0 TEST /home/fred/src/varnish-cache-haproxy/d02286d.vtc starting
|
|
+ ** top 0.0 === varnishtest "HAPEE bug 2788"
|
|
+ * top 0.0 TEST HAPEE bug 2788
|
|
+ ** top 0.0 === feature ignore_unknown_macro
|
|
+ ** top 0.0 === server s1 {
|
|
+ ** s1 0.0 Starting server
|
|
+ **** s1 0.0 macro def s1_addr=127.0.0.1
|
|
+ **** s1 0.0 macro def s1_port=53384
|
|
+ **** s1 0.0 macro def s1_sock=127.0.0.1 53384
|
|
+ * s1 0.0 Listen on 127.0.0.1 53384
|
|
+ ** top 0.0 === syslog Slg_1 -level notice {
|
|
+ ** Slg_1 0.0 Starting syslog server
|
|
+ **** Slg_1 0.0 macro def Slg_1_addr=127.0.0.1
|
|
+ ** s1 0.0 Started on 127.0.0.1 53384
|
|
+ **** Slg_1 0.0 macro def Slg_1_port=36195
|
|
+ **** Slg_1 0.0 macro def Slg_1_sock=127.0.0.1 36195
|
|
+ * Slg_1 0.0 Bound on 127.0.0.1 36195
|
|
+ ** top 0.0 === haproxy h1 -conf {
|
|
+ ** Slg_1 0.0 Started on 127.0.0.1 36195 (level: 5)
|
|
+ ** Slg_1 0.0 === recv
|
|
+ **** h1 0.0 macro def h1_fe_1_sock=::1 39264
|
|
+ **** h1 0.0 macro def h1_fe_1_addr=::1
|
|
+ **** h1 0.0 macro def h1_fe_1_port=39264
|
|
+ **** h1 0.0 setenv(fe_1, 7)
|
|
+ **** h1 0.0 conf| global
|
|
+ **** h1 0.0 conf|\tstats socket /tmp/vtc.12696.186b28b0/h1/stats.sock level admin mode 600
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| global
|
|
+ **** h1 0.0 conf| log 127.0.0.1:36195 local0
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| defaults
|
|
+ **** h1 0.0 conf| log global
|
|
+ **** h1 0.0 conf| timeout connect 3000
|
|
+ **** h1 0.0 conf| timeout client 5
|
|
+ **** h1 0.0 conf| timeout server 10000
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| frontend fe1
|
|
+ **** h1 0.0 conf| bind "fd@${fe_1}"
|
|
+ **** h1 0.0 conf| mode tcp
|
|
+ **** h1 0.0 conf| log-format {\"dip\":\"%fi\",\"dport\":\"%fp\",\"c_ip\":\"%ci\",\"c_port\":\"%cp\",\"fe_name\":\"%ft\",\"be_name\":\"%b\",\"s_name\":\"%s\",\"ts\":\"%ts\",\"bytes_read\":\"%B\"}
|
|
+ **** h1 0.0 conf| default_backend be_app
|
|
+ **** h1 0.0 conf|
|
|
+ **** h1 0.0 conf| backend be_app
|
|
+ **** h1 0.0 conf| server app1 127.0.0.1:53384 check
|
|
+ ** h1 0.0 haproxy_start
|
|
+ **** h1 0.0 opt_worker 0 opt_daemon 0 opt_check_mode 0
|
|
+ **** h1 0.0 argv|exec /home/fred/src/haproxy/haproxy -d -f /tmp/vtc.12696.186b28b0/h1/cfg
|
|
+ **** h1 0.0 XXX 9 @277
|
|
+ *** h1 0.0 PID: 12728
|
|
+ **** h1 0.0 macro def h1_pid=12728
|
|
+ **** h1 0.0 macro def h1_name=/tmp/vtc.12696.186b28b0/h1
|
|
+ ** top 0.0 === client c1 -connect ${h1_fe_1_sock} {
|
|
+ ** c1 0.0 Starting client
|
|
+ ** c1 0.0 Waiting for client
|
|
+ *** c1 0.0 Connect to ::1 39264
|
|
+ *** c1 0.0 connected fd 8 from ::1 41245 to ::1 39264
|
|
+ ** c1 0.0 === txreq -url "/"
|
|
+ **** c1 0.0 txreq|GET / HTTP/1.1\r
|
|
+ **** c1 0.0 txreq|Host: 127.0.0.1\r
|
|
+ **** c1 0.0 txreq|\r
|
|
+ ** c1 0.0 === delay 0.02
|
|
+ *** c1 0.0 delaying 0.02 second(s)
|
|
+ *** h1 0.0 debug|Note: setting global.maxconn to 2000.
|
|
+ *** h1 0.0 debug|Available polling systems :
|
|
+ *** h1 0.0 debug| epoll : pref=300,
|
|
+ *** h1 0.0 debug| test result OK
|
|
+ *** h1 0.0 debug| poll : pref=200, test result OK
|
|
+ *** h1 0.0 debug| select : pref=150, test result FAILED
|
|
+ *** h1 0.0 debug|Total: 3 (2 usable), will use epoll.
|
|
+ *** h1 0.0 debug|
|
|
+ *** h1 0.0 debug|Available filters :
|
|
+ *** h1 0.0 debug|\t[SPOE] spoe
|
|
+ *** h1 0.0 debug|\t[COMP] compression
|
|
+ *** h1 0.0 debug|\t[TRACE] trace
|
|
+ *** h1 0.0 debug|Using epoll() as the polling mechanism.
|
|
+ **** Slg_1 0.0 syslog|<133>Jun 7 14:10:18 haproxy[12728]: Proxy fe1 started.
|
|
+ ** Slg_1 0.0 === recv
|
|
+ **** Slg_1 0.0 syslog|<133>Jun 7 14:10:18 haproxy[12728]: Proxy be_app started.
|
|
+ ** Slg_1 0.0 === recv info
|
|
+ *** h1 0.0 debug|00000000:fe1.accept(0007)=000c from [::1:41245] ALPN=<none>
|
|
+ *** s1 0.0 accepted fd 6 127.0.0.1 49946
|
|
+ ** s1 0.0 === rxreq
|
|
+ **** s1 0.0 rxhdr|GET / HTTP/1.1\r
|
|
+ **** s1 0.0 rxhdr|Host: 127.0.0.1\r
|
|
+ **** s1 0.0 rxhdr|\r
|
|
+ **** s1 0.0 rxhdrlen = 35
|
|
+ **** s1 0.0 http[ 0] |GET
|
|
+ **** s1 0.0 http[ 1] |/
|
|
+ **** s1 0.0 http[ 2] |HTTP/1.1
|
|
+ **** s1 0.0 http[ 3] |Host: 127.0.0.1
|
|
+ **** s1 0.0 bodylen = 0
|
|
+ ** s1 0.0 === txresp
|
|
+ **** s1 0.0 txresp|HTTP/1.1 200 OK\r
|
|
+ **** s1 0.0 txresp|Content-Length: 0\r
|
|
+ **** s1 0.0 txresp|\r
|
|
+ *** s1 0.0 shutting fd 6
|
|
+ ** s1 0.0 Ending
|
|
+ *** h1 0.0 debug|00000000:be_app.srvcls[000c:adfd]
|
|
+ *** h1 0.0 debug|00000000:be_app.clicls[000c:adfd]
|
|
+ *** h1 0.0 debug|00000000:be_app.closed[000c:adfd]
|
|
+ **** Slg_1 0.0 syslog|<134>Jun 7 14:10:18 haproxy[12728]: {"dip":"::1","dport":"39264","c_ip":"::1","c_port":"41245","fe_name":"fe1","be_name":"be_app","s_name":"app1","ts":"cD","bytes_read":"38"}
|
|
+ ** Slg_1 0.0 === expect ~ \"dip\":\"${h1_fe_1_addr}\",\"dport\":\"${h1_fe_1_p...
|
|
+ **** Slg_1 0.0 EXPECT MATCH ~ "\"dip\":\"::1\",\"dport\":\"39264.*\"ts\":\"cD\",\""
|
|
+ *** Slg_1 0.0 shutting fd 5
|
|
+ ** Slg_1 0.0 Ending
|
|
+ *** c1 0.0 closing fd 8
|
|
+ ** c1 0.0 Ending
|
|
+ ** top 0.0 === syslog Slg_1 -wait
|
|
+ ** Slg_1 0.0 Waiting for syslog server (-1)
|
|
+ * top 0.0 RESETTING after /home/fred/src/varnish-cache-haproxy/d02286d.vtc
|
|
+ ** h1 0.0 Reset and free h1 haproxy 12728
|
|
+ ** h1 0.0 Wait
|
|
+ ** h1 0.0 Stop HAproxy pid=12728
|
|
+ **** h1 0.0 Kill(2)=0: Success
|
|
+ **** h1 0.0 STDOUT poll 0x10
|
|
+ ** h1 0.1 WAIT4 pid=12728 status=0x0002 (user 0.000000 sys 0.004000)
|
|
+ ** s1 0.1 Waiting for server (4/-1)
|
|
+ * top 0.1 TEST /home/fred/src/varnish-cache-haproxy/d02286d.vtc completed
|
|
+ # top TEST /home/fred/src/varnish-cache-haproxy/d02286d.vtc passed (0.128)
|
|
+
|
|
+In this latter execution the third syslog message is correct:
|
|
+
|
|
+ **** Slg_1 0.0 syslog|<134>Jun 7 14:10:18 haproxy[12728]: {"dip":"::1","dport":"39264","c_ip":"::1","c_port":"41245","fe_name":"fe1","be_name":"be_app","s_name":"app1","ts":"cD","bytes_read":"38"}
|