feat: reverse-proxy to VM instead of 302 (keep clean domain) + bump 0.0.4
This commit is contained in:
+30
-13
@@ -1,19 +1,36 @@
|
||||
'use strict';
|
||||
|
||||
process.env.VM_DOCS_BASE_URL = process.env.VM_DOCS_BASE_URL || 'http://vm.example';
|
||||
|
||||
const http = require('node:http');
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert');
|
||||
|
||||
const { server } = require('../server.js');
|
||||
let server;
|
||||
|
||||
const upstream = http.createServer((req, res) => {
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'text/html; charset=utf-8',
|
||||
'Content-Length': Buffer.byteLength('<html>ok</html>'),
|
||||
});
|
||||
res.end('<html>ok</html>');
|
||||
});
|
||||
|
||||
test.before(async () => {
|
||||
await new Promise((r) => upstream.listen(0, '127.0.0.1', r));
|
||||
process.env.VM_DOCS_BASE_URL = `http://127.0.0.1:${upstream.address().port}`;
|
||||
({ server } = require('../server.js'));
|
||||
});
|
||||
|
||||
test.after(async () => {
|
||||
await new Promise((r) => upstream.close(r));
|
||||
});
|
||||
|
||||
async function withServer(fn) {
|
||||
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
||||
await new Promise((r) => server.listen(0, '127.0.0.1', r));
|
||||
const base = `http://127.0.0.1:${server.address().port}`;
|
||||
try {
|
||||
await fn(base);
|
||||
} finally {
|
||||
await new Promise((resolve) => server.close(resolve));
|
||||
await new Promise((r) => server.close(r));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,19 +42,19 @@ test('GET /health -> 200 ok', async () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('GET /nubes-test/akhq/ -> 302 to VM', async () => {
|
||||
test('GET /nubes-test/ -> proxies to upstream', async () => {
|
||||
await withServer(async (base) => {
|
||||
const res = await fetch(`${base}/nubes-test/akhq/`, { redirect: 'manual' });
|
||||
assert.strictEqual(res.status, 302);
|
||||
assert.strictEqual(res.headers.get('location'), 'http://vm.example/nubes-test/akhq/');
|
||||
const res = await fetch(`${base}/nubes-test/`);
|
||||
assert.strictEqual(res.status, 200);
|
||||
assert.strictEqual(await res.text(), '<html>ok</html>');
|
||||
});
|
||||
});
|
||||
|
||||
test('GET / -> 302 to VM root', async () => {
|
||||
test('GET / -> proxies to upstream root', async () => {
|
||||
await withServer(async (base) => {
|
||||
const res = await fetch(`${base}/`, { redirect: 'manual' });
|
||||
assert.strictEqual(res.status, 302);
|
||||
assert.strictEqual(res.headers.get('location'), 'http://vm.example/');
|
||||
const res = await fetch(`${base}/`);
|
||||
assert.strictEqual(res.status, 200);
|
||||
assert.strictEqual(await res.text(), '<html>ok</html>');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user