mirror of
https://github.com/copy/v86.git
synced 2025-12-31 04:23:15 +00:00
use random port for server, fix console parsing for benchmark
This commit is contained in:
parent
06f33e4a76
commit
3367bedec8
3 changed files with 42 additions and 22 deletions
|
|
@ -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));
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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) => {
|
||||
|
|
|
|||
|
|
@ -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 });
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue