summaryrefslogtreecommitdiffstats
path: root/devtools/shared/transport/tests/unit/test_transport_events.js
blob: ae20f6cf814f95f6e393e16c8bb5c2f7cbafaef4 (plain)
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
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

function run_test() {
  initTestDebuggerServer();

  add_task(function* () {
    yield test_transport_events("socket", socket_transport);
    yield test_transport_events("local", local_transport);
    DebuggerServer.destroy();
  });

  run_next_test();
}

function* test_transport_events(name, transportFactory) {
  do_print(`Started testing of transport: ${name}`);

  do_check_eq(Object.keys(DebuggerServer._connections).length, 0);

  let transport = yield transportFactory();

  // Transport expects the hooks to be not null
  transport.hooks = {
    onPacket: () => {},
    onClosed: () => {},
  };

  let rootReceived = transport.once("packet", (event, packet) => {
    do_print(`Packet event: ${event} ${JSON.stringify(packet)}`);
    do_check_eq(event, "packet");
    do_check_eq(packet.from, "root");
  });

  transport.ready();
  yield rootReceived;

  let echoSent = transport.once("send", (event, packet) => {
    do_print(`Send event: ${event} ${JSON.stringify(packet)}`);
    do_check_eq(event, "send");
    do_check_eq(packet.to, "root");
    do_check_eq(packet.type, "echo");
  });

  let echoReceived = transport.once("packet", (event, packet) => {
    do_print(`Packet event: ${event} ${JSON.stringify(packet)}`);
    do_check_eq(event, "packet");
    do_check_eq(packet.from, "root");
    do_check_eq(packet.type, "echo");
  });

  transport.send({ to: "root", type: "echo" });
  yield echoSent;
  yield echoReceived;

  let clientClosed = transport.once("close", (event) => {
    do_print(`Close event: ${event}`);
    do_check_eq(event, "close");
  });

  let serverClosed = DebuggerServer.once("connectionchange", (event, type) => {
    do_print(`Server closed`);
    do_check_eq(event, "connectionchange");
    do_check_eq(type, "closed");
  });

  transport.close();

  yield clientClosed;
  yield serverClosed;

  do_print(`Finished testing of transport: ${name}`);
}