Browse Source

state test: test that vm still runs after restoring

Fabian 4 months ago
parent
commit
2d0497eba1
1 changed files with 27 additions and 1 deletions
  1. 27 1
      tests/api/state.js

+ 27 - 1
tests/api/state.js

@@ -16,6 +16,7 @@ const config_async_cdrom = {
     autostart: true,
     memory_size: 32 * 1024 * 1024,
     filesystem: {},
+    screen_dummy: true,
     disable_jit: +process.env.DISABLE_JIT,
     log_level: 0,
 };
@@ -27,6 +28,7 @@ const config_sync_cdrom = {
     autostart: true,
     memory_size: 32 * 1024 * 1024,
     filesystem: {},
+    screen_dummy: true,
     disable_jit: +process.env.DISABLE_JIT,
     log_level: 0,
 };
@@ -40,6 +42,7 @@ const config_filesystem = {
     bzimage: { url: __dirname + "/../../images/buildroot-bzimage.bin" },
     cmdline: "tsc=reliable mitigations=off random.trust_cpu=on",
     network_relay_url: "<UNUSED>",
+    screen_dummy: true,
     disable_jit: +process.env.DISABLE_JIT,
     log_level: 0,
 };
@@ -52,17 +55,24 @@ const config_large_memory = {
     memory_size: 2048 * 1024 * 1024,
     vga_memory_size: 512 * 1024 * 1024,
     network_relay_url: "<UNUSED>",
+    screen_dummy: true,
     disable_jit: +process.env.DISABLE_JIT,
     log_level: 0,
 };
 
 async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
 
+function screen_contains(emulator, text)
+{
+    const lines = emulator.screen_adapter.get_text_screen();
+    return lines.some(line => line.startsWith(text));
+}
+
 async function run_test(name, config, done)
 {
     const emulator = new V86(config);
 
-    await sleep(5000);
+    await sleep(2000);
 
     console.log("Saving: %s", name);
     const state = await emulator.save_state();
@@ -72,8 +82,24 @@ async function run_test(name, config, done)
     console.log("Restoring: %s", name);
     await emulator.restore_state(state);
 
+    do
+    {
+        await sleep(1000);
+    }
+    while(!screen_contains(emulator, "~% "));
+
+    emulator.keyboard_send_text("echo -n test; echo passed\n");
+
     await sleep(1000);
 
+    const lines = emulator.screen_adapter.get_text_screen();
+    if(!screen_contains(emulator, "testpassed"))
+    {
+        console.warn("Failed: " + name);
+        console.warn(lines.map(line => line.replace(/\x00/g, " ")));
+        process.exit(1);
+    }
+
     console.log("Done: %s", name);
     emulator.stop();
 }