-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathListener.spec.ts
89 lines (78 loc) · 2.58 KB
/
Listener.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import Server from "../src/Server";
import Service from "../src/Service";
import Listener from "../src/Listener";
import Transport from "../src/transports/Transport";
import LocalTransport from "../src/transports/LocalTransport";
const type = "jsremote";
const name = "remote receiver";
const port = 4444;
describe("Listener", () => {
let transport: Transport;
let server: Server;
let service: Service;
let listener: Listener;
describe("new Listener({ type }).listen()", () => {
beforeEach(async () => {
transport = new LocalTransport({
referrerOptions: { address: "192.168.1.51" },
addresses: [{ family: "IPv4", address: "192.168.1.55" }]
});
server = new Server({ transport });
service = new Service(server, { type, name, port });
listener = new Listener(server, { type });
});
afterEach(async () => {
await service.destroy();
await listener.destroy();
await server.destroy();
});
it("emits up event for matching service type", async () => {
const upDetector = new Promise<void>(resolve => {
listener.on("up", function onUp(remoteService) {
if (remoteService.name === name) {
listener.removeListener("up", onUp);
resolve();
}
});
});
await listener.listen();
await service.spread();
await upDetector;
});
it("emits down event for matching service type", async () => {
const downDetector = new Promise<void>(resolve => {
listener.on("down", function onDown(remoteService) {
if (remoteService.name === name) {
listener.removeListener("down", onDown);
resolve();
}
});
});
await listener.listen();
await service.spread();
await service.destroy();
await downDetector;
});
it("removes SRV record", async () => {
const upDetector = new Promise<void>(resolve => {
listener.on("up", function onUp(remoteService) {
if (remoteService.name !== name) return;
listener.removeListener("up", onUp);
setTimeout(() => resolve(), 200);
});
});
const downDetector = new Promise<void>(resolve => {
listener.on("down", function onDown(remoteService) {
if (remoteService.name !== name) return;
listener.removeListener("down", onDown);
setTimeout(() => resolve(), 200);
});
});
await listener.listen();
await service.spread();
await upDetector;
await service.destroy();
await downDetector;
});
});
});