js-waku/packages/discovery/src/dns/enrtree.spec.ts
Danish Arora 1e86c3d63e
feat!: @waku/discovery (#1876)
* initialise the new package

* move dns-discovery

* move peer-exchange

* move local-peer-cache-discovery

* add polyfill for node - dynamic import

* update size-limit

* update release-please

* chore: update pacakge desc

* chore: cleanup

* add peer-exchange and local peer cache to size-limit
2024-03-12 15:56:49 +05:30

96 lines
2.9 KiB
TypeScript

import { expect } from "chai";
import { ENRTree } from "./enrtree.js";
import testData from "./testdata.json" assert { type: "json" };
const dns = testData.dns;
describe("ENRTree", () => {
// Root DNS entries
it("ENRTree (root): should parse and verify and DNS root entry", () => {
const subdomain = ENRTree.parseAndVerifyRoot(dns.enrRoot, dns.publicKey);
expect(subdomain).to.eq("JORXBYVVM7AEKETX5DGXW44EAY");
});
it("ENRTree (root): should error if DNS root entry is mis-prefixed", () => {
try {
ENRTree.parseAndVerifyRoot(dns.enrRootBadPrefix, dns.publicKey);
} catch (err: unknown) {
const e = err as Error;
expect(e.toString()).includes(
"ENRTree root entry must start with 'enrtree-root:'"
);
}
});
it("ENRTree (root): should error if DNS root entry signature is invalid", () => {
try {
ENRTree.parseAndVerifyRoot(dns.enrRootBadSig, dns.publicKey);
} catch (err: unknown) {
const e = err as Error;
expect(e.toString()).includes("Unable to verify ENRTree root signature");
}
});
it("ENRTree (root): should error if DNS root entry is malformed", () => {
try {
ENRTree.parseAndVerifyRoot(dns.enrRootMalformed, dns.publicKey);
} catch (err: unknown) {
const e = err as Error;
expect(e.toString()).includes("Could not parse ENRTree root entry");
}
});
// Tree DNS entries
it("ENRTree (tree): should parse a DNS tree entry", () => {
const { publicKey, domain } = ENRTree.parseTree(dns.enrTree);
expect(publicKey).to.eq(dns.publicKey);
expect(domain).to.eq("nodes.example.org");
});
it("ENRTree (tree): should error if DNS tree entry is mis-prefixed", () => {
try {
ENRTree.parseTree(dns.enrTreeBadPrefix);
} catch (err: unknown) {
const e = err as Error;
expect(e.toString()).includes(
"ENRTree tree entry must start with 'enrtree:'"
);
}
});
it("ENRTree (tree): should error if DNS tree entry is misformatted", () => {
try {
ENRTree.parseTree(dns.enrTreeMalformed);
} catch (err: unknown) {
const e = err as Error;
expect(e.toString()).includes("Could not parse ENRTree tree entry");
}
});
// Branch entries
it("ENRTree (branch): should parse and verify a single component DNS branch entry", () => {
const expected = [
"D2SNLTAGWNQ34NTQTPHNZDECFU",
"67BLTJEU5R2D5S3B4QKJSBRFCY",
"A2HDMZBB4JIU53VTEGC4TG6P4A"
];
const branches = ENRTree.parseBranch(dns.enrBranch);
expect(branches).to.deep.eq(expected);
});
it("ENRTree (branch): should error if DNS branch entry is mis-prefixed", () => {
try {
ENRTree.parseBranch(dns.enrBranchBadPrefix);
} catch (err: unknown) {
const e = err as Error;
expect(e.toString()).includes(
"ENRTree branch entry must start with 'enrtree-branch:'"
);
}
});
});