Skip to content

Commit

Permalink
actually load wownero when specified
Browse files Browse the repository at this point in the history
  • Loading branch information
Im-Beast committed Oct 15, 2024
1 parent ab0d28c commit a455f83
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 22 deletions.
50 changes: 30 additions & 20 deletions tests/compare.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
import { loadDylib, symbols as bindingsSymbols } from "../impls/monero.ts/src/bindings.ts";
import { moneroSymbols as symbols, type MoneroTsDylib, type WowneroTsDylib } from "../impls/monero.ts/src/symbols.ts";
import { loadMoneroDylib, loadWowneroDylib } 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]);
const coin = Deno.args[0] as "monero" | "wownero";
const version = Deno.args[1];
const walletInfo = JSON.parse(Deno.args[2]);

// 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,
const moneroSymbols = {
...symbols,

"MONERO_Wallet_secretViewKey": {
nonblocking: true,
Expand Down Expand Up @@ -48,19 +42,35 @@ const symbols = {
},
} as const;

const dylib = Deno.dlopen(`tests/libs/${version}/monero_libwallet2_api_c.so`, symbols);
loadDylib(dylib as Deno.DynamicLibrary<typeof bindingsSymbols>);
type ReplaceMonero<T extends string> = T extends `MONERO${infer Y}` ? `WOWNERO${Y}` : never;
type WowneroSymbols = { [Key in keyof typeof moneroSymbols as ReplaceMonero<Key>]: (typeof moneroSymbols)[Key] };
const wowneroSymbols = Object.fromEntries(
Object.entries(moneroSymbols).map(([key, value]) => [key.replace("MONERO", "WOWNERO"), value]),
) as WowneroSymbols;

let getKey: (wallet: Wallet, type: `${"secret" | "public"}${"Spend" | "View"}Key`) => Promise<string | null>;

if (coin === "monero") {
const dylib = Deno.dlopen(`tests/libs/${version}/monero_libwallet2_api_c.so`, moneroSymbols);
loadMoneroDylib(dylib as MoneroTsDylib);

getKey = async (wallet, type) =>
await readCString(await dylib.symbols[`MONERO_Wallet_${type}` as const](wallet.getPointer()));
} else {
const dylib = Deno.dlopen(`tests/libs/${version}/wownero_libwallet2_api_c.so`, wowneroSymbols);
loadWowneroDylib(dylib as WowneroTsDylib);

getKey = async (wallet, type) =>
await readCString(
await dylib.symbols[`WOWNERO_Wallet_${type}` as const](wallet.getPointer()),
);
}

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);

Expand Down
4 changes: 2 additions & 2 deletions tests/regression.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Deno.test(`Regression tests (${coin})`, async (t) => {
const walletInfo = await createWalletViaCli(coin, "dog", "sobaka");

for (const version of ["next", latestTag, "next"]) {
await $`deno run -A ./tests/compare.ts ${version} ${JSON.stringify(walletInfo)}`;
await $`deno run -A ./tests/compare.ts ${coin} ${version} ${JSON.stringify(walletInfo)}`;
}
});

Expand All @@ -28,7 +28,7 @@ Deno.test(`Regression tests (${coin})`, async (t) => {

for (const version of tags.toReversed()) {
if (version !== "next" && version !== tags[0]) await getMoneroC(coin, version);
await $`deno run -A ./tests/compare.ts ${version} ${JSON.stringify(walletInfo)}`;
await $`deno run -A ./tests/compare.ts ${coin} ${version} ${JSON.stringify(walletInfo)}`;
}

await Deno.remove("./tests/wallets", { recursive: true }).catch(() => {});
Expand Down

0 comments on commit a455f83

Please sign in to comment.