Spaces:
Runtime error
Runtime error
| import url from "node:url"; | |
| const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); | |
| process.on("unhandledRejection", exn => { throw exn; }); | |
| const TEST_RELEASE_BUILD = +process.env.TEST_RELEASE_BUILD; | |
| const { V86 } = await import(TEST_RELEASE_BUILD ? "../../build/libv86.mjs" : "../../src/main.js"); | |
| const config_async_cdrom = { | |
| bios: { url: __dirname + "/../../bios/seabios.bin" }, | |
| vga_bios: { url: __dirname + "/../../bios/vgabios.bin" }, | |
| cdrom: { url: __dirname + "/../../images/linux4.iso", async: true }, | |
| autostart: true, | |
| memory_size: 64 * 1024 * 1024, | |
| filesystem: {}, | |
| disable_jit: +process.env.DISABLE_JIT, | |
| log_level: 0, | |
| }; | |
| const config_sync_cdrom = { | |
| bios: { url: __dirname + "/../../bios/seabios.bin" }, | |
| vga_bios: { url: __dirname + "/../../bios/vgabios.bin" }, | |
| cdrom: { url: __dirname + "/../../images/linux4.iso", async: false }, | |
| autostart: true, | |
| memory_size: 64 * 1024 * 1024, | |
| filesystem: {}, | |
| disable_jit: +process.env.DISABLE_JIT, | |
| log_level: 0, | |
| }; | |
| const config_filesystem = { | |
| bios: { url: __dirname + "/../../bios/seabios.bin" }, | |
| vga_bios: { url: __dirname + "/../../bios/vgabios.bin" }, | |
| autostart: true, | |
| memory_size: 64 * 1024 * 1024, | |
| filesystem: {}, | |
| bzimage: { url: __dirname + "/../../images/buildroot-bzimage68.bin" }, | |
| cmdline: "tsc=reliable mitigations=off random.trust_cpu=on", | |
| network_relay_url: "<UNUSED>", | |
| disable_jit: +process.env.DISABLE_JIT, | |
| log_level: 0, | |
| }; | |
| const config_large_memory = { | |
| bios: { url: __dirname + "/../../bios/seabios.bin" }, | |
| vga_bios: { url: __dirname + "/../../bios/vgabios.bin" }, | |
| cdrom: { url: __dirname + "/../../images/linux4.iso", async: true }, | |
| autostart: true, | |
| memory_size: 2048 * 1024 * 1024, | |
| vga_memory_size: 512 * 1024 * 1024, | |
| network_relay_url: "<UNUSED>", | |
| disable_jit: +process.env.DISABLE_JIT, | |
| log_level: 0, | |
| }; | |
| async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } | |
| async function run_test(name, config, done) | |
| { | |
| const emulator = new V86(config); | |
| await sleep(2000); | |
| console.log("Saving: %s", name); | |
| const state = await emulator.save_state(); | |
| await sleep(1000); | |
| console.log("Restoring: %s", name); | |
| await emulator.restore_state(state); | |
| await emulator.wait_until_vga_screen_contains("~% "); | |
| await sleep(1000); | |
| emulator.keyboard_send_text("echo -n test; echo passed\n"); | |
| await sleep(1000); | |
| const lines = emulator.screen_adapter.get_text_screen(); | |
| if(!lines.some(line => line.startsWith("testpassed"))) | |
| { | |
| console.warn("Failed: " + name); | |
| console.warn(lines.map(line => line.replace(/\x00/g, " "))); | |
| process.exit(1); | |
| } | |
| console.log("Done: %s", name); | |
| emulator.destroy(); | |
| } | |
| (async function() { | |
| await run_test("async cdrom", config_async_cdrom); | |
| await run_test("sync cdrom", config_sync_cdrom); | |
| await run_test("filesystem", config_filesystem); | |
| await run_test("large memory size", config_large_memory); | |
| })(); | |