117 lines
3.5 KiB
JavaScript
117 lines
3.5 KiB
JavaScript
const { LoopbackReceiver } = require("../src/output/loopback");
|
|
const dgram = require("dgram");
|
|
|
|
describe("LoopbackReceiver", () => {
|
|
let receiver;
|
|
|
|
beforeEach(async () => {
|
|
receiver = new LoopbackReceiver();
|
|
await receiver.start();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await receiver.stop();
|
|
});
|
|
|
|
it("starts and stops listening", () => {
|
|
expect(receiver.isListening()).toBe(true);
|
|
});
|
|
|
|
it("captures an ArtDmx packet sent to localhost", async () => {
|
|
// Build a test packet
|
|
const { buildArtDmxPacket } = require("../src/output/artnet");
|
|
const slots = new Array(512).fill(0);
|
|
slots[0] = 42;
|
|
slots[1] = 84;
|
|
const packet = buildArtDmxPacket(3, slots);
|
|
|
|
const sendSocket = dgram.createSocket({ type: "udp4", reuseAddr: true });
|
|
await new Promise((resolve) => {
|
|
sendSocket.send(packet, 0, packet.length, 6454, "127.0.0.1", (err) => {
|
|
if (err) console.error(err);
|
|
resolve();
|
|
});
|
|
});
|
|
|
|
// Wait for receipt
|
|
await new Promise((r) => setTimeout(r, 200));
|
|
sendSocket.close();
|
|
|
|
const packets = receiver.getPackets(3);
|
|
expect(packets.length).toBeGreaterThanOrEqual(1);
|
|
expect(packets[0].dmxData[0]).toBe(42);
|
|
expect(packets[0].dmxData[1]).toBe(84);
|
|
});
|
|
|
|
it("getPackets filters by universe", async () => {
|
|
const { buildArtDmxPacket } = require("../src/output/artnet");
|
|
|
|
const sendUniverse = (u) => {
|
|
const slots = new Array(512).fill(0);
|
|
slots[0] = u;
|
|
const packet = buildArtDmxPacket(u, slots);
|
|
const s = dgram.createSocket({ type: "udp4", reuseAddr: true });
|
|
return new Promise((resolve) => {
|
|
s.send(packet, 0, packet.length, 6454, "127.0.0.1", (err) => {
|
|
if (err) console.error(err);
|
|
s.close();
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
|
|
await sendUniverse(1);
|
|
await sendUniverse(2);
|
|
await sendUniverse(1);
|
|
await new Promise((r) => setTimeout(r, 200));
|
|
|
|
const u1 = receiver.getPackets(1);
|
|
const u2 = receiver.getPackets(2);
|
|
expect(u1.length).toBe(2);
|
|
expect(u2.length).toBe(1);
|
|
});
|
|
|
|
it("clear removes captured packets", async () => {
|
|
const { buildArtDmxPacket } = require("../src/output/artnet");
|
|
const slots = new Array(512).fill(0);
|
|
const packet = buildArtDmxPacket(7, slots);
|
|
|
|
const sendSocket = dgram.createSocket({ type: "udp4", reuseAddr: true });
|
|
await new Promise((resolve) => {
|
|
sendSocket.send(packet, 0, packet.length, 6454, "127.0.0.1", (err) => {
|
|
if (err) console.error(err);
|
|
resolve();
|
|
});
|
|
});
|
|
await new Promise((r) => setTimeout(r, 200));
|
|
sendSocket.close();
|
|
|
|
expect(receiver.getPackets().length).toBeGreaterThanOrEqual(1);
|
|
receiver.clear();
|
|
expect(receiver.getPackets().length).toBe(0);
|
|
});
|
|
|
|
it("getLatest returns the most recent packet for a universe", async () => {
|
|
const { buildArtDmxPacket } = require("../src/output/artnet");
|
|
|
|
for (let i = 0; i < 3; i++) {
|
|
const slots = new Array(512).fill(0);
|
|
slots[0] = i * 10;
|
|
const packet = buildArtDmxPacket(9, slots);
|
|
const sendSocket = dgram.createSocket({ type: "udp4", reuseAddr: true });
|
|
await new Promise((resolve) => {
|
|
sendSocket.send(packet, 0, packet.length, 6454, "127.0.0.1", (err) => {
|
|
if (err) console.error(err);
|
|
resolve();
|
|
});
|
|
});
|
|
sendSocket.close();
|
|
}
|
|
await new Promise((r) => setTimeout(r, 200));
|
|
|
|
const latest = receiver.getLatest(9);
|
|
expect(latest).not.toBeNull();
|
|
expect(latest.dmxData[0]).toBe(20);
|
|
});
|
|
});
|