@webex/plugin-meetings 3.2.0 → 3.3.0
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/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +2 -4
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -10
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/index.js +8 -21
- package/dist/meeting/index.js.map +1 -1
- package/dist/meetings/index.js +1 -6
- package/dist/meetings/index.js.map +1 -1
- package/dist/reachability/index.js +9 -82
- package/dist/reachability/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +2 -4
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +0 -14
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/constants.d.ts +1 -2
- package/dist/types/mediaQualityMetrics/config.d.ts +2 -8
- package/dist/types/meeting/index.d.ts +0 -8
- package/dist/types/reachability/index.d.ts +0 -11
- package/dist/webinar/index.js +1 -1
- package/package.json +21 -21
- package/src/constants.ts +1 -2
- package/src/mediaQualityMetrics/config.ts +7 -13
- package/src/meeting/index.ts +9 -23
- package/src/meetings/index.ts +2 -7
- package/src/reachability/index.ts +0 -57
- package/src/statsAnalyzer/index.ts +3 -6
- package/src/statsAnalyzer/mqaUtil.ts +0 -18
- package/test/unit/spec/meeting/index.js +8 -28
- package/test/unit/spec/meetings/index.js +15 -38
- package/test/unit/spec/reachability/index.ts +0 -266
- package/test/unit/spec/stats-analyzer/index.js +8 -89
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -34
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -73
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/MediaConnectionAwaiter.d.ts +0 -61
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -398
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -110
- package/dist/reachability/index.d.ts +0 -109
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -15
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/transcription/index.d.ts +0 -64
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
|
@@ -998,11 +998,12 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
998
998
|
result.qualityLimitationReason;
|
|
999
999
|
this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =
|
|
1000
1000
|
result.qualityLimitationResolutionChanges;
|
|
1001
|
-
this.statsResults[mediaType][sendrecvType].
|
|
1001
|
+
this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =
|
|
1002
1002
|
result.retransmittedPacketsSent;
|
|
1003
|
-
this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;
|
|
1004
1003
|
this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
|
|
1005
1004
|
this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
|
|
1005
|
+
this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =
|
|
1006
|
+
result.retransmittedBytesSent;
|
|
1006
1007
|
this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
|
|
1007
1008
|
this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
|
|
1008
1009
|
}
|
|
@@ -1135,10 +1136,6 @@ export class StatsAnalyzer extends EventsScope {
|
|
|
1135
1136
|
this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
|
|
1136
1137
|
this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
|
|
1137
1138
|
this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
|
|
1138
|
-
this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived =
|
|
1139
|
-
result.retransmittedPacketsReceived;
|
|
1140
|
-
this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived =
|
|
1141
|
-
result.retransmittedBytesReceived;
|
|
1142
1139
|
|
|
1143
1140
|
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
1144
1141
|
|
|
@@ -237,16 +237,10 @@ export const getVideoReceiverMqa = ({
|
|
|
237
237
|
const lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
238
238
|
const lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
239
239
|
|
|
240
|
-
const lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');
|
|
241
|
-
const lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');
|
|
242
|
-
|
|
243
240
|
const packetsLost = getTotalValue('totalPacketsLost');
|
|
244
241
|
const totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
245
242
|
const totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
246
243
|
|
|
247
|
-
const totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');
|
|
248
|
-
const totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');
|
|
249
|
-
|
|
250
244
|
const meanRemoteJitter = Object.keys(statsResults)
|
|
251
245
|
.filter((mt) => mt.includes(baseMediaType))
|
|
252
246
|
.reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
@@ -272,15 +266,10 @@ export const getVideoReceiverMqa = ({
|
|
|
272
266
|
|
|
273
267
|
// Calculate the outgoing bitrate
|
|
274
268
|
const totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
|
|
275
|
-
const totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;
|
|
276
269
|
|
|
277
270
|
videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin
|
|
278
271
|
? (totalBytesReceivedInaMin * 8) / 60
|
|
279
272
|
: 0;
|
|
280
|
-
videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;
|
|
281
|
-
videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin
|
|
282
|
-
? (totalRtxBytesReceivedInaMin * 8) / 60
|
|
283
|
-
: 0;
|
|
284
273
|
};
|
|
285
274
|
|
|
286
275
|
export const getVideoReceiverStreamMqa = ({
|
|
@@ -360,15 +349,11 @@ export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, b
|
|
|
360
349
|
const lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
361
350
|
const lastBytesSent = getLastTotalValue('totalBytesSent');
|
|
362
351
|
const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
363
|
-
const lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');
|
|
364
|
-
const lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');
|
|
365
352
|
|
|
366
353
|
const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
367
354
|
const totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
368
355
|
const totalBytesSent = getTotalValue('totalBytesSent');
|
|
369
356
|
const availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');
|
|
370
|
-
const totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');
|
|
371
|
-
const totalRtxBytesSent = getTotalValue('totalRtxBytesSent');
|
|
372
357
|
|
|
373
358
|
videoSender.common.common.direction =
|
|
374
359
|
statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
|
|
@@ -404,11 +389,8 @@ export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, b
|
|
|
404
389
|
|
|
405
390
|
// Calculate the outgoing bitrate
|
|
406
391
|
const totalBytesSentInaMin = totalBytesSent - lastBytesSent;
|
|
407
|
-
const totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;
|
|
408
392
|
|
|
409
393
|
videoSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;
|
|
410
|
-
videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;
|
|
411
|
-
videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? (totalRtxBytesSentInaMin * 8) / 60 : 0;
|
|
412
394
|
};
|
|
413
395
|
|
|
414
396
|
export const getVideoSenderStreamMqa = ({
|
|
@@ -1302,31 +1302,6 @@ describe('plugin-meetings', () => {
|
|
|
1302
1302
|
);
|
|
1303
1303
|
});
|
|
1304
1304
|
});
|
|
1305
|
-
|
|
1306
|
-
describe('#handleLLMOnline', () => {
|
|
1307
|
-
beforeEach(() => {
|
|
1308
|
-
webex.internal.llm.off = sinon.stub();
|
|
1309
|
-
});
|
|
1310
|
-
|
|
1311
|
-
it('turns off llm online, emits transcription connected events', () => {
|
|
1312
|
-
meeting.handleLLMOnline();
|
|
1313
|
-
assert.calledOnceWithExactly(
|
|
1314
|
-
webex.internal.llm.off,
|
|
1315
|
-
'online',
|
|
1316
|
-
meeting.handleLLMOnline
|
|
1317
|
-
);
|
|
1318
|
-
assert.calledWith(
|
|
1319
|
-
TriggerProxy.trigger,
|
|
1320
|
-
sinon.match.instanceOf(Meeting),
|
|
1321
|
-
{
|
|
1322
|
-
file: 'meeting/index',
|
|
1323
|
-
function: 'handleLLMOnline',
|
|
1324
|
-
},
|
|
1325
|
-
EVENT_TRIGGERS.MEETING_TRANSCRIPTION_CONNECTED
|
|
1326
|
-
);
|
|
1327
|
-
});
|
|
1328
|
-
});
|
|
1329
|
-
|
|
1330
1305
|
describe('#join', () => {
|
|
1331
1306
|
let sandbox = null;
|
|
1332
1307
|
let setCorrelationIdSpy;
|
|
@@ -1376,10 +1351,15 @@ describe('plugin-meetings', () => {
|
|
|
1376
1351
|
assert.calledOnce(MeetingUtil.joinMeeting);
|
|
1377
1352
|
assert.calledOnce(meeting.setLocus);
|
|
1378
1353
|
assert.equal(result, joinMeetingResult);
|
|
1354
|
+
|
|
1379
1355
|
assert.calledWith(
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1356
|
+
TriggerProxy.trigger,
|
|
1357
|
+
sinon.match.instanceOf(Meeting),
|
|
1358
|
+
{
|
|
1359
|
+
file: 'meeting/index',
|
|
1360
|
+
function: 'join',
|
|
1361
|
+
},
|
|
1362
|
+
EVENT_TRIGGERS.MEETING_TRANSCRIPTION_CONNECTED
|
|
1383
1363
|
);
|
|
1384
1364
|
});
|
|
1385
1365
|
|
|
@@ -18,7 +18,6 @@ import TriggerProxy from '@webex/plugin-meetings/src/common/events/trigger-proxy
|
|
|
18
18
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
19
19
|
import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
|
|
20
20
|
import Meeting, {CallStateForMetrics} from '@webex/plugin-meetings/src/meeting';
|
|
21
|
-
import {Services} from '@webex/webex-core';
|
|
22
21
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
23
22
|
import Meetings from '@webex/plugin-meetings/src/meetings';
|
|
24
23
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
|
@@ -76,8 +75,6 @@ describe('plugin-meetings', () => {
|
|
|
76
75
|
let test1;
|
|
77
76
|
let test2;
|
|
78
77
|
let locusInfo;
|
|
79
|
-
let services;
|
|
80
|
-
let catalog;
|
|
81
78
|
|
|
82
79
|
describe('meetings index', () => {
|
|
83
80
|
beforeEach(() => {
|
|
@@ -96,13 +93,9 @@ describe('plugin-meetings', () => {
|
|
|
96
93
|
device: Device,
|
|
97
94
|
mercury: Mercury,
|
|
98
95
|
meetings: Meetings,
|
|
99
|
-
services: Services,
|
|
100
96
|
},
|
|
101
97
|
});
|
|
102
98
|
|
|
103
|
-
services = webex.internal.services;
|
|
104
|
-
catalog = services._getCatalog();
|
|
105
|
-
|
|
106
99
|
Object.assign(webex, {
|
|
107
100
|
logging: logger,
|
|
108
101
|
});
|
|
@@ -168,7 +161,6 @@ describe('plugin-meetings', () => {
|
|
|
168
161
|
],
|
|
169
162
|
})
|
|
170
163
|
),
|
|
171
|
-
_getCatalog: sinon.stub().returns(catalog),
|
|
172
164
|
fetchClientRegionInfo: sinon.stub().returns(Promise.resolve()),
|
|
173
165
|
},
|
|
174
166
|
metrics: {
|
|
@@ -1925,34 +1917,34 @@ describe('plugin-meetings', () => {
|
|
|
1925
1917
|
let loggerProxySpy;
|
|
1926
1918
|
|
|
1927
1919
|
it('should call request.getMeetingPreferences to get the preferred webex site ', async () => {
|
|
1928
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1929
1920
|
assert.isDefined(webex.meetings.preferredWebexSite);
|
|
1930
1921
|
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1931
1922
|
|
|
1932
1923
|
assert.equal(webex.meetings.preferredWebexSite, 'go.webex.com');
|
|
1933
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
1934
|
-
'go.webex.com',
|
|
1935
|
-
]);
|
|
1936
1924
|
});
|
|
1937
1925
|
|
|
1938
1926
|
const setup = ({user} = {}) => {
|
|
1939
1927
|
loggerProxySpy = sinon.spy(LoggerProxy.logger, 'error');
|
|
1940
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1941
1928
|
|
|
1942
1929
|
Object.assign(webex.internal, {
|
|
1930
|
+
services: {
|
|
1931
|
+
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1932
|
+
},
|
|
1943
1933
|
user: {
|
|
1944
1934
|
get: sinon.stub().returns(Promise.resolve(user)),
|
|
1945
1935
|
},
|
|
1946
1936
|
});
|
|
1947
|
-
|
|
1948
|
-
Object.assign(webex.internal.services, {
|
|
1949
|
-
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1950
|
-
});
|
|
1951
1937
|
};
|
|
1952
1938
|
|
|
1953
1939
|
it('should not fail if UserPreferred info is not fetched ', async () => {
|
|
1954
1940
|
setup();
|
|
1955
1941
|
|
|
1942
|
+
Object.assign(webex.internal, {
|
|
1943
|
+
services: {
|
|
1944
|
+
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1945
|
+
},
|
|
1946
|
+
});
|
|
1947
|
+
|
|
1956
1948
|
await webex.meetings.fetchUserPreferredWebexSite().then(() => {
|
|
1957
1949
|
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
1958
1950
|
});
|
|
@@ -1960,7 +1952,6 @@ describe('plugin-meetings', () => {
|
|
|
1960
1952
|
loggerProxySpy,
|
|
1961
1953
|
'Failed to fetch preferred site from user - no site will be set'
|
|
1962
1954
|
);
|
|
1963
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
1964
1955
|
});
|
|
1965
1956
|
|
|
1966
1957
|
it('should fall back to fetching the site from the user', async () => {
|
|
@@ -1977,10 +1968,6 @@ describe('plugin-meetings', () => {
|
|
|
1977
1968
|
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1978
1969
|
|
|
1979
1970
|
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
1980
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
1981
|
-
'',
|
|
1982
|
-
'site.webex.com',
|
|
1983
|
-
]);
|
|
1984
1971
|
assert.notCalled(loggerProxySpy);
|
|
1985
1972
|
});
|
|
1986
1973
|
|
|
@@ -2002,7 +1989,6 @@ describe('plugin-meetings', () => {
|
|
|
2002
1989
|
loggerProxySpy,
|
|
2003
1990
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2004
1991
|
);
|
|
2005
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2006
1992
|
});
|
|
2007
1993
|
}
|
|
2008
1994
|
);
|
|
@@ -2019,7 +2005,6 @@ describe('plugin-meetings', () => {
|
|
|
2019
2005
|
loggerProxySpy,
|
|
2020
2006
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2021
2007
|
);
|
|
2022
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2023
2008
|
});
|
|
2024
2009
|
|
|
2025
2010
|
it('should fall back to fetching the site from the user', async () => {
|
|
@@ -2037,10 +2022,6 @@ describe('plugin-meetings', () => {
|
|
|
2037
2022
|
|
|
2038
2023
|
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
2039
2024
|
assert.notCalled(loggerProxySpy);
|
|
2040
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
2041
|
-
'',
|
|
2042
|
-
'site.webex.com',
|
|
2043
|
-
]);
|
|
2044
2025
|
});
|
|
2045
2026
|
|
|
2046
2027
|
forEach(
|
|
@@ -2061,7 +2042,6 @@ describe('plugin-meetings', () => {
|
|
|
2061
2042
|
loggerProxySpy,
|
|
2062
2043
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2063
2044
|
);
|
|
2064
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2065
2045
|
});
|
|
2066
2046
|
}
|
|
2067
2047
|
);
|
|
@@ -2078,7 +2058,6 @@ describe('plugin-meetings', () => {
|
|
|
2078
2058
|
loggerProxySpy,
|
|
2079
2059
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2080
2060
|
);
|
|
2081
|
-
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2082
2061
|
});
|
|
2083
2062
|
});
|
|
2084
2063
|
});
|
|
@@ -2365,14 +2344,12 @@ describe('plugin-meetings', () => {
|
|
|
2365
2344
|
sessionType: 'MAIN',
|
|
2366
2345
|
};
|
|
2367
2346
|
newLocus.self.state = 'JOINED';
|
|
2368
|
-
newLocus.self.devices = [
|
|
2369
|
-
{
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
},
|
|
2375
|
-
];
|
|
2347
|
+
newLocus.self.devices = [{
|
|
2348
|
+
intent: {
|
|
2349
|
+
reason: 'ON_HOLD_LOBBY',
|
|
2350
|
+
type: 'WAIT',
|
|
2351
|
+
}
|
|
2352
|
+
}];
|
|
2376
2353
|
LoggerProxy.logger.log = sinon.stub();
|
|
2377
2354
|
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2378
2355
|
assert.equal(result, true);
|
|
@@ -141,272 +141,6 @@ describe('isAnyPublicClusterReachable', () => {
|
|
|
141
141
|
});
|
|
142
142
|
});
|
|
143
143
|
|
|
144
|
-
|
|
145
|
-
describe('isWebexMediaBackendUnreachable', () => {
|
|
146
|
-
let webex;
|
|
147
|
-
|
|
148
|
-
beforeEach(() => {
|
|
149
|
-
webex = new MockWebex();
|
|
150
|
-
|
|
151
|
-
sinon.stub(MeetingUtil, 'getIpVersion').returns(IP_VERSION.unknown);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
afterEach(() => {
|
|
155
|
-
sinon.restore();
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
const runCheck = async (mockStorage: any, expectedValue: boolean) => {
|
|
159
|
-
if (mockStorage) {
|
|
160
|
-
await webex.boundedStorage.put(
|
|
161
|
-
'Reachability',
|
|
162
|
-
'reachability.result',
|
|
163
|
-
JSON.stringify(mockStorage)
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
const reachability = new Reachability(webex);
|
|
167
|
-
|
|
168
|
-
const result = await reachability.isWebexMediaBackendUnreachable();
|
|
169
|
-
|
|
170
|
-
assert.equal(result, expectedValue);
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
[
|
|
174
|
-
{
|
|
175
|
-
title: 'no clusters at all',
|
|
176
|
-
mockStorage: {},
|
|
177
|
-
expectedResult: false,
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
title: 'clusters without results',
|
|
181
|
-
mockStorage: {a: {}, b: {}},
|
|
182
|
-
expectedResult: false,
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
title: 'all clusters untested',
|
|
186
|
-
mockStorage: {
|
|
187
|
-
a: {udp: 'untested'},
|
|
188
|
-
b: {udp: 'untested', tcp: 'untested'},
|
|
189
|
-
},
|
|
190
|
-
expectedResult: false,
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
title: 'one cluster with udp reachable',
|
|
194
|
-
mockStorage: {x: {udp: {result: 'reachable'}, tcp: {result: 'unreachable'}}},
|
|
195
|
-
expectedResult: false,
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
title: 'one cluster with tcp reachable',
|
|
199
|
-
mockStorage: {x: {tcp: {result: 'reachable'}}},
|
|
200
|
-
expectedResult: false,
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
title: 'one cluster with xtls reachable',
|
|
204
|
-
mockStorage: {x: {xtls: {result: 'reachable'}}, y: {xtls: {result: 'unreachable'}}},
|
|
205
|
-
expectedResult: false,
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
title: 'multiple clusters with various protocols reachable',
|
|
209
|
-
mockStorage: {
|
|
210
|
-
a: {udp: {result: 'reachable'}, tcp: {result: 'reachable'}},
|
|
211
|
-
b: {udp: {result: 'unreachable'}, tcp: {result: 'reachable'}},
|
|
212
|
-
c: {tcp: {result: 'reachable'}},
|
|
213
|
-
d: {xtls: {result: 'reachable'}},
|
|
214
|
-
},
|
|
215
|
-
expectedResult: false,
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
title: 'multiple clusters with all protocols unreachable',
|
|
219
|
-
mockStorage: {
|
|
220
|
-
a: {
|
|
221
|
-
udp: {result: 'unreachable'},
|
|
222
|
-
tcp: {result: 'unreachable'},
|
|
223
|
-
xtls: {result: 'unreachable'},
|
|
224
|
-
},
|
|
225
|
-
b: {
|
|
226
|
-
udp: {result: 'unreachable'},
|
|
227
|
-
tcp: {result: 'unreachable'},
|
|
228
|
-
xtls: {result: 'unreachable'},
|
|
229
|
-
},
|
|
230
|
-
c: {
|
|
231
|
-
udp: {result: 'unreachable'},
|
|
232
|
-
tcp: {result: 'unreachable'},
|
|
233
|
-
xtls: {result: 'unreachable'},
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
expectedResult: true,
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
title: 'multiple clusters with UDP and TCP protocols unreachable, but TLS not tested',
|
|
240
|
-
mockStorage: {
|
|
241
|
-
a: {
|
|
242
|
-
udp: {result: 'unreachable'},
|
|
243
|
-
tcp: {result: 'unreachable'},
|
|
244
|
-
xtls: {result: 'untested'},
|
|
245
|
-
},
|
|
246
|
-
b: {
|
|
247
|
-
udp: {result: 'unreachable'},
|
|
248
|
-
tcp: {result: 'unreachable'},
|
|
249
|
-
xtls: {result: 'untested'},
|
|
250
|
-
},
|
|
251
|
-
c: {
|
|
252
|
-
udp: {result: 'unreachable'},
|
|
253
|
-
tcp: {result: 'unreachable'},
|
|
254
|
-
xtls: {result: 'untested'},
|
|
255
|
-
},
|
|
256
|
-
},
|
|
257
|
-
expectedResult: false,
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
title: 'multiple clusters with UDP and TCP protocols unreachable, but TLS missing',
|
|
261
|
-
mockStorage: {
|
|
262
|
-
a: {
|
|
263
|
-
udp: {result: 'unreachable'},
|
|
264
|
-
tcp: {result: 'unreachable'},
|
|
265
|
-
},
|
|
266
|
-
b: {
|
|
267
|
-
udp: {result: 'unreachable'},
|
|
268
|
-
tcp: {result: 'unreachable'},
|
|
269
|
-
},
|
|
270
|
-
c: {
|
|
271
|
-
udp: {result: 'unreachable'},
|
|
272
|
-
tcp: {result: 'unreachable'},
|
|
273
|
-
},
|
|
274
|
-
},
|
|
275
|
-
expectedResult: false,
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
title: 'multiple clusters with UDP and TLS protocols unreachable, but TCP not tested',
|
|
279
|
-
mockStorage: {
|
|
280
|
-
a: {
|
|
281
|
-
udp: {result: 'unreachable'},
|
|
282
|
-
tcp: {result: 'untested'},
|
|
283
|
-
xtls: {result: 'unreachable'},
|
|
284
|
-
},
|
|
285
|
-
b: {
|
|
286
|
-
udp: {result: 'unreachable'},
|
|
287
|
-
tcp: {result: 'untested'},
|
|
288
|
-
xtls: {result: 'unreachable'},
|
|
289
|
-
},
|
|
290
|
-
c: {
|
|
291
|
-
udp: {result: 'unreachable'},
|
|
292
|
-
tcp: {result: 'untested'},
|
|
293
|
-
xtls: {result: 'unreachable'},
|
|
294
|
-
},
|
|
295
|
-
},
|
|
296
|
-
expectedResult: false,
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
title: 'multiple clusters with UDP and TLS protocols unreachable, but TCP missing',
|
|
300
|
-
mockStorage: {
|
|
301
|
-
a: {
|
|
302
|
-
udp: {result: 'unreachable'},
|
|
303
|
-
xtls: {result: 'unreachable'},
|
|
304
|
-
},
|
|
305
|
-
b: {
|
|
306
|
-
udp: {result: 'unreachable'},
|
|
307
|
-
xtls: {result: 'unreachable'},
|
|
308
|
-
},
|
|
309
|
-
c: {
|
|
310
|
-
udp: {result: 'unreachable'},
|
|
311
|
-
xtls: {result: 'unreachable'},
|
|
312
|
-
},
|
|
313
|
-
},
|
|
314
|
-
expectedResult: false,
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
title: 'multiple clusters with all protocols unreachable, some untested',
|
|
318
|
-
mockStorage: {
|
|
319
|
-
a: {
|
|
320
|
-
udp: {result: 'unreachable'},
|
|
321
|
-
tcp: {result: 'unreachable'},
|
|
322
|
-
xtls: {result: 'unreachable'},
|
|
323
|
-
},
|
|
324
|
-
b: {udp: {result: 'unreachable'}, tcp: {result: 'untested'}, xtls: {result: 'unreachable'}},
|
|
325
|
-
c: {udp: {result: 'unreachable'}, tcp: {result: 'unreachable'}, xtls: {result: 'untested'}},
|
|
326
|
-
},
|
|
327
|
-
expectedResult: true,
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
title: 'multiple clusters with all protocols unreachable, except for 1 reachable on udp',
|
|
331
|
-
mockStorage: {
|
|
332
|
-
a: {
|
|
333
|
-
udp: {result: 'reachable'},
|
|
334
|
-
tcp: {result: 'unreachable'},
|
|
335
|
-
xtls: {result: 'unreachable'},
|
|
336
|
-
},
|
|
337
|
-
b: {
|
|
338
|
-
udp: {result: 'unreachable'},
|
|
339
|
-
tcp: {result: 'unreachable'},
|
|
340
|
-
xtls: {result: 'unreachable'},
|
|
341
|
-
},
|
|
342
|
-
c: {
|
|
343
|
-
udp: {result: 'unreachable'},
|
|
344
|
-
tcp: {result: 'unreachable'},
|
|
345
|
-
xtls: {result: 'unreachable'},
|
|
346
|
-
},
|
|
347
|
-
},
|
|
348
|
-
expectedResult: false,
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
title: 'multiple clusters with all protocols unreachable, except for 1 reachable on tcp',
|
|
352
|
-
mockStorage: {
|
|
353
|
-
a: {
|
|
354
|
-
udp: {result: 'unreachable'},
|
|
355
|
-
tcp: {result: 'unreachable'},
|
|
356
|
-
xtls: {result: 'unreachable'},
|
|
357
|
-
},
|
|
358
|
-
b: {
|
|
359
|
-
udp: {result: 'unreachable'},
|
|
360
|
-
tcp: {result: 'unreachable'},
|
|
361
|
-
xtls: {result: 'unreachable'},
|
|
362
|
-
},
|
|
363
|
-
c: {
|
|
364
|
-
udp: {result: 'unreachable'},
|
|
365
|
-
tcp: {result: 'reachable'},
|
|
366
|
-
xtls: {result: 'unreachable'},
|
|
367
|
-
},
|
|
368
|
-
},
|
|
369
|
-
expectedResult: false,
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
title: 'multiple clusters with all protocols unreachable, except for 1 reachable on xtls',
|
|
373
|
-
mockStorage: {
|
|
374
|
-
a: {
|
|
375
|
-
udp: {result: 'unreachable'},
|
|
376
|
-
tcp: {result: 'unreachable'},
|
|
377
|
-
xtls: {result: 'unreachable'},
|
|
378
|
-
},
|
|
379
|
-
b: {
|
|
380
|
-
udp: {result: 'unreachable'},
|
|
381
|
-
tcp: {result: 'unreachable'},
|
|
382
|
-
xtls: {result: 'reachable'},
|
|
383
|
-
},
|
|
384
|
-
c: {
|
|
385
|
-
udp: {result: 'unreachable'},
|
|
386
|
-
tcp: {result: 'unreachable'},
|
|
387
|
-
xtls: {result: 'unreachable'},
|
|
388
|
-
},
|
|
389
|
-
},
|
|
390
|
-
expectedResult: false,
|
|
391
|
-
},
|
|
392
|
-
{
|
|
393
|
-
title: 'multiple clusters with some missing results',
|
|
394
|
-
mockStorage: {
|
|
395
|
-
a: {udp: {result: 'unreachable'}},
|
|
396
|
-
b: {tcp: {result: 'unreachable'}},
|
|
397
|
-
c: {xtls: {result: 'unreachable'}},
|
|
398
|
-
d: {},
|
|
399
|
-
},
|
|
400
|
-
expectedResult: true,
|
|
401
|
-
},
|
|
402
|
-
].forEach(({mockStorage, expectedResult, title}) => {
|
|
403
|
-
it(`returns ${expectedResult} when ${title}`, async () => {
|
|
404
|
-
await runCheck(mockStorage, expectedResult);
|
|
405
|
-
});
|
|
406
|
-
});
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
|
|
410
144
|
describe('gatherReachability', () => {
|
|
411
145
|
let webex;
|
|
412
146
|
|