]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REGTEST: Add a new reg test for log load-balancing feature.
authorFrédéric Lécaille <flecaille@haproxy.com>
Thu, 25 Apr 2019 18:14:43 +0000 (20:14 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 30 Apr 2019 07:25:09 +0000 (09:25 +0200)
This is a reg test for the log load-balancing feature implemented by
these commits:
  MINOR: log: Add "sample" new keyword to "log" lines
  MINOR: log: Enable the log sampling and load-balancing feature

The size of the logging buffer for vtest has been doubled to support this script.

reg-tests/log/load_balancing.vtc [new file with mode: 0644]
scripts/run-regtests.sh

diff --git a/reg-tests/log/load_balancing.vtc b/reg-tests/log/load_balancing.vtc
new file mode 100644 (file)
index 0000000..765ce61
--- /dev/null
@@ -0,0 +1,161 @@
+varnishtest "Basic log load-balancing test"
+feature ignore_unknown_macro
+
+#REQUIRE_VERSION=2.0
+
+barrier b1 cond 2 -cyclic
+barrier b2 cond 2 -cyclic
+barrier b3 cond 2 -cyclic
+barrier b4 cond 2 -cyclic
+barrier b5 cond 2 -cyclic
+
+server s1 {
+    rxreq
+       txresp
+} -repeat 500 -start
+
+syslog Slg_1 -level info {
+    recv
+       expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c1 HTTP/1.1\""
+    recv
+       expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c2 HTTP/1.1\""
+    recv
+       expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c3 HTTP/1.1\""
+    recv
+       expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c4 HTTP/1.1\""
+    recv
+       expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c5 HTTP/1.1\""
+} -repeat 50 -start
+
+# Here are the syslog messages received by Slg_2:
+syslog Slg_2 -level info {
+    recv
+    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c7 HTTP/1.1\""
+    recv
+    expect ~ "[^:\\[ ]\\[${h1_pid}\\]: .* \"GET /client_c10 HTTP/1.1\""
+} -repeat 50 -start
+
+haproxy h1 -conf {
+       global
+               nbthread 1
+
+       defaults
+               mode http
+               option httplog
+               timeout connect 1000
+               timeout client  1000
+               timeout server  1000
+
+       frontend fe1
+               bind "fd@${fe_1}"
+               log ${Slg_1_addr}:${Slg_1_port} local0
+               default_backend be
+
+       frontend fe2
+               bind "fd@${fe_2}"
+               log ${Slg_2_addr}:${Slg_2_port} sample 1,3:5 local0
+               default_backend be
+
+       backend be
+               server app1 ${s1_addr}:${s1_port}
+} -start
+
+# The following client are started in background and synchronized
+client c1 -connect ${h1_fe_1_sock} {
+    txreq -url "/client_c1"
+    rxresp
+    expect resp.status == 200
+    barrier b1 sync
+    barrier b5 sync
+} -repeat 50 -start
+
+client c2 -connect ${h1_fe_1_sock} {
+    barrier b1 sync
+    txreq -url "/client_c2"
+    rxresp
+    expect resp.status == 200
+    barrier b2 sync
+} -repeat 50 -start
+
+client c3 -connect ${h1_fe_1_sock} {
+    barrier b2 sync
+    txreq -url "/client_c3"
+    rxresp
+    expect resp.status == 200
+    barrier b3 sync
+} -repeat 50 -start
+
+client c4 -connect ${h1_fe_1_sock} {
+    barrier b3 sync
+    txreq -url "/client_c4"
+    rxresp
+    expect resp.status == 200
+    barrier b4 sync
+} -repeat 50 -start
+
+client c5 -connect ${h1_fe_1_sock} {
+    barrier b4 sync
+    txreq -url "/client_c5"
+    rxresp
+    expect resp.status == 200
+    barrier b5 sync
+} -repeat 50 -start
+
+syslog Slg_1 -wait
+
+client c1 -wait
+client c2 -wait
+client c3 -wait
+client c4 -wait
+client c5 -wait
+
+# Same test as before but with fe2 frontend.
+# The following client are started in background and synchronized
+client c6 -connect ${h1_fe_2_sock} {
+    txreq -url "/client_c6"
+    rxresp
+    expect resp.status == 200
+    barrier b1 sync
+    barrier b5 sync
+} -repeat 50 -start
+
+client c7 -connect ${h1_fe_2_sock} {
+    barrier b1 sync
+    txreq -url "/client_c7"
+    rxresp
+    expect resp.status == 200
+    barrier b2 sync
+} -repeat 50 -start
+
+client c8 -connect ${h1_fe_2_sock} {
+    barrier b2 sync
+    txreq -url "/client_c8"
+    rxresp
+    expect resp.status == 200
+    barrier b3 sync
+} -repeat 50 -start
+
+client c9 -connect ${h1_fe_2_sock} {
+    barrier b3 sync
+    txreq -url "/client_c9"
+    rxresp
+    expect resp.status == 200
+    barrier b4 sync
+} -repeat 50 -start
+
+client c10 -connect ${h1_fe_2_sock} {
+    barrier b4 sync
+    txreq -url "/client_c10"
+    rxresp
+    expect resp.status == 200
+    barrier b5 sync
+} -repeat 50 -start
+
+syslog Slg_2 -wait
+
+client c6 -wait
+client c7 -wait
+client c8 -wait
+client c9 -wait
+client c10 -wait
+
index 10f29e408bdc1db2fadcbee7f17ec192b2ef76f2..ccfdd601acf4fb03e4819b8e87722b01eab74f1a 100755 (executable)
@@ -346,7 +346,7 @@ if [ -n "$testlist" ]; then
   if [ -n "$jobcount" ]; then
     jobcount="-j $jobcount"
   fi
-  cmd="$VTEST_PROGRAM -k -t 10 -Dno-htx=${no_htx} $keep_logs $verbose $debug $jobcount $vtestparams $testlist"
+  cmd="$VTEST_PROGRAM -b $((2<<20)) -k -t 10 -Dno-htx=${no_htx} $keep_logs $verbose $debug $jobcount $vtestparams $testlist"
   eval $cmd
   _vtresult=$?
 else