v86/tests/api/reset.js
Fabian 23411f337e use emulator.destroy() over emulator.stop() to properly remove v86 instances
emulator.stop sometimes works (when the GC can figure out that .start()
is unreachable and nothing can call into the instance). However, some
resources, such as any WebSocket connection, need to be closed manually.
2024-12-20 10:41:09 -07:00

47 lines
1.2 KiB
JavaScript
Executable file

#!/usr/bin/env node
"use strict";
// This test checks that reset works
const TEST_RELEASE_BUILD = +process.env.TEST_RELEASE_BUILD;
const fs = require("fs");
var V86 = require(`../../build/${TEST_RELEASE_BUILD ? "libv86" : "libv86-debug"}.js`).V86;
process.on("unhandledRejection", exn => { throw exn; });
const config = {
bios: { url: __dirname + "/../../bios/seabios.bin" },
vga_bios: { url: __dirname + "/../../bios/vgabios.bin" },
cdrom: { url: __dirname + "/../../images/linux4.iso", async: true },
network_relay_url: "<UNUSED>",
autostart: true,
memory_size: 32 * 1024 * 1024,
filesystem: {},
log_level: 0,
disable_jit: +process.env.DISABLE_JIT,
};
const emulator = new V86(config);
let did_restart = false;
let serial_text = "";
emulator.add_listener("serial0-output-byte", function(byte)
{
var chr = String.fromCharCode(byte);
serial_text += chr;
if(serial_text.includes("Files send via emulator appear in /mnt/")) {
serial_text = "";
if(did_restart) {
console.log("Ok");
emulator.destroy();
}
else {
console.log("Calling restart()");
emulator.restart();
did_restart = true;
}
}
});