cranker-router
Version:
A cranker router in Javascript.
85 lines (66 loc) • 2.73 kB
JavaScript
const fs = require("fs");
const path = require("path");
const express = require("express");
const fetch = require("node-fetch");
const bodyParser = require("body-parser");
const assert = require("assert");
const multer = require("multer");
const connectToRouters = require("cranker-connector");
const crankerRouter = require("./server.js");
const httpClient = require("./http-client.js");
const test = async function () {
const app = express();
const fileName = path.join(__dirname, "teststuff", "breakfast.jpg");
const stats = await fs.promises.stat(fileName);
const originalSize = stats.size;
// Setup a target server to crank to
app.get("/test/text", async (req, res) => {
return res.send("<h1>hello world</h1>");
});
app.get("/test/file", async (req, res) => {
return res.sendFile(fileName);
});
const listener = app.listen(0, function () {
console.log("listening on", listener.address().port);
});
const targetPort = listener.address().port;
// Setup a cranker router
const routerObject = await crankerRouter(0);
const routerPort = routerObject.getListener().address().port;
const crankerPort = routerObject.getCrankerListener().address().port;
console.log(">test router port", routerPort, "cranker port", crankerPort);
// Now crank from the router to the target server
const routers = await connectToRouters(
[`localhost:${crankerPort}`],
"test",
`http://localhost:${targetPort}`, {
_do_untls: true,
deferConnect: true
}
);
await new Promise((resolve, reject) => {
const timeout = setTimeout(
evt => reject(new Error("test-big> didn't crank connect.")),
1000
);
routers.once("crankerConnected", evt => {
console.log("test-big> cranker connected");
clearTimeout(timeout);
resolve(true);
});
routers.connect();
});
const textResponse = await fetch(`http://localhost:${routerPort}/test/text`);
assert(textResponse.status === 200, `test-big> the response status is ${textResponse.status}`);
const body = await textResponse.text();
assert(body === "<h1>hello world</h1>");
const imgResponse = await fetch(`http://localhost:${routerPort}/test/file`);
assert(imgResponse.status === 200, `test-big> the response status is ${imgResponse.status}`);
const imgBody = await imgResponse.blob();
assert(originalSize === imgBody.size, `test-big> the size of the fetched image is wrong ${originalSize} !== ${body.size}`);
routers.close();
routerObject.close();
listener.close();
};
test().then();
// End