summaryrefslogtreecommitdiffstats
path: root/reg-tests/http-messaging/http_bodyless_response.vtc
blob: 9e0ce1c1b3f9d37957b5cb352a0d931a82e52274 (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
varnishtest "A test to be sure payload is skipped for bodyless responses"
feature ignore_unknown_macro

#REQUIRE_VERSION=2.4

server s1 {
        rxreq
        txresp \
          -status 200 \
          -body "skipped data"

        rxreq
        txresp \
          -status 200 \
          -bodylen 20000

        rxreq
        txresp \
          -status 200 \
	  -nolen -hdr "Transfer-Encoding: chunked"
       chunkedlen 15
       chunkedlen 1024
       chunkedlen 4048
       chunkedlen 0

        rxreq
        txresp \
          -status 200 \
          -body "last response"
} -repeat 2 -start

haproxy h1 -conf {
    global
        # WT: limit false-positives causing "HTTP header incomplete" due to
        # idle server connections being randomly used and randomly expiring
        # under us.
        tune.idle-pool.shared off

    defaults
        mode http
        timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
        timeout client  "${HAPROXY_TEST_TIMEOUT-5s}"
        timeout server  "${HAPROXY_TEST_TIMEOUT-5s}"

    listen fe1
        bind "fd@${fe1}"
        # Rewrite the method to be sure to get the response payload
        # on the server side
        http-request set-method GET
        server s1 ${s1_addr}:${s1_port}

    listen int
        bind "fd@${int}" proto h2
        # Rewrite the method to be sure to get the response payload
        # on the server side
        http-request set-method GET
        server s1 ${s1_addr}:${s1_port}
        #server s1 ${h1_fe1_addr}:${h1_fe1_port}

    listen fe2
        bind "fd@${fe2}"
        server s1 ${h1_int_addr}:${h1_int_port} proto h2
} -start

client c1 -connect ${h1_fe1_sock} {
        txreq \
            -req "HEAD" \
            -url "/req1"
        rxresp
        expect resp.status == 200
        expect resp.body == ""

        txreq \
            -req "HEAD" \
            -url "/req2"
        rxresp
        expect resp.status == 200
        expect resp.body == ""

        txreq \
            -req "HEAD" \
            -url "/req3"
        rxresp
        expect resp.status == 200
        expect resp.body == ""

        # The last one have a body and validate the connection was not closed
        # unexpectedly and no payload was received for previous requests
        txreq \
            -req "GET" \
            -url "/req4"
        rxresp
        expect resp.status == 200
        expect resp.body == "last response"
} -run

client c2 -connect ${h1_fe2_sock} {
        txreq \
            -req "HEAD" \
            -url "/req1"
        rxresp
        expect resp.status == 200
        expect resp.body == ""

        txreq \
            -req "HEAD" \
            -url "/req2"
        rxresp
        expect resp.status == 200
        expect resp.body == ""

        txreq \
            -req "HEAD" \
            -url "/req3"
        rxresp
        expect resp.status == 200
        expect resp.body == ""

        # The last one have a body and validate the connection was not closed
        # unexpectedly and no payload was received for previous requests
        txreq \
            -req "GET" \
            -url "/req4"
        rxresp
        expect resp.status == 200
        expect resp.body == "last response"
} -run