~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/atlibs-iroh

iroh transport for atlibs hosts: com.fedfork.exec.iroh.connect in Rust (atlibs-host) and JavaScript

0
0
main
41 lines · 2.6 KB Raw History
// node --test modules/*/test.mjs  (after `cargo wasm`; needs ../atlibs: its JS host and `cargo host`)
// Byte-equal to what js/user-data.js wrote (snapshots/), on both engines.
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { test } from "node:test";

import { runModuleRust } from "../../../atlibs/rust/host/conformance.mjs";
import { runModule } from "../../../atlibs/javascript/src/run-module/index.js";

const mod = { ...JSON.parse(readFileSync(new URL("module.json", import.meta.url), "utf8")), module: readFileSync(new URL("../../target/wasm32-unknown-unknown/release/iroh_user_data.wasm", import.meta.url)) };
const snapshot = (name) => readFileSync(new URL(`snapshots/${name}.cloud-config`, import.meta.url), "utf8");
const KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExample me@host";
const ctx = { wasm: { run: async ({ module, entry, input }) => {
	const x = new WebAssembly.Instance(new WebAssembly.Module(module), {}).exports;
	const data = new TextEncoder().encode(JSON.stringify(input));
	const ptr = x.alloc(data.length);
	new Uint8Array(x.memory.buffer, ptr, data.length).set(data);
	const packed = BigInt.asUintN(64, x[entry](ptr, data.length));
	return JSON.parse(new TextDecoder().decode(new Uint8Array(x.memory.buffer, Number(packed >> 32n), Number(packed & 0xffffffffn))));
} } };

for (const [engine, run] of [["js", runModule], ["rust", runModuleRust]]) {
	const ud = async (input) => {
		const ran = await run(ctx, mod, "iroh_user_data", input, async () => assert.fail("no calls"), { wasm: mod.module });
		if (ran.error) throw new Error(ran.error);
		return ran.result.user_data;
	};
	test(`iroh_user_data (${engine}): the snapshots, ssh only, more files, bad input`, async () => {
		assert.equal(await ud({ ssh_key: KEY }), snapshot("iroh"));
		assert.equal(await ud({ ssh_key: KEY + "\n", dumbpipe_version: "0.38.0" }), snapshot("iroh-0.38.0"));
		const doc = (u) => JSON.parse(u.slice("#cloud-config\n".length));
		const ssh = doc(await ud({ ssh_key: KEY, dumbpipe: false }));
		assert.deepEqual(ssh.write_files.map((f) => f.path), ["/root/.ssh/authorized_keys", "/etc/ssh/sshd_config.d/10-iroh.conf"]);
		const more = { path: "/etc/x", owner: "root:root", permissions: "0644", content: "x\n" };
		assert.deepEqual(doc(await ud({ ssh_key: KEY, write_files: [more] })).write_files.at(-1), more);
		await assert.rejects(ud({}), /ssh_key/);
		await assert.rejects(ud({ ssh_key: "nope" }), /ssh_key/);
		await assert.rejects(ud({ ssh_key: `${KEY}\nssh-rsa AAAA x` }), /ssh_key/);
		await assert.rejects(ud({ ssh_key: KEY, dumbpipe_version: "1; rm -rf /" }), /dumbpipe_version/);
	});
}