# 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 "${HAPROXY_TEST_TIMEOUT-5s}"
		timeout client  "${HAPROXY_TEST_TIMEOUT-5s}"
		timeout server  "${HAPROXY_TEST_TIMEOUT-5s}"

	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 "add server test/s2 ${s2_addr}:${s2_port}"
	expect ~ "New server registered."

	send "enable server test/s2"
	expect ~ ".*"
}

haproxy h1 -cli {
	# non existent backend
	send "del server foo/s1"
	expect ~ "No such backend."

	# non existent server
	send "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 "del server test/s2"
	expect ~ "Only servers in maintenance mode can be deleted."

	send "disable server test/s2"
	expect ~ ".*"

	# valid command
	send "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

