use random port for server, fix console parsing for benchmark

This commit is contained in:
SuperMaxusa 2025-04-21 10:35:11 +03:00 committed by Fabian
parent 06f33e4a76
commit 3367bedec8
3 changed files with 42 additions and 22 deletions

View file

@ -6,7 +6,6 @@ import { Worker } from "node:worker_threads";
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
const USE_VIRTIO = !!process.env.USE_VIRTIO;
const SERVER_PORT = parseInt(process.env.SERVER_PORT, 10) || 8686;
const BENCHFILE_SIZE = (parseInt(process.env.BENCHFILE_SIZE_MB, 10) || 32) * 1024 * 1024;
const { V86 } = await import("../../build/libv86.mjs");
@ -14,6 +13,7 @@ const { V86 } = await import("../../build/libv86.mjs");
const LOG_SERIAL = true;
const SHOW_LOGS = false;
var SERVER_PORT = parseInt(process.env.SERVER_PORT, 10) || 0;
const server = new Worker(__dirname + "../devices/fetch_testserver.js", { workerData: { port: SERVER_PORT, benchsize: BENCHFILE_SIZE } });
server.on("error", (e) => { throw new Error("server: " + e); });
@ -30,6 +30,17 @@ const emulator = new V86({
}
});
emulator.bus.register("emulator-ready", function()
{
server.on("message", function(msg) {
if(msg.port)
{
SERVER_PORT = msg.port;
console.log("Server started on port " + SERVER_PORT);
}
});
});
emulator.bus.register("emulator-started", function()
{
console.log("Booting now, please stand by");
@ -55,32 +66,27 @@ emulator.add_listener("serial0-output-byte", function(byte)
if(serial_text.endsWith("\t<DONE>"))
{
console.log();
console.log("\n---\n");
emulator.destroy();
server.terminate();
const regex = /<(\d+)><(\d+)>\t<DONE>/.exec(serial_text);
const exitcode = parseInt(regex[1], 10);
const speed = parseInt(regex[2], 10); // in bytes
if(isNaN(exitcode))
if(!regex)
{
console.error("Can't parse exit code");
console.error("Can't parse console log");
process.exit(1);
}
const exitcode = parseInt(regex[1], 10);
const speed = parseInt(regex[2], 10); // in bytes
if(exitcode !== 0)
{
console.error("Bench failed, curl returned non-zero exit code %s", exitcode);
process.exit(exitcode);
}
if(isNaN(speed))
{
console.error("Can't parse bench speed");
process.exit(1);
}
console.log("Average download speed: %s kB/s", (speed / 1024).toFixed(2));
}
});

View file

@ -8,12 +8,12 @@ const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
process.on("unhandledRejection", exn => { throw exn; });
const USE_VIRTIO = !!process.env.USE_VIRTIO;
const SERVER_PORT = parseInt(process.env.SERVER_PORT, 10) || 8686;
const TEST_RELEASE_BUILD = +process.env.TEST_RELEASE_BUILD;
const { V86 } = await import(TEST_RELEASE_BUILD ? "../../build/libv86.mjs" : "../../src/main.js");
const { V86 } = await import(TEST_RELEASE_BUILD ? "../../build/libv86.mjs" : "../../src/main.js");
const SHOW_LOGS = false;
var SERVER_PORT = parseInt(process.env.SERVER_PORT, 10) || 0;
const server = new Worker(__dirname + "fetch_testserver.js", { workerData: { port: SERVER_PORT, benchsize: 0 } });
server.on("error", (e) => { throw new Error("server: " + e); });
@ -265,6 +265,14 @@ const emulator = new V86({
});
emulator.add_listener("emulator-ready", function () {
server.on("message", function(msg) {
if(msg.port)
{
SERVER_PORT = msg.port;
console.log("Server started on port " + SERVER_PORT);
}
});
let network_adapter = emulator.network_adapter;
let original_fetch = network_adapter.fetch;
network_adapter.fetch = (url, opts) => {

View file

@ -15,30 +15,36 @@ const benchfile = Buffer.alloc(benchsize);
function get_handler(request, response) {
if(request.url === "/") {
response.write("This text is from the local server");
response.end("This text is from the local server");
} else if(request.url === "/bench") {
response.setHeader("content-type", "application/octet-stream");
response.setHeader("content-length", benchsize.toString(10));
response.write(benchfile);
response.end();
} else if(request.url === "/header") {
response.setHeader("x-server-test", request.headers["x-client-test"].split("").join("_") || "none");
response.writeHead(200, { "x-server-test": request.headers["x-client-test"].split("").join("_") || "none" });
response.end();
} else if(request.url === "/redirect") {
response.writeHead(307, { "location": "/" });
response.end();
} else {
response.writeHead(404);
response.write("Unknown endpoint");
response.end("Unknown endpoint");
}
}
createServer(function(request, response) {
var server = createServer(function(request, response) {
switch(request.method) {
case "GET":
get_handler(request, response);
break;
default:
response.writeHead(405);
response.write("Unknown method");
response.end("Unknown method");
break;
}
response.end();
}).listen(port);
});
server.listen(port, () => {
parentPort.postMessage({ port: server.address().port });
});