varnishtest "Add backend via cli"

feature ignore_unknown_macro

haproxy hsrv -conf {
	global
	.if feature(THREAD)
		thread-groups 1
	.endif

	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@${fe}"
		http-request return status 200
} -start

haproxy h1 -conf {
	global
	.if feature(THREAD)
		thread-groups 1
	.endif

	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}"
		force-be-switch if { req.hdr("x-admin") "1" }
		use_backend %[req.hdr(x-be)]

	defaults def

	defaults def_http
		mode http
} -start

client c1 -connect ${h1_feS_sock} {
	txreq -hdr "x-be: be"
	rxresp
	expect resp.status == 503
} -run

haproxy h1 -cli {
	# non existent backend
	send "experimental-mode on; add backend be from def"
	expect ~ "Mode is required"

	send "experimental-mode on; add backend be from def_http"
	expect ~ "New backend registered."

	send "add server be/srv ${hsrv_fe_addr}:${hsrv_fe_port}"
	expect ~ "New server registered."
	send "enable server be/srv"
	expect ~ ".*"
}

client c1 -connect ${h1_feS_sock} {
	txreq -hdr "x-be: be"
	rxresp
	expect resp.status == 503

	txreq -hdr "x-be: be" -hdr "x-admin: 1"
	rxresp
	expect resp.status == 200
} -run

haproxy h1 -cli {
	send "publish backend be"
	expect ~ "Backend published."
}

client c1 -connect ${h1_feS_sock} {
	txreq -hdr "x-be: be"
	rxresp
	expect resp.status == 200
} -run
