summaryrefslogtreecommitdiffstats
path: root/reg-tests/http-messaging/scheme_based_normalize.vtc
blob: 3edbafbd10f7c70e711298501c69259ec4cf70ef (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
varnishtest "scheme based normalization (rfc3982 6.3.2)"

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

syslog S1 -level info {
	recv
	expect ~ "^.* uri: GET http://hostname/ HTTP/2.0; host: {hostname}$"

	recv
	expect ~ "^.* uri: GET http://hostname:8080/ HTTP/2.0; host: {hostname:8080}$"

	recv
	expect ~ "^.* uri: GET https://hostname/ HTTP/2.0; host: {hostname}$"

	recv
	expect ~ "^.* uri: GET https://hostname:80/ HTTP/2.0; host: {hostname:80}$"
} -start

haproxy h1 -conf {
	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}" proto h2

		http-request capture req.hdr(host) len 512
		log-format "uri: %r; host: %hr"
		log ${S1_addr}:${S1_port} len 2048 local0 debug err

		http-request return status 200
} -start

# default port 80 with http scheme => should be normalized
client c1 -connect ${h1_fe_sock} {
	txpri
	stream 0 {
		txsettings
		rxsettings
		txsettings -ack
		rxsettings
		expect settings.ack == true
	} -run

	stream 1 {
		txreq \
		  -req "GET" \
		  -scheme "http" \
		  -url "/" \
		  -hdr ":authority" "hostname:80"
		rxhdrs
		expect resp.status == 200
	} -run
} -run

# port 8080 with http scheme => no normalization
client c2 -connect ${h1_fe_sock} {
	txpri
	stream 0 {
		txsettings
		rxsettings
		txsettings -ack
		rxsettings
		expect settings.ack == true
	} -run

	stream 1 {
		txreq \
		  -req "GET" \
		  -scheme "http" \
		  -url "/" \
		  -hdr ":authority" "hostname:8080"
		rxhdrs
		expect resp.status == 200
	} -run
} -run

# default port 443 with https scheme => should be normalized
client c3 -connect ${h1_fe_sock} {
	txpri
	stream 0 {
		txsettings
		rxsettings
		txsettings -ack
		rxsettings
		expect settings.ack == true
	} -run

	stream 1 {
		txreq \
		  -req "GET" \
		  -scheme "https" \
		  -url "/" \
		  -hdr ":authority" "hostname:443"
		rxhdrs
		expect resp.status == 200
	} -run
} -run

# port 80 with https scheme => no normalization
client c4 -connect ${h1_fe_sock} {
	txpri
	stream 0 {
		txsettings
		rxsettings
		txsettings -ack
		rxsettings
		expect settings.ack == true
	} -run

	stream 1 {
		txreq \
		  -req "GET" \
		  -scheme "https" \
		  -url "/" \
		  -hdr ":authority" "hostname:80"
		rxhdrs
		expect resp.status == 200
	} -run
} -run

syslog S1 -wait