2021-01-20 23:19:39 +01:00
|
|
|
import bodyParser from "body-parser"
|
2021-01-14 16:55:19 +01:00
|
|
|
import * as express from "express"
|
2021-07-28 01:52:57 +02:00
|
|
|
import * as httpserver from "../../utils/httpserver"
|
|
|
|
import * as integration from "../../utils/integration"
|
2021-01-14 16:54:34 +01:00
|
|
|
|
|
|
|
describe("proxy", () => {
|
2021-01-14 16:55:19 +01:00
|
|
|
const nhooyrDevServer = new httpserver.HttpServer()
|
2021-01-20 23:19:39 +01:00
|
|
|
let codeServer: httpserver.HttpServer | undefined
|
2021-01-14 16:54:34 +01:00
|
|
|
let proxyPath: string
|
2021-02-04 23:29:44 +01:00
|
|
|
let absProxyPath: string
|
2021-01-20 23:19:39 +01:00
|
|
|
let e: express.Express
|
2021-01-14 16:54:34 +01:00
|
|
|
|
2021-01-21 00:37:49 +01:00
|
|
|
beforeAll(async () => {
|
2021-01-20 23:19:39 +01:00
|
|
|
await nhooyrDevServer.listen((req, res) => {
|
|
|
|
e(req, res)
|
2021-01-14 16:54:34 +01:00
|
|
|
})
|
|
|
|
proxyPath = `/proxy/${nhooyrDevServer.port()}/wsup`
|
2021-02-04 23:29:44 +01:00
|
|
|
absProxyPath = proxyPath.replace("/proxy/", "/absproxy/")
|
2021-01-14 16:54:34 +01:00
|
|
|
})
|
|
|
|
|
2021-01-21 00:37:49 +01:00
|
|
|
afterAll(async () => {
|
2021-01-14 16:54:34 +01:00
|
|
|
await nhooyrDevServer.close()
|
|
|
|
})
|
|
|
|
|
2021-01-20 23:19:39 +01:00
|
|
|
beforeEach(() => {
|
|
|
|
e = express.default()
|
|
|
|
})
|
|
|
|
|
2021-01-14 16:54:34 +01:00
|
|
|
afterEach(async () => {
|
|
|
|
if (codeServer) {
|
|
|
|
await codeServer.close()
|
|
|
|
codeServer = undefined
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should rewrite the base path", async () => {
|
2021-01-20 23:19:39 +01:00
|
|
|
e.get("/wsup", (req, res) => {
|
|
|
|
res.json("asher is the best")
|
|
|
|
})
|
2021-05-05 19:20:38 +02:00
|
|
|
codeServer = await integration.setup(["--auth=none"], "")
|
2021-01-14 16:54:34 +01:00
|
|
|
const resp = await codeServer.fetch(proxyPath)
|
2021-01-21 00:37:49 +01:00
|
|
|
expect(resp.status).toBe(200)
|
|
|
|
const json = await resp.json()
|
|
|
|
expect(json).toBe("asher is the best")
|
2021-01-14 16:54:34 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
it("should not rewrite the base path", async () => {
|
2021-02-04 23:29:44 +01:00
|
|
|
e.get(absProxyPath, (req, res) => {
|
2021-01-20 23:19:39 +01:00
|
|
|
res.json("joe is the best")
|
|
|
|
})
|
2021-05-05 19:20:38 +02:00
|
|
|
codeServer = await integration.setup(["--auth=none"], "")
|
2021-02-04 23:29:44 +01:00
|
|
|
const resp = await codeServer.fetch(absProxyPath)
|
2021-01-21 00:37:49 +01:00
|
|
|
expect(resp.status).toBe(200)
|
|
|
|
const json = await resp.json()
|
|
|
|
expect(json).toBe("joe is the best")
|
2021-01-14 16:54:34 +01:00
|
|
|
})
|
2021-01-20 23:19:39 +01:00
|
|
|
|
|
|
|
it("should rewrite redirects", async () => {
|
|
|
|
e.post("/wsup", (req, res) => {
|
|
|
|
res.redirect(307, "/finale")
|
|
|
|
})
|
|
|
|
e.post("/finale", (req, res) => {
|
|
|
|
res.json("redirect success")
|
|
|
|
})
|
2021-05-05 19:20:38 +02:00
|
|
|
codeServer = await integration.setup(["--auth=none"], "")
|
2021-01-20 23:19:39 +01:00
|
|
|
const resp = await codeServer.fetch(proxyPath, {
|
|
|
|
method: "POST",
|
|
|
|
})
|
|
|
|
expect(resp.status).toBe(200)
|
|
|
|
expect(await resp.json()).toBe("redirect success")
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should not rewrite redirects", async () => {
|
2021-02-04 23:29:44 +01:00
|
|
|
const finalePath = absProxyPath.replace("/wsup", "/finale")
|
|
|
|
e.post(absProxyPath, (req, res) => {
|
2021-01-20 23:19:39 +01:00
|
|
|
res.redirect(307, finalePath)
|
|
|
|
})
|
|
|
|
e.post(finalePath, (req, res) => {
|
|
|
|
res.json("redirect success")
|
|
|
|
})
|
2021-05-05 19:20:38 +02:00
|
|
|
codeServer = await integration.setup(["--auth=none"], "")
|
2021-02-04 23:29:44 +01:00
|
|
|
const resp = await codeServer.fetch(absProxyPath, {
|
2021-01-20 23:19:39 +01:00
|
|
|
method: "POST",
|
|
|
|
})
|
|
|
|
expect(resp.status).toBe(200)
|
|
|
|
expect(await resp.json()).toBe("redirect success")
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should allow post bodies", async () => {
|
|
|
|
e.use(bodyParser.json({ strict: false }))
|
|
|
|
e.post("/wsup", (req, res) => {
|
|
|
|
res.json(req.body)
|
|
|
|
})
|
2021-05-05 19:20:38 +02:00
|
|
|
codeServer = await integration.setup(["--auth=none"], "")
|
2021-01-20 23:19:39 +01:00
|
|
|
const resp = await codeServer.fetch(proxyPath, {
|
|
|
|
method: "post",
|
|
|
|
body: JSON.stringify("coder is the best"),
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
})
|
|
|
|
expect(resp.status).toBe(200)
|
|
|
|
expect(await resp.json()).toBe("coder is the best")
|
|
|
|
})
|
2021-01-14 16:54:34 +01:00
|
|
|
})
|