Skip to content

Commit a829a7b

Browse files
Jake ChampionJakeChampion
authored andcommitted
chore: add tests for reading request headers
1 parent 8db72a8 commit a829a7b

File tree

4 files changed

+213
-0
lines changed

4 files changed

+213
-0
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ jobs:
192192
- request-cache-key
193193
- request-clone
194194
- request-downstream
195+
- request-headers
195196
- request-limits
196197
- request-upstream
197198
- response
@@ -315,6 +316,7 @@ jobs:
315316
- 'multiple-set-cookie'
316317
- 'object-store'
317318
- 'request-clone'
319+
- 'request-headers'
318320
- 'request-limits'
319321
- 'request-upstream'
320322
- 'response'
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/* eslint-env serviceworker */
2+
import { env } from 'fastly:env';
3+
import { fail } from "../../../assertions.js";
4+
5+
addEventListener("fetch", event => {
6+
event.respondWith(app(event))
7+
})
8+
/**
9+
* @param {FetchEvent} event
10+
* @returns {Response}
11+
*/
12+
async function app(event) {
13+
try {
14+
const path = (new URL(event.request.url)).pathname;
15+
console.log(`path: ${path}`)
16+
console.log(`FASTLY_SERVICE_VERSION: ${env('FASTLY_SERVICE_VERSION')}`)
17+
if (routes.has(path)) {
18+
const routeHandler = routes.get(path);
19+
return await routeHandler(event)
20+
}
21+
return fail(`${path} endpoint does not exist`)
22+
} catch (error) {
23+
return fail(`The routeHandler threw an error: ${error.message}` + '\n' + error.stack)
24+
}
25+
}
26+
27+
const routes = new Map();
28+
routes.set('/', () => {
29+
routes.delete('/');
30+
let test_routes = Array.from(routes.keys())
31+
return new Response(JSON.stringify(test_routes), { 'headers': { 'content-type': 'application/json' } });
32+
});
33+
{
34+
routes.set("/request-upstream", async (event) => {
35+
/**
36+
* @type {Request} request
37+
**/
38+
const request = event.request;
39+
const headers = {};
40+
for (const [name, value] of request.headers.entries()) {
41+
if (!headers[name]) {
42+
headers[name] = [];
43+
}
44+
headers[name].push(value);
45+
}
46+
delete headers['user-agent'];
47+
return new Response(JSON.stringify(headers), {headers: request.headers})
48+
});
49+
routes.set("/request-init", async () => {
50+
const requestHeaders = new Headers();
51+
requestHeaders.append('cats', 'aki');
52+
requestHeaders.append('cats', 'yuki');
53+
requestHeaders.append('dogs', 'buster');
54+
requestHeaders.append('numbers', '1');
55+
requestHeaders.append('numbers', '2');
56+
requestHeaders.append('numbers', '3');
57+
requestHeaders.append('numbers', '4');
58+
requestHeaders.append('numbers', '5');
59+
requestHeaders.append('numbers', '6');
60+
requestHeaders.append('numbers', '7');
61+
requestHeaders.append('numbers', '8');
62+
requestHeaders.append('numbers', '9');
63+
let request = new Request("https://www.exmaple.com", {headers: requestHeaders});
64+
65+
const headers = {};
66+
for (const [name, value] of request.headers.entries()) {
67+
if (!headers[name]) {
68+
headers[name] = [];
69+
}
70+
headers[name].push(value);
71+
}
72+
delete headers['user-agent'];
73+
return new Response(JSON.stringify(headers), {headers: request.headers})
74+
});
75+
routes.set("/request-direct", async () => {
76+
let request = new Request("https://www.exmaple.com");
77+
78+
request.headers.append('cats', 'aki');
79+
request.headers.append('cats', 'yuki');
80+
request.headers.append('dogs', 'buster');
81+
request.headers.append('numbers', '1');
82+
request.headers.append('numbers', '2');
83+
request.headers.append('numbers', '3');
84+
request.headers.append('numbers', '4');
85+
request.headers.append('numbers', '5');
86+
request.headers.append('numbers', '6');
87+
request.headers.append('numbers', '7');
88+
request.headers.append('numbers', '8');
89+
request.headers.append('numbers', '9');
90+
const headers = {};
91+
for (const [name, value] of request.headers.entries()) {
92+
if (!headers[name]) {
93+
headers[name] = [];
94+
}
95+
headers[name].push(value);
96+
}
97+
delete headers['user-agent'];
98+
return new Response(JSON.stringify(headers), {headers: request.headers})
99+
});
100+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# This file describes a Fastly Compute@Edge package. To learn more visit:
2+
# https://developer.fastly.com/reference/fastly-toml/
3+
4+
authors = ["[email protected]"]
5+
description = ""
6+
language = "other"
7+
manifest_version = 2
8+
name = "request-headers"
9+
service_id = ""
10+
11+
[scripts]
12+
build = "node ../../../../js-compute-runtime-cli.js"
13+
14+
[local_server]
15+
[local_server.backends]
16+
[local_server.backends.httpbin]
17+
url = "https://httpbin.org/"
18+
19+
[setup]
20+
[setup.backends]
21+
[setup.backends.httpbin]
22+
address = "httpbin.org"
23+
port = 443
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
{
2+
"GET /request-upstream": {
3+
"environments": ["viceroy", "c@e"],
4+
"downstream_request": {
5+
"method": "GET",
6+
"pathname": "/request-upstream",
7+
"headers": [
8+
"cats", "aki",
9+
"cats", "yuki",
10+
"dogs", "buster",
11+
"numbers", "1",
12+
"numbers", "2",
13+
"numbers", "3",
14+
"numbers", "4",
15+
"numbers", "5",
16+
"numbers", "6",
17+
"numbers", "7",
18+
"numbers", "8",
19+
"numbers", "9"
20+
]
21+
},
22+
"downstream_response": {
23+
"status": 200,
24+
"headers": [
25+
["cats", "aki"],
26+
["cats", "yuki"],
27+
["dogs", "buster"],
28+
["numbers", "1"],
29+
["numbers", "2"],
30+
["numbers", "3"],
31+
["numbers", "4"],
32+
["numbers", "5"],
33+
["numbers", "6"],
34+
["numbers", "7"],
35+
["numbers", "8"],
36+
["numbers", "9"]
37+
]
38+
}
39+
},
40+
"GET /request-init": {
41+
"environments": ["viceroy", "c@e"],
42+
"downstream_request": {
43+
"method": "GET",
44+
"pathname": "/request-init"
45+
},
46+
"downstream_response": {
47+
"status": 200,
48+
"headers": [
49+
["cats", "aki"],
50+
["cats", "yuki"],
51+
["dogs", "buster"],
52+
["numbers", "1"],
53+
["numbers", "2"],
54+
["numbers", "3"],
55+
["numbers", "4"],
56+
["numbers", "5"],
57+
["numbers", "6"],
58+
["numbers", "7"],
59+
["numbers", "8"],
60+
["numbers", "9"]
61+
]
62+
}
63+
},
64+
"GET /request-direct": {
65+
"environments": ["viceroy", "c@e"],
66+
"downstream_request": {
67+
"method": "GET",
68+
"pathname": "/request-direct"
69+
},
70+
"downstream_response": {
71+
"status": 200,
72+
"headers": [
73+
["cats", "aki"],
74+
["cats", "yuki"],
75+
["dogs", "buster"],
76+
["numbers", "1"],
77+
["numbers", "2"],
78+
["numbers", "3"],
79+
["numbers", "4"],
80+
["numbers", "5"],
81+
["numbers", "6"],
82+
["numbers", "7"],
83+
["numbers", "8"],
84+
["numbers", "9"]
85+
]
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)