proxy.test.ts: Add POST body test and redirection tests

Closes #2377
This commit is contained in:
Anmol Sethi 2021-01-20 17:19:39 -05:00
parent 58d72d53a1
commit a60f61f9b3
No known key found for this signature in database
GPG Key ID: 8CEF1878FF10ADEB

View File

@ -1,28 +1,29 @@
import bodyParser from "body-parser"
import * as express from "express" import * as express from "express"
import * as httpserver from "./httpserver" import * as httpserver from "./httpserver"
import * as integration from "./integration" import * as integration from "./integration"
describe("proxy", () => { describe("proxy", () => {
let codeServer: httpserver.HttpServer | undefined
const nhooyrDevServer = new httpserver.HttpServer() const nhooyrDevServer = new httpserver.HttpServer()
let codeServer: httpserver.HttpServer | undefined
let proxyPath: string let proxyPath: string
let e: express.Express
beforeAll(async () => { beforeAll(async () => {
const e = express.default() await nhooyrDevServer.listen((req, res) => {
await nhooyrDevServer.listen(e) e(req, res)
e.get("/wsup", (req, res) => {
res.json("asher is the best")
}) })
proxyPath = `/proxy/${nhooyrDevServer.port()}/wsup` proxyPath = `/proxy/${nhooyrDevServer.port()}/wsup`
e.get(proxyPath, (req, res) => {
res.json("joe is the best")
})
}) })
afterAll(async () => { afterAll(async () => {
await nhooyrDevServer.close() await nhooyrDevServer.close()
}) })
beforeEach(() => {
e = express.default()
})
afterEach(async () => { afterEach(async () => {
if (codeServer) { if (codeServer) {
await codeServer.close() await codeServer.close()
@ -31,6 +32,9 @@ describe("proxy", () => {
}) })
it("should rewrite the base path", async () => { it("should rewrite the base path", async () => {
e.get("/wsup", (req, res) => {
res.json("asher is the best")
})
;[, , codeServer] = await integration.setup(["--auth=none"], "") ;[, , codeServer] = await integration.setup(["--auth=none"], "")
const resp = await codeServer.fetch(proxyPath) const resp = await codeServer.fetch(proxyPath)
expect(resp.status).toBe(200) expect(resp.status).toBe(200)
@ -39,10 +43,61 @@ describe("proxy", () => {
}) })
it("should not rewrite the base path", async () => { it("should not rewrite the base path", async () => {
e.get(proxyPath, (req, res) => {
res.json("joe is the best")
})
;[, , codeServer] = await integration.setup(["--auth=none", "--proxy-path-passthrough=true"], "") ;[, , codeServer] = await integration.setup(["--auth=none", "--proxy-path-passthrough=true"], "")
const resp = await codeServer.fetch(proxyPath) const resp = await codeServer.fetch(proxyPath)
expect(resp.status).toBe(200) expect(resp.status).toBe(200)
const json = await resp.json() const json = await resp.json()
expect(json).toBe("joe is the best") expect(json).toBe("joe is the best")
}) })
it("should rewrite redirects", async () => {
e.post("/wsup", (req, res) => {
res.redirect(307, "/finale")
})
e.post("/finale", (req, res) => {
res.json("redirect success")
})
;[, , codeServer] = await integration.setup(["--auth=none"], "")
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 () => {
const finalePath = proxyPath.replace("/wsup", "/finale")
e.post(proxyPath, (req, res) => {
res.redirect(307, finalePath)
})
e.post(finalePath, (req, res) => {
res.json("redirect success")
})
;[, , codeServer] = await integration.setup(["--auth=none", "--proxy-path-passthrough=true"], "")
const resp = await codeServer.fetch(proxyPath, {
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)
})
;[, , codeServer] = await integration.setup(["--auth=none"], "")
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")
})
}) })