xref: /openbmc/phosphor-misc/http-redirect/test.awk (revision 756eaf798dc804fc7936ff1121c6f3e441d29fac)
1*756eaf79SMilton MillerBEGIN {
2*756eaf79SMilton Miller	if (!resultfile)
3*756eaf79SMilton Miller		resultfile="testfile"
4*756eaf79SMilton Miller	if (!script)
5*756eaf79SMilton Miller		script = "http-redirect.awk"
6*756eaf79SMilton Miller	invoke="awk -f " script
7*756eaf79SMilton Miller	cmd = invoke " > " resultfile
8*756eaf79SMilton Miller	if (tracefile)
9*756eaf79SMilton Miller		invoke = invoke " -v tracefile=" tracefile
10*756eaf79SMilton Miller}
11*756eaf79SMilton Miller
12*756eaf79SMilton Millerfunction reportfail(resultfile, expect, request, headers)
13*756eaf79SMilton Miller{
14*756eaf79SMilton Miller	print("Testcase FAIL")
15*756eaf79SMilton Miller	print("Expected to find :" expect)
16*756eaf79SMilton Miller	print("actual:")
17*756eaf79SMilton Miller	system("cat " resultfile)
18*756eaf79SMilton Miller	print("expect:" expect)
19*756eaf79SMilton Miller	print("input:")
20*756eaf79SMilton Miller	print("reuest: " request)
21*756eaf79SMilton Miller	for (h in headers)
22*756eaf79SMilton Miller		print("headers:" headers[h])
23*756eaf79SMilton Miller	print("")
24*756eaf79SMilton Miller	print("FAIL")
25*756eaf79SMilton Miller	exit(1)
26*756eaf79SMilton Miller}
27*756eaf79SMilton Miller
28*756eaf79SMilton Millerfunction test(code, expect, request, headers)
29*756eaf79SMilton Miller{
30*756eaf79SMilton Miller	runtest(cmd, request, headers)
31*756eaf79SMilton Miller	result = check(resultfile, code, expect, request, headers)
32*756eaf79SMilton Miller	results[result] = results[result] + 1
33*756eaf79SMilton Miller	if (result == "FAIL")
34*756eaf79SMilton Miller		reportfail(resultfile, expect, request, headers)
35*756eaf79SMilton Miller}
36*756eaf79SMilton Miller
37*756eaf79SMilton Millerfunction check(resultfile, code, expect, request, headers)
38*756eaf79SMilton Miller{
39*756eaf79SMilton Miller	line = ""
40*756eaf79SMilton Miller	getline result < resultfile
41*756eaf79SMilton Miller
42*756eaf79SMilton Miller	while ((getline line < resultfile) > 0)
43*756eaf79SMilton Miller		if (line ~ /^Location/)
44*756eaf79SMilton Miller			found = line
45*756eaf79SMilton Miller
46*756eaf79SMilton Miller	close(resultfile)
47*756eaf79SMilton Miller
48*756eaf79SMilton Miller	if (code in locations)
49*756eaf79SMilton Miller	if ((line == expect) && (location ~ " " code " "))
50*756eaf79SMilton Miller		rc = "PASS"
51*756eaf79SMilton Miller	else
52*756eaf79SMilton Miller		rc = fail
53*756eaf79SMilton Miller	return rc
54*756eaf79SMilton Miller}
55*756eaf79SMilton Miller
56*756eaf79SMilton Millerfunction runtest(cmd, request, headers,	h, OORS)
57*756eaf79SMilton Miller{
58*756eaf79SMilton Miller	if (!cmd)
59*756eaf79SMilton Miller		return
60*756eaf79SMilton Miller	OORS = ORS
61*756eaf79SMilton Miller	ORS = "\r\n"
62*756eaf79SMilton Miller
63*756eaf79SMilton Miller	print(request) | cmd
64*756eaf79SMilton Miller	for (h in headers)
65*756eaf79SMilton Miller		print(headers[h]) | cmd
66*756eaf79SMilton Miller	print("") | cmd
67*756eaf79SMilton Miller	close(cmd)
68*756eaf79SMilton Miller
69*756eaf79SMilton Miller	ORS = OORS
70*756eaf79SMilton Miller}
71*756eaf79SMilton Miller
72*756eaf79SMilton Millerfunction add(array, value) {
73*756eaf79SMilton Miller	counter = counter + 1
74*756eaf79SMilton Miller	array[counter] = value
75*756eaf79SMilton Miller}
76*756eaf79SMilton Miller
77*756eaf79SMilton Millerfunction mkrequest(method, path, version)
78*756eaf79SMilton Miller{
79*756eaf79SMilton Miller	return method " " path " " version
80*756eaf79SMilton Miller}
81*756eaf79SMilton Miller
82*756eaf79SMilton MillerBEGIN {
83*756eaf79SMilton Miller	failingtests()
84*756eaf79SMilton Miller	passingtests()
85*756eaf79SMilton Miller	exit(0)
86*756eaf79SMilton Miller}
87*756eaf79SMilton Miller
88*756eaf79SMilton Millerfunction failingtests(headers) {
89*756eaf79SMilton Miller	host1 = "somewhere.example.com"
90*756eaf79SMilton Miller
91*756eaf79SMilton Miller	headers[0] = "Host: " host1 ports[port]
92*756eaf79SMilton Miller	version="HTTP/1.1"
93*756eaf79SMilton Miller	path="/"
94*756eaf79SMilton Miller	method="GET"
95*756eaf79SMilton Miller
96*756eaf79SMilton Miller	othermethods(path, version, headers)
97*756eaf79SMilton Miller	test(505, "", mkrequest(method, path, "HTTP/1"), headers)
98*756eaf79SMilton Miller	test(505, "", mkrequest(method, path, "HTTP/2.0"), headers)
99*756eaf79SMilton Miller	test(505, "", mkrequest(method, path, "http/1.1"), headers)
100*756eaf79SMilton Miller	junk[0] = "Host: abc_def.example.com"
101*756eaf79SMilton Miller	test(400, "", mkrequest(method, path, "HTTP/1.1"), junk)
102*756eaf79SMilton Miller	test(400, "", mkrequest(method, path, "HTTP/1.1"), headers)
103*756eaf79SMilton Miller	test(404, "", mkrequest(method, "/abc", "HTTP/1.1"), junk)
104*756eaf79SMilton Miller}
105*756eaf79SMilton Miller
106*756eaf79SMilton Millerfunction othermethods(path, version, headers, methods, m)
107*756eaf79SMilton Miller{
108*756eaf79SMilton Miller	add(methods, "PUT")
109*756eaf79SMilton Miller	add(methods, "POST")
110*756eaf79SMilton Miller	add(methods, "TRACE")
111*756eaf79SMilton Miller	add(methods, "CONNECT")
112*756eaf79SMilton Miller	add(methods, "get")
113*756eaf79SMilton Miller	add(methods, "head")
114*756eaf79SMilton Miller
115*756eaf79SMilton Miller	for (m in methods)
116*756eaf79SMilton Miller		test(501, "", mkrequest(methods[m], path, version), headers)
117*756eaf79SMilton Miller}
118*756eaf79SMilton Miller
119*756eaf79SMilton Millerfunction passingtests(headers) {
120*756eaf79SMilton Miller	method="GET"
121*756eaf79SMilton Miller	path="/"
122*756eaf79SMilton Miller	version="HTTP/1.1"
123*756eaf79SMilton Miller
124*756eaf79SMilton Miller	host1 = "somewhere.example.com"
125*756eaf79SMilton Miller	host2 = "elsewhere.example.com"
126*756eaf79SMilton Miller	mkports(ports)
127*756eaf79SMilton Miller
128*756eaf79SMilton Miller	expect="Location: https://" host1 "/\r"
129*756eaf79SMilton Miller
130*756eaf79SMilton Miller	request = mkrequest(method, path, version)
131*756eaf79SMilton Miller	for (port in ports) {
132*756eaf79SMilton Miller		headers[0] = "Host: " host1 ports[port]
133*756eaf79SMilton Miller		test(308, expect, request, headers)
134*756eaf79SMilton Miller	}
135*756eaf79SMilton Miller	test(308, expect, mkrequest("HEAD", path, version), headers)
136*756eaf79SMilton Miller	headers[0] = "Host: " host2
137*756eaf79SMilton Miller	testabsuris(expect, headers, host1, ports)
138*756eaf79SMilton Miller}
139*756eaf79SMilton Miller
140*756eaf79SMilton Millerfunction testabsuris(expect, headers, host, ports)
141*756eaf79SMilton Miller{
142*756eaf79SMilton Miller	mkabsuris(uris, host, ports)
143*756eaf79SMilton Miller
144*756eaf79SMilton Miller	# test with and without path
145*756eaf79SMilton Miller	for (uri in uris) {
146*756eaf79SMilton Miller		u = uris[uri]
147*756eaf79SMilton Miller		test(308, expect, mkrequest(method, u, version), headers)
148*756eaf79SMilton Miller		test(308, expect, mkrequest(method, u "/", version), headers)
149*756eaf79SMilton Miller	}
150*756eaf79SMilton Miller}
151*756eaf79SMilton Miller
152*756eaf79SMilton Millerfunction mkports(ports) {
153*756eaf79SMilton Miller	add(ports, "")
154*756eaf79SMilton Miller	add(ports, ":")
155*756eaf79SMilton Miller	add(ports, ":8080")
156*756eaf79SMilton Miller}
157*756eaf79SMilton Miller
158*756eaf79SMilton Millerfunction mkabsuris(uris, host, ports,	schemes, scheme, port)
159*756eaf79SMilton Miller{
160*756eaf79SMilton Miller	mkschemes(schemes)
161*756eaf79SMilton Miller
162*756eaf79SMilton Miller	for (scheme in schemes)
163*756eaf79SMilton Miller		for (port in ports)
164*756eaf79SMilton Miller			add(uris, schemes[scheme] "://" host ports[port] )
165*756eaf79SMilton Miller}
166*756eaf79SMilton Miller
167*756eaf79SMilton Millerfunction mkschemes(schemes,	h, t1, t2, p, hs, ts, ps) {
168*756eaf79SMilton Miller	mkletters(hs, 4, 8)
169*756eaf79SMilton Miller	mkletters(ts, 5, 4)
170*756eaf79SMilton Miller	mkletters(ps, 5, 0)
171*756eaf79SMilton Miller
172*756eaf79SMilton Miller	for (h in hs)
173*756eaf79SMilton Miller		for (t1 in ts)
174*756eaf79SMilton Miller			for (t2 in ts)
175*756eaf79SMilton Miller				for (p in ps)
176*756eaf79SMilton Miller					add(schemes, hs[h] ts[t1] ts[t2] ps[p])
177*756eaf79SMilton Miller}
178*756eaf79SMilton Miller
179*756eaf79SMilton Millerfunction mkletters(ns, h1, h2)
180*756eaf79SMilton Miller{
181*756eaf79SMilton Miller	add(ns, "%" h1 h2)
182*756eaf79SMilton Miller	add(ns, "%" (h1 + 2) h2)
183*756eaf79SMilton Miller	add(ns, sprintf("%c", h1 * 16 + h2))
184*756eaf79SMilton Miller	add(ns, sprintf("%c", (h1 + 2) * 16 + h2))
185*756eaf79SMilton Miller
186*756eaf79SMilton Miller}
187*756eaf79SMilton Miller
188