--- /dev/null
+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