@webex/plugin-meetings 3.1.0-next.9 → 3.2.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/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1 -1
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/common/browser-detection.d.ts +9 -0
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/config.d.ts +2 -0
- package/dist/common/errors/captcha-error.d.ts +15 -0
- package/dist/common/errors/intent-to-join.d.ts +16 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- package/dist/common/errors/media.d.ts +15 -0
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/parameter.d.ts +15 -0
- package/dist/common/errors/password-error.d.ts +15 -0
- package/dist/common/errors/permission.d.ts +14 -0
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +34 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +93 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +36 -0
- package/dist/common/queue.d.ts +34 -0
- package/dist/config.d.ts +73 -0
- package/dist/constants.d.ts +1088 -0
- package/dist/constants.js +6 -3
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -0
- package/dist/controls-options-manager/enums.d.ts +15 -0
- package/dist/controls-options-manager/index.d.ts +136 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/util.d.ts +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/locus-info/fullState.d.ts +2 -0
- package/dist/locus-info/hostUtils.d.ts +2 -0
- package/dist/locus-info/index.d.ts +322 -0
- package/dist/locus-info/infoUtils.d.ts +2 -0
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/locus-info/parser.d.ts +272 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/media/index.d.ts +34 -0
- package/dist/media/properties.d.ts +93 -0
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +10 -10
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/meeting/index.d.ts +1825 -0
- package/dist/meeting/index.js +112 -64
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +27 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.d.ts +178 -0
- package/dist/meeting/request.d.ts +295 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +119 -0
- package/dist/meeting/util.js +0 -16
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting/voicea-meeting.js +37 -49
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +69 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/meeting-info/request.d.ts +22 -0
- package/dist/meeting-info/util.d.ts +2 -0
- package/dist/meeting-info/utilv2.d.ts +2 -0
- package/dist/meetings/collection.d.ts +40 -0
- package/dist/meetings/index.d.ts +398 -0
- package/dist/meetings/index.js +12 -28
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/member/index.d.ts +160 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +29 -0
- package/dist/members/index.d.ts +353 -0
- package/dist/members/request.d.ts +114 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +215 -0
- package/dist/metrics/constants.d.ts +70 -0
- package/dist/metrics/index.d.ts +45 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/personal-meeting-room/index.d.ts +47 -0
- package/dist/personal-meeting-room/request.d.ts +14 -0
- package/dist/personal-meeting-room/util.d.ts +2 -0
- package/dist/reachability/clusterReachability.d.ts +110 -0
- package/dist/reachability/index.d.ts +109 -0
- package/dist/reachability/index.js +88 -9
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +39 -0
- package/dist/reachability/util.d.ts +15 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +52 -0
- package/dist/reconnection-manager/index.d.ts +136 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/index.d.ts +207 -0
- package/dist/recording-controller/util.d.ts +14 -0
- package/dist/roap/index.d.ts +86 -0
- package/dist/roap/request.d.ts +39 -0
- package/dist/roap/request.js +3 -27
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +155 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/statsAnalyzer/global.d.ts +36 -0
- package/dist/statsAnalyzer/index.d.ts +217 -0
- package/dist/statsAnalyzer/index.js +4 -2
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +14 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/constants.d.ts +3 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +8 -2
- package/dist/types/meeting/index.d.ts +10 -1
- package/dist/types/meeting/locusMediaRequest.d.ts +1 -0
- package/dist/types/meeting/voicea-meeting.d.ts +3 -2
- package/dist/types/meetings/index.d.ts +1 -16
- package/dist/types/reachability/index.d.ts +11 -0
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +21 -21
- package/src/constants.ts +3 -2
- package/src/mediaQualityMetrics/config.ts +13 -7
- package/src/meeting/index.ts +73 -30
- package/src/meeting/locusMediaRequest.ts +31 -0
- package/src/meeting/util.ts +1 -16
- package/src/meeting/voicea-meeting.ts +44 -46
- package/src/meetings/index.ts +15 -27
- package/src/reachability/index.ts +60 -0
- package/src/roap/request.ts +1 -24
- package/src/statsAnalyzer/index.ts +6 -3
- package/src/statsAnalyzer/mqaUtil.ts +18 -0
- package/test/unit/spec/meeting/index.js +70 -33
- package/test/unit/spec/meeting/locusMediaRequest.ts +49 -0
- package/test/unit/spec/meeting/utils.js +0 -10
- package/test/unit/spec/meeting/voicea-meeting.ts +5 -14
- package/test/unit/spec/meetings/index.js +59 -17
- package/test/unit/spec/reachability/index.ts +266 -0
- package/test/unit/spec/roap/request.ts +0 -37
- package/test/unit/spec/stats-analyzer/index.js +89 -8
|
@@ -18,6 +18,7 @@ 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';
|
|
21
22
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
22
23
|
import Meetings from '@webex/plugin-meetings/src/meetings';
|
|
23
24
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
|
@@ -75,6 +76,8 @@ describe('plugin-meetings', () => {
|
|
|
75
76
|
let test1;
|
|
76
77
|
let test2;
|
|
77
78
|
let locusInfo;
|
|
79
|
+
let services;
|
|
80
|
+
let catalog;
|
|
78
81
|
|
|
79
82
|
describe('meetings index', () => {
|
|
80
83
|
beforeEach(() => {
|
|
@@ -93,9 +96,13 @@ describe('plugin-meetings', () => {
|
|
|
93
96
|
device: Device,
|
|
94
97
|
mercury: Mercury,
|
|
95
98
|
meetings: Meetings,
|
|
99
|
+
services: Services,
|
|
96
100
|
},
|
|
97
101
|
});
|
|
98
102
|
|
|
103
|
+
services = webex.internal.services;
|
|
104
|
+
catalog = services._getCatalog();
|
|
105
|
+
|
|
99
106
|
Object.assign(webex, {
|
|
100
107
|
logging: logger,
|
|
101
108
|
});
|
|
@@ -161,6 +168,7 @@ describe('plugin-meetings', () => {
|
|
|
161
168
|
],
|
|
162
169
|
})
|
|
163
170
|
),
|
|
171
|
+
_getCatalog: sinon.stub().returns(catalog),
|
|
164
172
|
fetchClientRegionInfo: sinon.stub().returns(Promise.resolve()),
|
|
165
173
|
},
|
|
166
174
|
metrics: {
|
|
@@ -513,13 +521,8 @@ describe('plugin-meetings', () => {
|
|
|
513
521
|
});
|
|
514
522
|
describe('#getAllMeetings', () => {
|
|
515
523
|
it('calls MeetingCollection to get all meetings with supplied options', () => {
|
|
516
|
-
webex.meetings.getAllMeetings(
|
|
517
|
-
test: test1,
|
|
518
|
-
});
|
|
524
|
+
webex.meetings.getAllMeetings();
|
|
519
525
|
assert.calledOnce(webex.meetings.meetingCollection.getAll);
|
|
520
|
-
assert.calledWith(webex.meetings.meetingCollection.getAll, {
|
|
521
|
-
test: test1,
|
|
522
|
-
});
|
|
523
526
|
});
|
|
524
527
|
});
|
|
525
528
|
});
|
|
@@ -1011,6 +1014,7 @@ describe('plugin-meetings', () => {
|
|
|
1011
1014
|
callBackInfo: {
|
|
1012
1015
|
callbackAddress: uri1,
|
|
1013
1016
|
},
|
|
1017
|
+
devices: [],
|
|
1014
1018
|
},
|
|
1015
1019
|
info: {
|
|
1016
1020
|
webExMeetingId,
|
|
@@ -1038,6 +1042,7 @@ describe('plugin-meetings', () => {
|
|
|
1038
1042
|
callBackInfo: {
|
|
1039
1043
|
callbackAddress: uri1,
|
|
1040
1044
|
},
|
|
1045
|
+
devices: [],
|
|
1041
1046
|
},
|
|
1042
1047
|
info: {
|
|
1043
1048
|
webExMeetingId,
|
|
@@ -1052,6 +1057,7 @@ describe('plugin-meetings', () => {
|
|
|
1052
1057
|
callBackInfo: {
|
|
1053
1058
|
callbackAddress: uri1,
|
|
1054
1059
|
},
|
|
1060
|
+
devices: [],
|
|
1055
1061
|
},
|
|
1056
1062
|
info: {
|
|
1057
1063
|
webExMeetingId,
|
|
@@ -1074,6 +1080,7 @@ describe('plugin-meetings', () => {
|
|
|
1074
1080
|
callBackInfo: {
|
|
1075
1081
|
callbackAddress: uri1,
|
|
1076
1082
|
},
|
|
1083
|
+
devices: [],
|
|
1077
1084
|
},
|
|
1078
1085
|
info: {
|
|
1079
1086
|
webExMeetingId,
|
|
@@ -1091,6 +1098,7 @@ describe('plugin-meetings', () => {
|
|
|
1091
1098
|
callBackInfo: {
|
|
1092
1099
|
callbackAddress: uri1,
|
|
1093
1100
|
},
|
|
1101
|
+
devices: [],
|
|
1094
1102
|
},
|
|
1095
1103
|
info: {
|
|
1096
1104
|
webExMeetingId,
|
|
@@ -1121,6 +1129,7 @@ describe('plugin-meetings', () => {
|
|
|
1121
1129
|
callBackInfo: {
|
|
1122
1130
|
callbackAddress: uri1,
|
|
1123
1131
|
},
|
|
1132
|
+
devices: [],
|
|
1124
1133
|
},
|
|
1125
1134
|
info: {
|
|
1126
1135
|
webExMeetingId,
|
|
@@ -1143,6 +1152,7 @@ describe('plugin-meetings', () => {
|
|
|
1143
1152
|
callBackInfo: {
|
|
1144
1153
|
callbackAddress: uri1,
|
|
1145
1154
|
},
|
|
1155
|
+
devices: [],
|
|
1146
1156
|
},
|
|
1147
1157
|
info: {
|
|
1148
1158
|
webExMeetingId,
|
|
@@ -1157,6 +1167,7 @@ describe('plugin-meetings', () => {
|
|
|
1157
1167
|
callbackInfo: {
|
|
1158
1168
|
callbackAddress: uri1,
|
|
1159
1169
|
},
|
|
1170
|
+
devices: [],
|
|
1160
1171
|
},
|
|
1161
1172
|
info: {
|
|
1162
1173
|
isUnifiedSpaceMeeting,
|
|
@@ -1914,34 +1925,34 @@ describe('plugin-meetings', () => {
|
|
|
1914
1925
|
let loggerProxySpy;
|
|
1915
1926
|
|
|
1916
1927
|
it('should call request.getMeetingPreferences to get the preferred webex site ', async () => {
|
|
1928
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1917
1929
|
assert.isDefined(webex.meetings.preferredWebexSite);
|
|
1918
1930
|
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1919
1931
|
|
|
1920
1932
|
assert.equal(webex.meetings.preferredWebexSite, 'go.webex.com');
|
|
1933
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
1934
|
+
'go.webex.com',
|
|
1935
|
+
]);
|
|
1921
1936
|
});
|
|
1922
1937
|
|
|
1923
1938
|
const setup = ({user} = {}) => {
|
|
1924
1939
|
loggerProxySpy = sinon.spy(LoggerProxy.logger, 'error');
|
|
1940
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1925
1941
|
|
|
1926
1942
|
Object.assign(webex.internal, {
|
|
1927
|
-
services: {
|
|
1928
|
-
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1929
|
-
},
|
|
1930
1943
|
user: {
|
|
1931
1944
|
get: sinon.stub().returns(Promise.resolve(user)),
|
|
1932
1945
|
},
|
|
1933
1946
|
});
|
|
1947
|
+
|
|
1948
|
+
Object.assign(webex.internal.services, {
|
|
1949
|
+
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1950
|
+
});
|
|
1934
1951
|
};
|
|
1935
1952
|
|
|
1936
1953
|
it('should not fail if UserPreferred info is not fetched ', async () => {
|
|
1937
1954
|
setup();
|
|
1938
1955
|
|
|
1939
|
-
Object.assign(webex.internal, {
|
|
1940
|
-
services: {
|
|
1941
|
-
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1942
|
-
},
|
|
1943
|
-
});
|
|
1944
|
-
|
|
1945
1956
|
await webex.meetings.fetchUserPreferredWebexSite().then(() => {
|
|
1946
1957
|
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
1947
1958
|
});
|
|
@@ -1949,6 +1960,7 @@ describe('plugin-meetings', () => {
|
|
|
1949
1960
|
loggerProxySpy,
|
|
1950
1961
|
'Failed to fetch preferred site from user - no site will be set'
|
|
1951
1962
|
);
|
|
1963
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
1952
1964
|
});
|
|
1953
1965
|
|
|
1954
1966
|
it('should fall back to fetching the site from the user', async () => {
|
|
@@ -1965,6 +1977,10 @@ describe('plugin-meetings', () => {
|
|
|
1965
1977
|
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1966
1978
|
|
|
1967
1979
|
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
1980
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
1981
|
+
'',
|
|
1982
|
+
'site.webex.com',
|
|
1983
|
+
]);
|
|
1968
1984
|
assert.notCalled(loggerProxySpy);
|
|
1969
1985
|
});
|
|
1970
1986
|
|
|
@@ -1986,6 +2002,7 @@ describe('plugin-meetings', () => {
|
|
|
1986
2002
|
loggerProxySpy,
|
|
1987
2003
|
'Failed to fetch preferred site from user - no site will be set'
|
|
1988
2004
|
);
|
|
2005
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
1989
2006
|
});
|
|
1990
2007
|
}
|
|
1991
2008
|
);
|
|
@@ -2002,6 +2019,7 @@ describe('plugin-meetings', () => {
|
|
|
2002
2019
|
loggerProxySpy,
|
|
2003
2020
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2004
2021
|
);
|
|
2022
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2005
2023
|
});
|
|
2006
2024
|
|
|
2007
2025
|
it('should fall back to fetching the site from the user', async () => {
|
|
@@ -2019,6 +2037,10 @@ describe('plugin-meetings', () => {
|
|
|
2019
2037
|
|
|
2020
2038
|
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
2021
2039
|
assert.notCalled(loggerProxySpy);
|
|
2040
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
2041
|
+
'',
|
|
2042
|
+
'site.webex.com',
|
|
2043
|
+
]);
|
|
2022
2044
|
});
|
|
2023
2045
|
|
|
2024
2046
|
forEach(
|
|
@@ -2039,6 +2061,7 @@ describe('plugin-meetings', () => {
|
|
|
2039
2061
|
loggerProxySpy,
|
|
2040
2062
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2041
2063
|
);
|
|
2064
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2042
2065
|
});
|
|
2043
2066
|
}
|
|
2044
2067
|
);
|
|
@@ -2055,6 +2078,7 @@ describe('plugin-meetings', () => {
|
|
|
2055
2078
|
loggerProxySpy,
|
|
2056
2079
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2057
2080
|
);
|
|
2081
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2058
2082
|
});
|
|
2059
2083
|
});
|
|
2060
2084
|
});
|
|
@@ -2299,6 +2323,7 @@ describe('plugin-meetings', () => {
|
|
|
2299
2323
|
sessionType: 'BREAKOUT',
|
|
2300
2324
|
};
|
|
2301
2325
|
newLocus.self.state = 'JOINED';
|
|
2326
|
+
newLocus.self.devices = [];
|
|
2302
2327
|
newLocus.fullState = {
|
|
2303
2328
|
active: true,
|
|
2304
2329
|
};
|
|
@@ -2315,7 +2340,7 @@ describe('plugin-meetings', () => {
|
|
|
2315
2340
|
sessionType: 'MAIN',
|
|
2316
2341
|
};
|
|
2317
2342
|
newLocus.self.state = 'JOINED';
|
|
2318
|
-
|
|
2343
|
+
newLocus.self.devices = [];
|
|
2319
2344
|
LoggerProxy.logger.log = sinon.stub();
|
|
2320
2345
|
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2321
2346
|
assert.equal(result, true);
|
|
@@ -2330,11 +2355,28 @@ describe('plugin-meetings', () => {
|
|
|
2330
2355
|
};
|
|
2331
2356
|
newLocus.self.state = 'LEFT';
|
|
2332
2357
|
newLocus.self.reason = 'MOVED';
|
|
2333
|
-
|
|
2358
|
+
newLocus.self.devices = [];
|
|
2334
2359
|
LoggerProxy.logger.log = sinon.stub();
|
|
2335
2360
|
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2336
2361
|
assert.equal(result, false);
|
|
2337
2362
|
});
|
|
2363
|
+
it('moved to lobby, return true', () => {
|
|
2364
|
+
newLocus.controls.breakout = {
|
|
2365
|
+
sessionType: 'MAIN',
|
|
2366
|
+
};
|
|
2367
|
+
newLocus.self.state = 'JOINED';
|
|
2368
|
+
newLocus.self.devices = [
|
|
2369
|
+
{
|
|
2370
|
+
intent: {
|
|
2371
|
+
reason: 'ON_HOLD_LOBBY',
|
|
2372
|
+
type: 'WAIT',
|
|
2373
|
+
},
|
|
2374
|
+
},
|
|
2375
|
+
];
|
|
2376
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
2377
|
+
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2378
|
+
assert.equal(result, true);
|
|
2379
|
+
});
|
|
2338
2380
|
});
|
|
2339
2381
|
|
|
2340
2382
|
describe('#getCorrespondingMeetingByLocus', () => {
|
|
@@ -141,6 +141,272 @@ 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
|
+
|
|
144
410
|
describe('gatherReachability', () => {
|
|
145
411
|
let webex;
|
|
146
412
|
|
|
@@ -133,20 +133,6 @@ describe('plugin-meetings/roap', () => {
|
|
|
133
133
|
locusMediaRequest,
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
-
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
137
|
-
name: 'client.locus.media.request',
|
|
138
|
-
options: {
|
|
139
|
-
meetingId: 'meeting-id',
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
144
|
-
name: 'client.locus.media.response',
|
|
145
|
-
options: {
|
|
146
|
-
meetingId: 'meeting-id',
|
|
147
|
-
},
|
|
148
|
-
});
|
|
149
|
-
|
|
150
136
|
const requestParams = locusMediaRequest.send.getCall(0).args[0];
|
|
151
137
|
assert.deepEqual(requestParams, {
|
|
152
138
|
type: 'RoapMessage',
|
|
@@ -175,29 +161,6 @@ describe('plugin-meetings/roap', () => {
|
|
|
175
161
|
},
|
|
176
162
|
});
|
|
177
163
|
});
|
|
178
|
-
|
|
179
|
-
it('sends correct client event when fails', async () => {
|
|
180
|
-
const locusMediaRequest = {send: sinon.stub().rejects({code: 300, message: 'error'})};
|
|
181
|
-
try {
|
|
182
|
-
await roapRequest.sendRoap({
|
|
183
|
-
locusSelfUrl: locusUrl,
|
|
184
|
-
mediaId: 'mediaId',
|
|
185
|
-
roapMessage: {
|
|
186
|
-
seq: 'seq',
|
|
187
|
-
},
|
|
188
|
-
meetingId: 'meeting-id',
|
|
189
|
-
locusMediaRequest,
|
|
190
|
-
});
|
|
191
|
-
} catch (err) {
|
|
192
|
-
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
193
|
-
name: 'client.locus.media.response',
|
|
194
|
-
options: {
|
|
195
|
-
meetingId: 'meeting-id',
|
|
196
|
-
rawError: {code: 300, message: 'error'},
|
|
197
|
-
},
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
164
|
});
|
|
202
165
|
|
|
203
166
|
it('calls attachReachabilityData when sendRoap', async () => {
|