UNPKG

cranker-router

Version:
85 lines (66 loc) 2.73 kB
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