Browse Source

Add test for #753

Fabian 1 year ago
parent
commit
6b22190c2d
1 changed files with 53 additions and 0 deletions
  1. 53 0
      tests/api/serial.js

+ 53 - 0
tests/api/serial.js

@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+"use strict";
+
+const TEST_RELEASE_BUILD = +process.env.TEST_RELEASE_BUILD;
+
+const assert = require("assert").strict;
+const fs = require("fs");
+const crypto = require("crypto");
+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/linux.iso" },
+    network_relay_url: "<UNUSED>",
+    autostart: true,
+    memory_size: 32 * 1024 * 1024,
+    filesystem: {},
+    log_level: 0,
+    screen_dummy: true,
+};
+
+const emulator = new V86(config);
+
+let serial_data = [];
+
+emulator.automatically([
+    { sleep: 1 },
+    { vga_text: "/root% " },
+    { call: () => { console.log("Booted, sending file to ttyS0"); } },
+    { keyboard_send: "cat /bin/busybox > /dev/ttyS0\n" },
+]);
+
+const timeout = setTimeout(() => {
+    throw new Error("Timeout");
+}, 60 * 1000);
+
+emulator.add_listener("serial0-output-char", function(chr)
+{
+    serial_data.push(chr.charCodeAt(0));
+
+    if(serial_data.length === 510277)
+    {
+        const hash = crypto.createHash("sha256");
+        hash.update(new Uint8Array(serial_data));
+        assert("da1fb5b421123c58080a59832675632505b8c139a8d7ecd1c31591ca5c65cea6" === hash.digest("hex"));
+        console.log("ok");
+        clearTimeout(timeout);
+        emulator.stop();
+    }
+});