# This script is to test the ability to remove servers, unless they are
# referenced by some elements from the configuration.
#
varnishtest "Delete server via cli"

feature ignore_unknown_macro

#REQUIRE_VERSION=2.4

haproxy h1 -conf {
	defaults
		mode http
		timeout connect 1s
		timeout client  1s
		timeout server  1s

	frontend fe
		bind "fd@${feS}"
		acl s1_full srv_sess_rate(test/s1) gt 50
		default_backend test

	backend test
		use-server s3 unless { always_false }
		server s1 ${s1_addr}:${s1_port}          # referenced in ACL
		server s2 ${s1_addr}:${s1_port} check    # referenced in track
		server s3 ${s1_addr}:${s1_port} track s2 # referenced in use-server
		server s4 ${s1_addr}:${s1_port}          # removable server
} -start

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."

	# server referenced in ACL
	send "experimental-mode on; del server test/s1"
	expect ~ "This server cannot be removed at runtime due to other configuration elements pointing to it."

	# tracked server
	send "experimental-mode on; del server test/s2"
	expect ~ "This server cannot be removed at runtime due to other configuration elements pointing to it."

	# tracked server
	send "experimental-mode on; del server test/s3"
	expect ~ "This server cannot be removed at runtime due to other configuration elements pointing to it."

	# server in running mode
	send "experimental-mode on; del server test/s4"
	expect ~ "Only servers in maintenance mode can be deleted."

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

	# valid command
	send "experimental-mode on; del server test/s4"
	expect ~ "Server deleted."
}
