-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathproxy.test.ts
More file actions
92 lines (80 loc) · 2.21 KB
/
proxy.test.ts
File metadata and controls
92 lines (80 loc) · 2.21 KB
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
import { TestServer } from '@logux/server'
import { deepEqual, equal } from 'node:assert/strict'
import { createServer, type Server } from 'node:http'
import type { AddressInfo } from 'node:net'
import { after, afterEach, describe, test } from 'node:test'
import proxyModule from '../modules/proxy.ts'
describe('server proxy', () => {
let target = createServer((req, res) => {
let parsedUrl = new URL(req.url!, `http://${req.headers.host}`)
res.writeHead(200, {
'Content-Type': 'text/json',
'Set-Cookie': 'test=1'
})
res.end(
JSON.stringify({
request: {
method: req.method,
requestPath: parsedUrl.pathname,
url: req.url
},
response: 'ok'
})
)
})
target.listen(31597)
function getURL(server: Server): string {
let port = (server.address() as AddressInfo).port
return `http://localhost:${port}`
}
let server: TestServer | undefined
let originEnv = { ...process.env }
afterEach(async () => {
await server?.destroy()
server = undefined
process.env = { ...originEnv }
})
after(async () => {
await new Promise(resolve => {
target.close(resolve)
})
})
test('uses proxy', async () => {
process.env.PROXY_ORIGIN = '^http:\\/\\/test.app$'
server = new TestServer()
proxyModule(server, {
allowLocalhost: true,
allowsFrom: process.env.PROXY_ORIGIN
})
let response = await server.fetch(`/proxy/${getURL(target)}/path`, {
headers: {
Origin: 'http://test.app'
}
})
equal(response.status, 200)
deepEqual(await response.json(), {
request: {
method: 'GET',
requestPath: '/path',
url: '/path'
},
response: 'ok'
})
let denied = await server.fetch(`/proxy/${getURL(target)}/path`)
equal(denied.status, 400)
let unknown = await server.fetch(`/proxy`)
equal(unknown.status, 404)
})
test('can be disabled', async () => {
server = new TestServer()
proxyModule(server, {
allowLocalhost: true
})
let response = await server.fetch(`/proxy/${getURL(target)}/path`, {
headers: {
Origin: 'http://test.app'
}
})
equal(response.status, 404)
})
})