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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
var gPort;
var gExtraListener;
function run_test()
{
do_print("Starting test at " + new Date().toTimeString());
initTestDebuggerServer();
add_task(test_socket_conn);
add_task(test_socket_shutdown);
add_test(test_pipe_conn);
run_next_test();
}
function* test_socket_conn()
{
do_check_eq(DebuggerServer.listeningSockets, 0);
let AuthenticatorType = DebuggerServer.Authenticators.get("PROMPT");
let authenticator = new AuthenticatorType.Server();
authenticator.allowConnection = () => {
return DebuggerServer.AuthenticationResult.ALLOW;
};
let listener = DebuggerServer.createListener();
do_check_true(listener);
listener.portOrPath = -1;
listener.authenticator = authenticator;
listener.open();
do_check_eq(DebuggerServer.listeningSockets, 1);
gPort = DebuggerServer._listeners[0].port;
do_print("Debugger server port is " + gPort);
// Open a second, separate listener
gExtraListener = DebuggerServer.createListener();
gExtraListener.portOrPath = -1;
gExtraListener.authenticator = authenticator;
gExtraListener.open();
do_check_eq(DebuggerServer.listeningSockets, 2);
do_print("Starting long and unicode tests at " + new Date().toTimeString());
let unicodeString = "(╯°□°)╯︵ ┻━┻";
let transport = yield DebuggerClient.socketConnect({
host: "127.0.0.1",
port: gPort
});
// Assert that connection settings are available on transport object
let settings = transport.connectionSettings;
do_check_eq(settings.host, "127.0.0.1");
do_check_eq(settings.port, gPort);
let closedDeferred = defer();
transport.hooks = {
onPacket: function (aPacket) {
this.onPacket = function (aPacket) {
do_check_eq(aPacket.unicode, unicodeString);
transport.close();
};
// Verify that things work correctly when bigger than the output
// transport buffers and when transporting unicode...
transport.send({to: "root",
type: "echo",
reallylong: really_long(),
unicode: unicodeString});
do_check_eq(aPacket.from, "root");
},
onClosed: function (aStatus) {
closedDeferred.resolve();
},
};
transport.ready();
return closedDeferred.promise;
}
function* test_socket_shutdown()
{
do_check_eq(DebuggerServer.listeningSockets, 2);
gExtraListener.close();
do_check_eq(DebuggerServer.listeningSockets, 1);
do_check_true(DebuggerServer.closeAllListeners());
do_check_eq(DebuggerServer.listeningSockets, 0);
// Make sure closing the listener twice does nothing.
do_check_false(DebuggerServer.closeAllListeners());
do_check_eq(DebuggerServer.listeningSockets, 0);
do_print("Connecting to a server socket at " + new Date().toTimeString());
try {
let transport = yield DebuggerClient.socketConnect({
host: "127.0.0.1",
port: gPort
});
} catch (e) {
if (e.result == Cr.NS_ERROR_CONNECTION_REFUSED ||
e.result == Cr.NS_ERROR_NET_TIMEOUT) {
// The connection should be refused here, but on slow or overloaded
// machines it may just time out.
do_check_true(true);
return;
} else {
throw e;
}
}
// Shouldn't reach this, should never connect.
do_check_true(false);
}
function test_pipe_conn()
{
let transport = DebuggerServer.connectPipe();
transport.hooks = {
onPacket: function (aPacket) {
do_check_eq(aPacket.from, "root");
transport.close();
},
onClosed: function (aStatus) {
run_next_test();
}
};
transport.ready();
}
|