Skip to content

Commit

Permalink
fix broken generic_core tests (#2730)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
trevj committed Aug 29, 2016
1 parent 8990e44 commit 5bc6060
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 74 deletions.
5 changes: 0 additions & 5 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -1208,11 +1208,6 @@ module.exports = function(grunt) {
Rule.getTests('src', 'generic_core'),
Rule.getTests('src', 'generic_ui/scripts')
).map((test) => {
// TODO: Fix and re-enable these tests (Issue #2727).
if (test === 'generic_core/remote-connection' ||
test === 'generic_core/remote-instance') {
return [];
}
return Rule.buildAndRunTest(test, grunt);
})
));
Expand Down
4 changes: 2 additions & 2 deletions src/generic_core/remote-connection.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,8 @@ describe('remote_connection.RemoteConnection', () => {

start.then(() => {
// trigger the events
socksToRtc.events['bytesReceivedFromPeer'](1234);
socksToRtc.events['bytesSentToPeer'](4321);
socksToRtc.bytesReceivedFromPeer.handle(1234);
socksToRtc.bytesSentToPeer.handle(4321);

// updateSpy should not get called immediately for byte updates
jasmine.clock().tick(1);
Expand Down
96 changes: 35 additions & 61 deletions src/generic_core/remote-instance.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ import local_storage = require('./storage');
import net = require('../lib/net/net.types');
import local_instance = require('./local-instance');
import bridge = require('../lib/bridge/bridge');

import rtc_to_net_mock = require('../mocks/rtc-to-net');
import socks_to_rtc_mock = require('../mocks/socks-to-rtc');

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

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

describe('proxying', () => {

var alice = new remote_instance.RemoteInstance(user, 'instance-alice');

// Bare-minimum functions to fake the current version methods of SocksToRtc.
// TODO once using uproxy-lib v20+, move to real mocks (examples:
// https://github.com/uProxy/uproxy-lib/blob/dev/src/freedom/mocks/mock-eventhandler.ts
// https://github.com/uProxy/uproxy-lib/blob/dev/src/webrtc/peerconnection.spec.ts
// )
var fakeSocksToRtc = {
handlers: <{[key :string] :Function}>{},
'start':
(endpoint:net.Endpoint, pcConfig: freedom.RTCPeerConnection.RTCConfiguration) => {
return Promise.resolve(endpoint);
},
'on': (t:string, f:Function) => { fakeSocksToRtc.handlers[t] = f; },
'stop': () => {
if (typeof fakeSocksToRtc.handlers['stopped'] === 'function') {
fakeSocksToRtc.handlers['stopped']();
}
return Promise.resolve();
},
// TODO: remove onceStopping_ when
// https://github.com/uProxy/uproxy/issues/1264 is resolved.
'onceStopping_': new Promise((F, R) => {}),
'handleSignalFromPeer': () => {}
};
var socksToRtc :socks_to_rtc_mock.SocksToRtcMock

beforeEach(() => {
socksToRtc = new socks_to_rtc_mock.SocksToRtcMock();
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(socksToRtc);
});

it('can start proxying', (done) => {
var aliceState = alice.currentStateForUi();
expect(aliceState.localGettingFromRemote).toEqual(social.GettingState.NONE);
alice.user.consent.localRequestsAccessFromRemote = true;
alice.wireConsentFromRemote.isOffering = true;
// The module & constructor of SocksToRtc may change in the near future.
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(fakeSocksToRtc);
spyOn(socksToRtc, 'start').and.returnValue(Promise.resolve<void>());

alice.start().then(() => {
aliceState = alice.currentStateForUi();
expect(aliceState.localGettingFromRemote)
Expand All @@ -198,7 +181,6 @@ describe('remote_instance.RemoteInstance', () => {
});

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

describe('signalling', () => {
var alice :remote_instance.RemoteInstance;

var socksToRtc :socks_to_rtc_mock.SocksToRtcMock
var rtcToNet :rtc_to_net_mock.RtcToNetMock;

// Build a mock Alice with fake signals and networking hooks.
var alice :remote_instance.RemoteInstance; // Reset before each test in beforeEach
var fakeSocksToRtc = {
'handleSignalFromPeer': () => {},
'on': () => {},
'start': () => { return Promise.resolve(); },
'stop': () => { return Promise.resolve(); },
// TODO: remove onceStopping_ when
// https://github.com/uProxy/uproxy/issues/1264 is resolved.
'onceStopping_': new Promise((F, R) => {}),
};
var fakeRtcToNet = {
'handleSignalFromPeer': () => {},
'onceStopped': new Promise((F, R) => {}), // return unresolved promise
'signalsForPeer': {setSyncHandler: () => {}},
'bytesReceivedFromPeer': {setSyncHandler: () => {}},
'bytesSentToPeer': {setSyncHandler: () => {}},
'onceReady': new Promise((F, R) => {}), // return unresolved promise
'start': () => {}
};
var fakeSignallingMessage :bridge.SignallingMessage = {
signals: {
'FAKE': []
Expand All @@ -264,12 +230,18 @@ describe('remote_instance.RemoteInstance', () => {

beforeEach(() => {
alice = new remote_instance.RemoteInstance(user, 'instance-alice');
user.consent.localGrantsAccessToRemote = true;
spyOn(fakeSocksToRtc, 'handleSignalFromPeer');
spyOn(fakeRtcToNet, 'handleSignalFromPeer');
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(fakeSocksToRtc);
spyOn(rtc_to_net, 'RtcToNet').and.returnValue(fakeRtcToNet);
alice['connection_'].onceSharerCreated = Promise.resolve<void>();

user.consent.localGrantsAccessToRemote = true;

socksToRtc = new socks_to_rtc_mock.SocksToRtcMock();
spyOn(socks_to_rtc, 'SocksToRtc').and.returnValue(socksToRtc);

rtcToNet = new rtc_to_net_mock.RtcToNetMock();
spyOn(rtc_to_net, 'RtcToNet').and.returnValue(rtcToNet);

spyOn(socksToRtc, 'handleSignalFromPeer').and.callThrough();
spyOn(rtcToNet, 'handleSignalFromPeer').and.callThrough();
});

it('handles OFFER signal from client peer as server', (done) => {
Expand All @@ -278,24 +250,26 @@ describe('remote_instance.RemoteInstance', () => {
data: fakeSignallingMessage,
version: constants.MESSAGE_VERSION
}).then(() => {
expect(fakeSocksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
expect(fakeRtcToNet.handleSignalFromPeer).toHaveBeenCalledWith(
expect(socksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
expect(rtcToNet.handleSignalFromPeer).toHaveBeenCalledWith(
fakeSignallingMessage);
done();
});
});

it('handles signal from server peer as client', (done) => {
alice.wireConsentFromRemote.isOffering = true;
spyOn(socksToRtc, 'start').and.returnValue(Promise.resolve<void>());

alice.start().then(() => {
alice.handleSignal({
type: social.PeerMessageType.SIGNAL_FROM_SERVER_PEER,
data: fakeSignallingMessage,
version: constants.MESSAGE_VERSION
}).then(() => {
expect(fakeSocksToRtc.handleSignalFromPeer).toHaveBeenCalledWith(
expect(socksToRtc.handleSignalFromPeer).toHaveBeenCalledWith(
fakeSignallingMessage);
expect(fakeRtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
expect(rtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
done();
});
}).catch((e) => console.error('error calling start: ' + e));
Expand All @@ -307,8 +281,8 @@ describe('remote_instance.RemoteInstance', () => {
data: fakeSignallingMessage,
version: constants.MESSAGE_VERSION
}).then(() => {
expect(fakeRtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
expect(fakeSocksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
expect(rtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
expect(socksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
done();
});
});
Expand All @@ -320,8 +294,8 @@ describe('remote_instance.RemoteInstance', () => {
data: fakeSignallingMessage,
version: constants.MESSAGE_VERSION
}).then(() => {
expect(fakeSocksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
expect(fakeRtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
expect(socksToRtc.handleSignalFromPeer).not.toHaveBeenCalled();
expect(rtcToNet.handleSignalFromPeer).not.toHaveBeenCalled();
done();
});
});
Expand Down
2 changes: 2 additions & 0 deletions src/mocks/rtc-to-net.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import rtc_to_net = require('../lib/rtc-to-net/rtc-to-net');
import handler_queue = require('../lib/handler/queue');

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

public resolveReady :() => void;
public rejectReady :(v :Object) => void;
Expand Down
12 changes: 6 additions & 6 deletions src/mocks/socks-to-rtc.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import handler = require('../lib/handler/queue');
import net = require('../lib/net/net.types');

export class SocksToRtcMock { // TODO implements SocksToRtc.SocksToRtc {
public events :{ [event :string] :(...args :Object[]) => void } = {};

public resolveStart :(v :Object) => void;
public rejectStart :(v :Object) => void;

public signalsForPeer = new handler.Queue<Object, void>();

public bytesReceivedFromPeer = new handler.Queue<number, void>();
public bytesSentToPeer = new handler.Queue<number, void>();

public start = () => {
return new Promise<net.Endpoint>((resolve, reject) => {
this.resolveStart = resolve;
Expand All @@ -19,10 +23,6 @@ export class SocksToRtcMock { // TODO implements SocksToRtc.SocksToRtc {
public handleSignalFromPeer = () => {
}

public on = (name :string, fn :(...args :Object[]) => void) => {
this.events[name] = fn;
}

// TODO: remove onceStopping_ when
// https://github.com/uProxy/uproxy/issues/1264 is resolved.
private onceStopping_ = new Promise(() => {});
Expand Down

0 comments on commit 5bc6060

Please sign in to comment.