summaryrefslogtreecommitdiffstats
path: root/reg-tests/http-rules/default_rules.vtc
blob: cc726ab08f1b35ac5c02e2a8b7bf5c87472ed282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
varnishtest "Test declaration of HTTP rules in default sections"

feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'"
feature ignore_unknown_macro

server s1 {
        rxreq
        expect req.http.x-frontend == "fe"
        expect req.http.x-backend == "be"
        expect req.http.x-test1-frt == "def_front"
        expect req.http.x-test1-bck == "def_back"
        txresp
}  -start

server s2 {
        rxreq
        txresp
}  -start

haproxy h1 -conf {
  defaults common
      mode http
      timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
      timeout client  "${HAPROXY_TEST_TIMEOUT-5s}"
      timeout server  "${HAPROXY_TEST_TIMEOUT-5s}"

  defaults def_front from common
      http-request set-header x-frontend "%[fe_name]"
      http-request set-var(txn.test1) "str(def_front)"
      http-response set-header x-frontend "%[fe_name]"
      http-response set-var(txn.test2) "str(def_front)"
      http-after-response set-var(txn.test3) "str(def_front)"

  defaults def_back from common
      http-request set-header x-backend "%[be_name]"
      http-request set-var(txn.test1) "str(def_back)"
      http-response set-header x-backend "%[be_name]"
      http-response set-var(txn.test2) "str(def_back)"
      http-after-response set-var(txn.test3) "str(def_back)"

  frontend fe from def_front
      bind "fd@${feh1}"

      http-request set-header x-test1-frt "%[var(txn.test1)]"
      http-response set-header x-test2-frt "%[var(txn.test2)]"
      http-after-response set-header x-test3-frt "%[var(txn.test3)]"

      default_backend be

  backend be from def_back
      http-request set-header x-test1-bck "%[var(txn.test1)]"
      http-response set-header x-test2-bck "%[var(txn.test2)]"
      http-after-response set-header x-test3-bck "%[var(txn.test3)]"

      server s1 ${s1_addr}:${s1_port}

} -start


haproxy h2 -conf {
  defaults common
      mode http
      timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
      timeout client  "${HAPROXY_TEST_TIMEOUT-5s}"
      timeout server  "${HAPROXY_TEST_TIMEOUT-5s}"

  defaults def_front from common
      http-request allow
      http-response allow
      http-after-response allow

  defaults def_back from common
      http-request allow
      http-response allow
      http-after-response allow

  frontend fe from def_front
      bind "fd@${feh2}"

      http-request deny status 403
      http-response deny status 502
      http-after-response set-status 502

      default_backend be

  backend be from def_back
      http-request deny status 403
      http-response deny status 502
      http-after-response set-status 502

      server s2 ${s2_addr}:${s2_port}

} -start

haproxy h3 -conf {
  defaults base-http
      mode http
      timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
      timeout client  "${HAPROXY_TEST_TIMEOUT-5s}"
      timeout server  "${HAPROXY_TEST_TIMEOUT-5s}"

      http-request capture hdr(Host)  len 64  # idx 0
      http-request capture hdr(X-req-1) len 32  # idx 1

  frontend fe1 from base-http
      bind "fd@${fe1h3}"
      declare capture request len 32 # idx 2

      http-request capture hdr(X-req-2) id 2
      http-request return status 200 hdr "X-Capture-1" "%[capture.req.hdr(0)]" hdr "X-Capture-2" "%[capture.req.hdr(1)]" hdr "X-Capture-3" "%[capture.req.hdr(2)]"

  frontend fe2 from base-http
      bind "fd@${fe2h3}"
      http-request capture hdr(X-req-2) id 1
      http-request return status 200 hdr "X-Capture-1" "%[capture.req.hdr(0)]" hdr "X-Capture-2" "%[capture.req.hdr(1)]"

} -start

client c1 -connect ${h1_feh1_sock} {
        txreq -req GET -url /
        rxresp
        expect resp.status == 200
        expect resp.http.x-frontend == "fe"
        expect resp.http.x-backend == "be"
        expect resp.http.x-test2-bck == "def_back"
        expect resp.http.x-test2-frt == "def_front"
        expect resp.http.x-test3-bck == "def_back"
        expect resp.http.x-test3-frt == "def_front"
} -run

client c2 -connect ${h2_feh2_sock} {
        txreq -req GET -url /
        rxresp
        expect resp.status == 200
} -run

client c3 -connect ${h3_fe1h3_sock} {
        txreq -req GET -url /  \
          -hdr "host: v-test"  \
          -hdr "x-req-1: val1" \
          -hdr "x-req-2: val2"
        rxresp
        expect resp.status == 200
        expect resp.http.x-capture-1 == "v-test"
        expect resp.http.x-capture-2 == "val1"
        expect resp.http.x-capture-3 == "val2"
} -run

client c4 -connect ${h3_fe2h3_sock} {
        txreq -req GET -url /  \
          -hdr "host: v-test"  \
          -hdr "x-req-1: val1" \
          -hdr "x-req-2: val2"
        rxresp
        expect resp.status == 200
        expect resp.http.x-capture-1 == "v-test"
        expect resp.http.x-capture-2 == "val2"
        expect resp.http.x-capture-3 == "<undef>"
} -run