@webex/internal-plugin-mercury 2.60.1-next.9 → 2.60.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.js +11 -8
- package/dist/errors.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mercury.js +62 -56
- package/dist/mercury.js.map +1 -1
- package/dist/socket/socket-base.js +42 -57
- package/dist/socket/socket-base.js.map +1 -1
- package/dist/socket/socket.js +2 -1
- package/dist/socket/socket.js.map +1 -1
- package/dist/socket/socket.shim.js +2 -1
- package/dist/socket/socket.shim.js.map +1 -1
- package/package.json +24 -25
- package/src/mercury.js +51 -43
- package/src/socket/socket-base.js +28 -61
- package/test/integration/spec/webex.js +2 -3
- package/test/unit/spec/mercury.js +9 -115
- package/test/unit/spec/socket.js +0 -17
|
@@ -32,13 +32,12 @@ describe('plugin-mercury', function () {
|
|
|
32
32
|
);
|
|
33
33
|
|
|
34
34
|
describe('onBeforeLogout()', () => {
|
|
35
|
-
it('disconnects the web socket', () =>
|
|
35
|
+
it('disconnects the web socket', () =>
|
|
36
36
|
webex.logout({noRedirect: true}).then(() => {
|
|
37
37
|
assert.called(webex.internal.mercury.disconnect);
|
|
38
38
|
assert.isFalse(webex.internal.mercury.connected);
|
|
39
39
|
assert.called(webex.internal.device.unregister);
|
|
40
40
|
assert.isFalse(webex.internal.device.registered);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
41
|
+
}));
|
|
43
42
|
});
|
|
44
43
|
});
|
|
@@ -452,13 +452,11 @@ describe('plugin-mercury', () => {
|
|
|
452
452
|
});
|
|
453
453
|
|
|
454
454
|
describe.skip('#disconnect()', () => {
|
|
455
|
-
it('disconnects the WebSocket', () =>
|
|
456
|
-
|
|
457
|
-
.
|
|
458
|
-
.
|
|
459
|
-
|
|
460
|
-
assert.isFalse(mercury.connecting, 'Mercury is not connecting');
|
|
461
|
-
const promise = mercury.disconnect();
|
|
455
|
+
it('disconnects the WebSocket', () => mercury.connect()
|
|
456
|
+
.then(() => {
|
|
457
|
+
assert.isTrue(mercury.connected, 'Mercury is connected');
|
|
458
|
+
assert.isFalse(mercury.connecting, 'Mercury is not connecting');
|
|
459
|
+
const promise = mercury.disconnect();
|
|
462
460
|
|
|
463
461
|
mockWebSocket.emit('close', {
|
|
464
462
|
code: 1000,
|
|
@@ -560,7 +558,7 @@ describe('plugin-mercury', () => {
|
|
|
560
558
|
return promiseTick(webex.internal.mercury.config.backoffTimeReset).then(() => {
|
|
561
559
|
assert.equal(
|
|
562
560
|
reason.message,
|
|
563
|
-
'
|
|
561
|
+
'mercury: prevent socket open when backoffCall no longer defined'
|
|
564
562
|
);
|
|
565
563
|
});
|
|
566
564
|
});
|
|
@@ -568,21 +566,12 @@ describe('plugin-mercury', () => {
|
|
|
568
566
|
});
|
|
569
567
|
|
|
570
568
|
describe('#_emit()', () => {
|
|
571
|
-
it('emits Error-safe events
|
|
572
|
-
const error = 'error';
|
|
573
|
-
const event = {data: 'some data'};
|
|
569
|
+
it('emits Error-safe events', () => {
|
|
574
570
|
mercury.on('break', () => {
|
|
575
|
-
throw
|
|
571
|
+
throw new Error();
|
|
576
572
|
});
|
|
577
|
-
sinon.stub(mercury.logger, 'error');
|
|
578
573
|
|
|
579
|
-
return Promise.resolve(mercury._emit('break'
|
|
580
|
-
assert.calledWith(mercury.logger.error, 'Mercury: error occurred in event handler', {
|
|
581
|
-
error,
|
|
582
|
-
arguments: ['break', event],
|
|
583
|
-
});
|
|
584
|
-
return res;
|
|
585
|
-
});
|
|
574
|
+
return Promise.resolve(mercury._emit('break'));
|
|
586
575
|
});
|
|
587
576
|
});
|
|
588
577
|
|
|
@@ -717,99 +706,4 @@ describe('plugin-mercury', () => {
|
|
|
717
706
|
});
|
|
718
707
|
});
|
|
719
708
|
});
|
|
720
|
-
describe('ping pong latency event is forwarded', () => {
|
|
721
|
-
let clock, mercury, mockWebSocket, socketOpenStub, webex;
|
|
722
|
-
|
|
723
|
-
const statusStartTypingMessage = JSON.stringify({
|
|
724
|
-
id: uuid.v4(),
|
|
725
|
-
data: {
|
|
726
|
-
eventType: 'status.start_typing',
|
|
727
|
-
actor: {
|
|
728
|
-
id: 'actorId',
|
|
729
|
-
},
|
|
730
|
-
conversationId: uuid.v4(),
|
|
731
|
-
},
|
|
732
|
-
timestamp: Date.now(),
|
|
733
|
-
trackingId: `suffix_${uuid.v4()}_${Date.now()}`,
|
|
734
|
-
});
|
|
735
|
-
|
|
736
|
-
beforeEach(() => {
|
|
737
|
-
clock = FakeTimers.install({now: Date.now()});
|
|
738
|
-
});
|
|
739
|
-
|
|
740
|
-
afterEach(() => {
|
|
741
|
-
clock.uninstall();
|
|
742
|
-
});
|
|
743
|
-
|
|
744
|
-
beforeEach(() => {
|
|
745
|
-
webex = new MockWebex({
|
|
746
|
-
children: {
|
|
747
|
-
mercury: Mercury,
|
|
748
|
-
},
|
|
749
|
-
});
|
|
750
|
-
webex.credentials = {
|
|
751
|
-
refresh: sinon.stub().returns(Promise.resolve()),
|
|
752
|
-
getUserToken: sinon.stub().returns(
|
|
753
|
-
Promise.resolve({
|
|
754
|
-
toString() {
|
|
755
|
-
return 'Bearer FAKE';
|
|
756
|
-
},
|
|
757
|
-
})
|
|
758
|
-
),
|
|
759
|
-
};
|
|
760
|
-
webex.internal.device = {
|
|
761
|
-
register: sinon.stub().returns(Promise.resolve()),
|
|
762
|
-
refresh: sinon.stub().returns(Promise.resolve()),
|
|
763
|
-
webSocketUrl: 'ws://example.com',
|
|
764
|
-
getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),
|
|
765
|
-
useServiceCatalogUrl: sinon
|
|
766
|
-
.stub()
|
|
767
|
-
.returns(Promise.resolve('https://service-catalog-url.com')),
|
|
768
|
-
};
|
|
769
|
-
webex.internal.services = {
|
|
770
|
-
convertUrlToPriorityHostUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),
|
|
771
|
-
markFailedUrl: sinon.stub().returns(Promise.resolve()),
|
|
772
|
-
};
|
|
773
|
-
webex.internal.metrics.submitClientMetrics = sinon.stub();
|
|
774
|
-
webex.trackingId = 'fakeTrackingId';
|
|
775
|
-
webex.config.mercury = mercuryConfig.mercury;
|
|
776
|
-
|
|
777
|
-
webex.logger = console;
|
|
778
|
-
|
|
779
|
-
mockWebSocket = new MockWebSocket();
|
|
780
|
-
sinon.stub(Socket, 'getWebSocketConstructor').returns(() => mockWebSocket);
|
|
781
|
-
|
|
782
|
-
const origOpen = Socket.prototype.open;
|
|
783
|
-
|
|
784
|
-
socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {
|
|
785
|
-
const promise = Reflect.apply(origOpen, this, args);
|
|
786
|
-
|
|
787
|
-
process.nextTick(() => mockWebSocket.open());
|
|
788
|
-
|
|
789
|
-
return promise;
|
|
790
|
-
});
|
|
791
|
-
|
|
792
|
-
mercury = webex.internal.mercury;
|
|
793
|
-
});
|
|
794
|
-
|
|
795
|
-
afterEach(() => {
|
|
796
|
-
if (socketOpenStub) {
|
|
797
|
-
socketOpenStub.restore();
|
|
798
|
-
}
|
|
799
|
-
|
|
800
|
-
if (Socket.getWebSocketConstructor.restore) {
|
|
801
|
-
Socket.getWebSocketConstructor.restore();
|
|
802
|
-
}
|
|
803
|
-
});
|
|
804
|
-
it('should forward ping pong latency event', () => {
|
|
805
|
-
const spy = sinon.spy();
|
|
806
|
-
|
|
807
|
-
mercury.on('ping-pong-latency', spy);
|
|
808
|
-
|
|
809
|
-
return mercury.connect().then(() => {
|
|
810
|
-
assert.calledWith(spy, 0);
|
|
811
|
-
assert.calledOnce(spy);
|
|
812
|
-
});
|
|
813
|
-
});
|
|
814
|
-
});
|
|
815
709
|
});
|
package/test/unit/spec/socket.js
CHANGED
|
@@ -807,23 +807,6 @@ describe('plugin-mercury', () => {
|
|
|
807
807
|
reason: 'Pong mismatch',
|
|
808
808
|
});
|
|
809
809
|
});
|
|
810
|
-
|
|
811
|
-
it('emits ping pong latency correctly', () => {
|
|
812
|
-
const spy = sinon.spy();
|
|
813
|
-
|
|
814
|
-
socket.on('ping-pong-latency', spy);
|
|
815
|
-
|
|
816
|
-
socket._ping(123);
|
|
817
|
-
mockWebSocket.emit('message', {
|
|
818
|
-
data: JSON.stringify({
|
|
819
|
-
type: 'pong',
|
|
820
|
-
id: 123,
|
|
821
|
-
}),
|
|
822
|
-
});
|
|
823
|
-
|
|
824
|
-
assert.calledWith(spy, 0);
|
|
825
|
-
assert.calledOnce(spy);
|
|
826
|
-
});
|
|
827
810
|
});
|
|
828
811
|
});
|
|
829
812
|
});
|