summaryrefslogtreecommitdiff
path: root/tests/compare.ts
diff options
context:
space:
mode:
Diffstat (limited to 'tests/compare.ts')
-rwxr-xr-xtests/compare.ts70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/compare.ts b/tests/compare.ts
new file mode 100755
index 0000000..9a8fa8d
--- /dev/null
+++ b/tests/compare.ts
@@ -0,0 +1,70 @@
+import { loadDylib, symbols as bindingsSymbols } from "../impls/monero.ts/src/bindings.ts";
+import { Wallet, WalletManager } from "../impls/monero.ts/mod.ts";
+import { readCString } from "../impls/monero.ts/src/utils.ts";
+import { assertEquals } from "jsr:@std/assert";
+
+const version = Deno.args[0];
+const walletInfo = JSON.parse(Deno.args[1]);
+
+// Those don't exist on older versions of monero_c
+// @ts-expect-error -
+delete bindingsSymbols.MONERO_checksum_wallet2_api_c_h;
+// @ts-expect-error -
+delete bindingsSymbols.MONERO_checksum_wallet2_api_c_cpp;
+// @ts-expect-error -
+delete bindingsSymbols.MONERO_checksum_wallet2_api_c_exp;
+
+const symbols = {
+ ...bindingsSymbols,
+
+ "MONERO_Wallet_secretViewKey": {
+ nonblocking: true,
+ // void* wallet_ptr
+ parameters: ["pointer"],
+ // const char*
+ result: "pointer",
+ },
+ "MONERO_Wallet_publicViewKey": {
+ nonblocking: true,
+ // void* wallet_ptr
+ parameters: ["pointer"],
+ // const char*
+ result: "pointer",
+ },
+
+ "MONERO_Wallet_secretSpendKey": {
+ nonblocking: true,
+ // void* wallet_ptr
+ parameters: ["pointer"],
+ // const char*
+ result: "pointer",
+ },
+ "MONERO_Wallet_publicSpendKey": {
+ nonblocking: true,
+ // void* wallet_ptr
+ parameters: ["pointer"],
+ // const char*
+ result: "pointer",
+ },
+} as const;
+
+const dylib = Deno.dlopen(`tests/libs/${version}/monero_libwallet2_api_c.so`, symbols);
+loadDylib(dylib as Deno.DynamicLibrary<typeof bindingsSymbols>);
+
+const walletManager = await WalletManager.new();
+const wallet = await Wallet.open(walletManager, walletInfo.path, walletInfo.password);
+
+assertEquals(await wallet.address(), walletInfo.address);
+
+const getKey = async (wallet: Wallet, type: `${"secret" | "public"}${"Spend" | "View"}Key`) =>
+ await readCString(
+ await dylib.symbols[`MONERO_Wallet_${type}` as const](wallet.getPointer()),
+ );
+
+assertEquals(await getKey(wallet, "publicSpendKey"), walletInfo.publicSpendKey);
+assertEquals(await getKey(wallet, "secretSpendKey"), walletInfo.secretSpendKey);
+
+assertEquals(await getKey(wallet, "publicViewKey"), walletInfo.publicViewKey);
+assertEquals(await getKey(wallet, "secretViewKey"), walletInfo.secretViewKey);
+
+await wallet.store(walletInfo.path);