mirror of
https://github.com/logos-messaging/logos-messaging-js.git
synced 2026-01-16 15:03:10 +00:00
* chore: update noise * update: package.lock * update: @chainsafe/libp2p-gossipsub * rm unwanted libp2p interface deps & bump up libp2p * refactor code for new deps * update: new package.lock * setup prettier, refactor eslint and rm trailing commas * update package.lock * fix build * import type for interface * fix imports for merge * update typedoc exports * add: CustomEvent import * use new libp2p interface * add aegir as dev dep for tests
168 lines
4.8 KiB
TypeScript
168 lines
4.8 KiB
TypeScript
import type { Waku2 } from "@waku/interfaces";
|
|
import { expect } from "chai";
|
|
|
|
import { decodeWaku2, encodeWaku2 } from "./waku2_codec.js";
|
|
|
|
const waku2FieldEncodings = {
|
|
relay: 1,
|
|
store: 2,
|
|
filter: 4,
|
|
lightPush: 8,
|
|
allTrue: 15,
|
|
allFalse: 0,
|
|
relayAndFilterTrue: 5,
|
|
storeAndLightPushTrue: 10
|
|
};
|
|
|
|
describe("ENR waku2 codec", function () {
|
|
let protocols: Waku2;
|
|
|
|
beforeEach(function () {
|
|
protocols = {
|
|
relay: false,
|
|
store: false,
|
|
filter: false,
|
|
lightPush: false
|
|
};
|
|
});
|
|
|
|
context("Encoding", function () {
|
|
it("should be able to encode the field with only RELAY set to true", () => {
|
|
protocols.relay = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.relay);
|
|
});
|
|
|
|
it("should be able to encode the field with only STORE set to true", () => {
|
|
protocols.store = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.store);
|
|
});
|
|
|
|
it("should be able to encode the field with only FILTER set to true", () => {
|
|
protocols.filter = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.filter);
|
|
});
|
|
|
|
it("should be able to encode the field with only LIGHTPUSH set to true", () => {
|
|
protocols.lightPush = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.lightPush);
|
|
});
|
|
|
|
it("should be able to encode the field with ALL protocols set to true", () => {
|
|
protocols.relay = true;
|
|
protocols.store = true;
|
|
protocols.filter = true;
|
|
protocols.lightPush = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.allTrue);
|
|
});
|
|
|
|
it("should be able to encode the field with ALL protocols set to false", () => {
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.allFalse);
|
|
});
|
|
|
|
it("should be able to encode the field with RELAY and FILTER protocols set to true", () => {
|
|
protocols.relay = true;
|
|
protocols.filter = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.relayAndFilterTrue);
|
|
});
|
|
|
|
it("should be able to encode the field with STORE and LIGHTPUSH protocols set to true", () => {
|
|
protocols.store = true;
|
|
protocols.lightPush = true;
|
|
|
|
const byte = encodeWaku2(protocols);
|
|
|
|
expect(byte).to.eq(waku2FieldEncodings.storeAndLightPushTrue);
|
|
});
|
|
});
|
|
|
|
context("Decoding", function () {
|
|
it("should be able to decode the field with only RELAY set to true", () => {
|
|
const byte = waku2FieldEncodings.relay;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.relay).to.be.true;
|
|
});
|
|
|
|
it("should be able to decode the field with only FILTER set to true", () => {
|
|
const byte = waku2FieldEncodings.filter;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.filter).to.be.true;
|
|
});
|
|
|
|
it("should be able to decode the field with only STORE set to true", () => {
|
|
const byte = waku2FieldEncodings.store;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.store).to.be.true;
|
|
});
|
|
|
|
it("should be able to decode the field with only LIGHTPUSH set to true", () => {
|
|
const byte = waku2FieldEncodings.lightPush;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.lightPush).to.be.true;
|
|
});
|
|
|
|
it("should be able to decode the field with ALL protocols set to true", () => {
|
|
const byte = waku2FieldEncodings.allTrue;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.relay).to.be.true;
|
|
expect(result.store).to.be.true;
|
|
expect(result.filter).to.be.true;
|
|
expect(result.lightPush).to.be.true;
|
|
});
|
|
|
|
it("should be able to decode the field with ALL protocols set to false", () => {
|
|
const byte = waku2FieldEncodings.allFalse;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.relay).to.be.false;
|
|
expect(result.store).to.be.false;
|
|
expect(result.filter).to.be.false;
|
|
expect(result.lightPush).to.be.false;
|
|
});
|
|
|
|
it("should be able to decode the field with RELAY and FILTER protocols set to true", () => {
|
|
const byte = waku2FieldEncodings.relayAndFilterTrue;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.relay).to.be.true;
|
|
expect(result.store).to.be.false;
|
|
expect(result.filter).to.be.true;
|
|
expect(result.lightPush).to.be.false;
|
|
});
|
|
|
|
it("should be able to decode the field with STORE and LIGHTPUSH protocols set to true", () => {
|
|
const byte = waku2FieldEncodings.storeAndLightPushTrue;
|
|
const result = decodeWaku2(byte);
|
|
|
|
expect(result.relay).to.be.false;
|
|
expect(result.store).to.be.true;
|
|
expect(result.filter).to.be.false;
|
|
expect(result.lightPush).to.be.true;
|
|
});
|
|
});
|
|
});
|