Skip to content

Commit 5bc6060

Browse files
authored
fix broken generic_core tests (#2730)
* add missing handler queues to mocks * remove last remnants of freedom wrapper in sockstortc mocks * have RemoteInstance spec use mocks, fixing tests * re-enable broken generic_core tests
1 parent 8990e44 commit 5bc6060

File tree

5 files changed

+45
-74
lines changed

5 files changed

+45
-74
lines changed

Gruntfile.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1208,11 +1208,6 @@ module.exports = function(grunt) {
12081208
Rule.getTests('src', 'generic_core'),
12091209
Rule.getTests('src', 'generic_ui/scripts')
12101210
).map((test) => {
1211-
// TODO: Fix and re-enable these tests (Issue #2727).
1212-
if (test === 'generic_core/remote-connection' ||
1213-
test === 'generic_core/remote-instance') {
1214-
return [];
1215-
}
12161211
return Rule.buildAndRunTest(test, grunt);
12171212
})
12181213
));

src/generic_core/remote-connection.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ describe('remote_connection.RemoteConnection', () => {
146146

147147
start.then(() => {
148148
// trigger the events
149-
socksToRtc.events['bytesReceivedFromPeer'](1234);
150-
socksToRtc.events['bytesSentToPeer'](4321);
149+
socksToRtc.bytesReceivedFromPeer.handle(1234);
150+
socksToRtc.bytesSentToPeer.handle(4321);
151151

152152
// updateSpy should not get called immediately for byte updates
153153
jasmine.clock().tick(1);

src/generic_core/remote-instance.spec.ts

Lines changed: 35 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ import local_storage = require('./storage');
3333
import net = require('../lib/net/net.types');
3434
import local_instance = require('./local-instance');
3535
import bridge = require('../lib/bridge/bridge');
36-
36+
import rtc_to_net_mock = require('../mocks/rtc-to-net');
37+
import socks_to_rtc_mock = require('../mocks/socks-to-rtc');
3738

3839
describe('remote_instance.RemoteInstance', () => {
3940

@@ -145,40 +146,22 @@ describe('remote_instance.RemoteInstance', () => {
145146
});
146147

147148
describe('proxying', () => {
148-
149149
var alice = new remote_instance.RemoteInstance(user, 'instance-alice');
150150

151-
// Bare-minimum functions to fake the current version methods of SocksToRtc.
152-
// TODO once using uproxy-lib v20+, move to real mocks (examples:
153-
// https://github.com/uProxy/uproxy-lib/blob/dev/src/freedom/mocks/mock-eventhandler.ts
154-
// https://github.com/uProxy/uproxy-lib/blob/dev/src/webrtc/peerconnection.spec.ts
155-
// )
156-
var fakeSocksToRtc = {
157-
handlers: <{[key :string] :Function}>{},
158-
'start':
159-
(endpoint:net.Endpoint, pcConfig: freedom.RTCPeerConnection.RTCConfiguration) => {
160-
return Promise.resolve(endpoint);
161-
},
162-
'on': (t:string, f:Function) => { fakeSocksToRtc.handlers[t] = f; },
163-
'stop': () => {
164-
if (typeof fakeSocksToRtc.handlers['stopped'] === 'function') {
165-
fakeSocksToRtc.handlers['stopped']();
166-
}
167-
return Promise.resolve();
168-
},
169-
// TODO: remove onceStopping_ when
170-
// https://github.com/uProxy/uproxy/issues/1264 is resolved.
171-
'onceStopping_': new Promise((F, R) => {}),
172-
'handleSignalFromPeer': () => {}
173-
};
151+
var socksToRtc :socks_to_rtc_mock.SocksToRtcMock
152+
153+
beforeEach(() => {
154+
socksToRtc = new socks_to_rtc_mock.SocksToRtcMock();
155+
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(socksToRtc);
156+
});
174157

175158
it('can start proxying', (done) => {
176159
var aliceState = alice.currentStateForUi();
177160
expect(aliceState.localGettingFromRemote).toEqual(social.GettingState.NONE);
178161
alice.user.consent.localRequestsAccessFromRemote = true;
179162
alice.wireConsentFromRemote.isOffering = true;
180-
// The module & constructor of SocksToRtc may change in the near future.
181-
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(fakeSocksToRtc);
163+
spyOn(socksToRtc, 'start').and.returnValue(Promise.resolve<void>());
164+
182165
alice.start().then(() => {
183166
aliceState = alice.currentStateForUi();
184167
expect(aliceState.localGettingFromRemote)
@@ -198,7 +181,6 @@ describe('remote_instance.RemoteInstance', () => {
198181
});
199182

200183
it('refuses to start proxy without permission', () => {
201-
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(fakeSocksToRtc);
202184
alice.wireConsentFromRemote.isOffering = false;
203185
alice.start();
204186
var aliceState = alice.currentStateForUi();
@@ -234,27 +216,11 @@ describe('remote_instance.RemoteInstance', () => {
234216
}); // describe proxying
235217

236218
describe('signalling', () => {
219+
var alice :remote_instance.RemoteInstance;
220+
221+
var socksToRtc :socks_to_rtc_mock.SocksToRtcMock
222+
var rtcToNet :rtc_to_net_mock.RtcToNetMock;
237223

238-
// Build a mock Alice with fake signals and networking hooks.
239-
var alice :remote_instance.RemoteInstance; // Reset before each test in beforeEach
240-
var fakeSocksToRtc = {
241-
'handleSignalFromPeer': () => {},
242-
'on': () => {},
243-
'start': () => { return Promise.resolve(); },
244-
'stop': () => { return Promise.resolve(); },
245-
// TODO: remove onceStopping_ when
246-
// https://github.com/uProxy/uproxy/issues/1264 is resolved.
247-
'onceStopping_': new Promise((F, R) => {}),
248-
};
249-
var fakeRtcToNet = {
250-
'handleSignalFromPeer': () => {},
251-
'onceStopped': new Promise((F, R) => {}), // return unresolved promise
252-
'signalsForPeer': {setSyncHandler: () => {}},
253-
'bytesReceivedFromPeer': {setSyncHandler: () => {}},
254-
'bytesSentToPeer': {setSyncHandler: () => {}},
255-
'onceReady': new Promise((F, R) => {}), // return unresolved promise
256-
'start': () => {}
257-
};
258224
var fakeSignallingMessage :bridge.SignallingMessage = {
259225
signals: {
260226
'FAKE': []
@@ -264,12 +230,18 @@ describe('remote_instance.RemoteInstance', () => {
264230

265231
beforeEach(() => {
266232
alice = new remote_instance.RemoteInstance(user, 'instance-alice');
267-
user.consent.localGrantsAccessToRemote = true;
268-
spyOn(fakeSocksToRtc, 'handleSignalFromPeer');
269-
spyOn(fakeRtcToNet, 'handleSignalFromPeer');
270-
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(fakeSocksToRtc);
271-
spyOn(rtc_to_net, 'RtcToNet').and.returnValue(fakeRtcToNet);
272233
alice['connection_'].onceSharerCreated = Promise.resolve<void>();
234+
235+
user.consent.localGrantsAccessToRemote = true;
236+
237+
socksToRtc = new socks_to_rtc_mock.SocksToRtcMock();
238+
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(socksToRtc);
239+
240+
rtcToNet = new rtc_to_net_mock.RtcToNetMock();
241+
spyOn(rtc_to_net, 'RtcToNet').and.returnValue(rtcToNet);
242+
243+
spyOn(socksToRtc, 'handleSignalFromPeer').and.callThrough();
244+
spyOn(rtcToNet, 'handleSignalFromPeer').and.callThrough();
273245
});
274246

275247
it('handles OFFER signal from client peer as server', (done) => {
@@ -278,24 +250,26 @@ describe('remote_instance.RemoteInstance', () => {
278250
data: fakeSignallingMessage,
279251
version: constants.MESSAGE_VERSION
280252
}).then(() => {
281-
expect(fakeSocksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
282-
expect(fakeRtcToNet.handleSignalFromPeer).toHaveBeenCalledWith(
253+
expect(socksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
254+
expect(rtcToNet.handleSignalFromPeer).toHaveBeenCalledWith(
283255
fakeSignallingMessage);
284256
done();
285257
});
286258
});
287259

288260
it('handles signal from server peer as client', (done) => {
289261
alice.wireConsentFromRemote.isOffering = true;
262+
spyOn(socksToRtc, 'start').and.returnValue(Promise.resolve<void>());
263+
290264
alice.start().then(() => {
291265
alice.handleSignal({
292266
type: social.PeerMessageType.SIGNAL_FROM_SERVER_PEER,
293267
data: fakeSignallingMessage,
294268
version: constants.MESSAGE_VERSION
295269
}).then(() => {
296-
expect(fakeSocksToRtc.handleSignalFromPeer).toHaveBeenCalledWith(
270+
expect(socksToRtc.handleSignalFromPeer).toHaveBeenCalledWith(
297271
fakeSignallingMessage);
298-
expect(fakeRtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
272+
expect(rtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
299273
done();
300274
});
301275
}).catch((e) => console.error('error calling start: ' + e));
@@ -307,8 +281,8 @@ describe('remote_instance.RemoteInstance', () => {
307281
data: fakeSignallingMessage,
308282
version: constants.MESSAGE_VERSION
309283
}).then(() => {
310-
expect(fakeRtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
311-
expect(fakeSocksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
284+
expect(rtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
285+
expect(socksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
312286
done();
313287
});
314288
});
@@ -320,8 +294,8 @@ describe('remote_instance.RemoteInstance', () => {
320294
data: fakeSignallingMessage,
321295
version: constants.MESSAGE_VERSION
322296
}).then(() => {
323-
expect(fakeSocksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
324-
expect(fakeRtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
297+
expect(socksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
298+
expect(rtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
325299
done();
326300
});
327301
});

src/mocks/rtc-to-net.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import rtc_to_net = require('../lib/rtc-to-net/rtc-to-net');
12
import handler_queue = require('../lib/handler/queue');
23

34
export class RtcToNetMock { // TODO implements rtc_to_net.RtcToNet {
45
public signalsForPeer = new handler_queue.Queue<Object, void>();
56
public bytesReceivedFromPeer = new handler_queue.Queue<number, void>();
67
public bytesSentToPeer = new handler_queue.Queue<number, void>();
8+
public statusUpdates = new handler_queue.Queue<rtc_to_net.Status, void>();
79

810
public resolveReady :() => void;
911
public rejectReady :(v :Object) => void;

src/mocks/socks-to-rtc.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
import handler = require('../lib/handler/queue');
12
import net = require('../lib/net/net.types');
23

34
export class SocksToRtcMock { // TODO implements SocksToRtc.SocksToRtc {
4-
public events :{ [event :string] :(...args :Object[]) => void } = {};
5-
65
public resolveStart :(v :Object) => void;
76
public rejectStart :(v :Object) => void;
87

8+
public signalsForPeer = new handler.Queue<Object, void>();
9+
10+
public bytesReceivedFromPeer = new handler.Queue<number, void>();
11+
public bytesSentToPeer = new handler.Queue<number, void>();
12+
913
public start = () => {
1014
return new Promise<net.Endpoint>((resolve, reject) => {
1115
this.resolveStart = resolve;
@@ -19,10 +23,6 @@ export class SocksToRtcMock { // TODO implements SocksToRtc.SocksToRtc {
1923
public handleSignalFromPeer = () => {
2024
}
2125

22-
public on = (name :string, fn :(...args :Object[]) => void) => {
23-
this.events[name] = fn;
24-
}
25-
2626
// TODO: remove onceStopping_ when
2727
// https://github.com/uProxy/uproxy/issues/1264 is resolved.
2828
private onceStopping_ = new Promise(() => {});

0 commit comments

Comments
 (0)