haproxy/reg-tests/server/cli_delete_dynamic_server.vtc
Amaury Denoyelle 14c3c5c121 MEDIUM: server: allow to remove servers at runtime except non purgeable
Relax the condition on "delete server" CLI handler to be able to remove
all servers, even non dynamic, except if they are flagged as non
purgeable.

This change is necessary to extend the use cases for dynamic servers
with reload. It's expected that each dynamic server created via the CLI
is manually commited in the haproxy configuration by the user. Dynamic
servers will be present on reload only if they are present in the
configuration file. This means that non-dynamic servers must be allowed
to be removable at runtime.

The dynamic servers removal reg-test has been updated and renamed to
reflect its purpose. A new test is present to check that non-purgeable
servers cannot be removed.
2021-08-25 15:53:54 +02:00

99 lines
2.0 KiB
Plaintext

# This script is to test the proper behavior with dynamic servers insertion and
# deletion, in particular with the load-balancing of requests.
#
varnishtest "Delete server via cli"
feature ignore_unknown_macro
#REQUIRE_VERSION=2.4
# static server
server s1 -repeat 3 {
rxreq
txresp \
-body "resp from s1"
} -start
# use as a dynamic server, added then deleted via CLI
server s2 -repeat 3 {
rxreq
txresp \
-body "resp from s2"
} -start
haproxy h1 -conf {
defaults
mode http
timeout connect 1s
timeout client 1s
timeout server 1s
frontend fe
bind "fd@${feS}"
default_backend test
backend test
server s1 ${s1_addr}:${s1_port}
} -start
# add a new dynamic server to be able to delete it then
haproxy h1 -cli {
# add a dynamic server and enable it
send "experimental-mode on; add server test/s2 ${s2_addr}:${s2_port}"
expect ~ "New server registered."
send "enable server test/s2"
expect ~ ".*"
}
haproxy h1 -cli {
# experimental mode disabled
send "del server test/s1"
expect ~ "This command is restricted to experimental mode only."
# non existent backend
send "experimental-mode on; del server foo/s1"
expect ~ "No such backend."
# non existent server
send "experimental-mode on; del server test/other"
expect ~ "No such server."
}
# first check that both servers are active
client c1 -connect ${h1_feS_sock} {
txreq
rxresp
expect resp.body == "resp from s1"
txreq
rxresp
expect resp.body == "resp from s2"
} -run
# delete the dynamic server
haproxy h1 -cli {
# server not in maintenance mode
send "experimental-mode on; del server test/s2"
expect ~ "Only servers in maintenance mode can be deleted."
send "disable server test/s2"
expect ~ ".*"
# valid command
send "experimental-mode on; del server test/s2"
expect ~ "Server deleted."
}
# now check that only the first server is used
client c2 -connect ${h1_feS_sock} {
txreq
rxresp
expect resp.body == "resp from s1"
txreq
rxresp
expect resp.body == "resp from s1"
} -run