@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20
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/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +116 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/index.js +226 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +88 -46
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +184 -190
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +34 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +67 -111
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +80 -114
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -12
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +125 -190
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +5 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1692 -1925
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +36 -77
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +224 -230
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +43 -215
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +5 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +490 -560
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +24 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +99 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +78 -86
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +31 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +3 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +93 -200
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +16 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +55 -135
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +57 -32
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +15 -21
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js +10 -50
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +45 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +18 -58
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +362 -416
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +36 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +138 -182
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +3 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +322 -455
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +39 -64
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +94 -113
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +85 -94
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +85 -175
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +72 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +25 -20
- package/src/breakouts/README.md +190 -0
- package/src/breakouts/breakout.ts +110 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/index.ts +225 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +40 -1
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +114 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +148 -64
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
- package/src/media/{index.js → index.ts} +181 -131
- package/src/media/{properties.js → properties.ts} +47 -28
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
- package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
- package/src/meeting/in-meeting-actions.ts +15 -3
- package/src/meeting/{index.js → index.ts} +2263 -1427
- package/src/meeting/{muteState.js → muteState.ts} +78 -42
- package/src/meeting/{request.js → request.ts} +292 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +112 -115
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +6 -3
- package/src/meetings/index.ts +1159 -0
- package/src/meetings/{request.js → request.ts} +32 -25
- package/src/meetings/{util.js → util.ts} +34 -32
- package/src/member/{index.js → index.ts} +102 -56
- package/src/member/{util.js → util.ts} +52 -25
- package/src/members/{collection.js → collection.ts} +2 -2
- package/src/members/{index.js → index.ts} +219 -142
- package/src/members/{request.js → request.ts} +60 -16
- package/src/members/{util.js → util.ts} +50 -48
- package/src/metrics/{config.js → config.ts} +254 -83
- package/src/metrics/{constants.js → constants.ts} +0 -2
- package/src/metrics/{index.js → index.ts} +106 -74
- package/src/multistream/mediaRequestManager.ts +81 -15
- package/src/multistream/multistreamMedia.ts +5 -0
- package/src/multistream/receiveSlot.ts +18 -12
- package/src/multistream/receiveSlotManager.ts +23 -21
- package/src/multistream/remoteMedia.ts +15 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +153 -37
- package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +99 -83
- package/src/reachability/request.ts +39 -33
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +195 -102
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +73 -56
- package/src/roap/request.ts +157 -0
- package/src/roap/turnDiscovery.ts +77 -37
- package/src/statsAnalyzer/{global.js → global.ts} +30 -33
- package/src/statsAnalyzer/{index.js → index.ts} +468 -192
- package/src/statsAnalyzer/mqaUtil.ts +290 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/journey.js +664 -463
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +119 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/index.ts +293 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +25 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +104 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +97 -103
- package/test/unit/spec/locus-info/selfUtils.js +105 -12
- package/test/unit/spec/media/index.ts +31 -47
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/effectsState.js +39 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
- package/test/unit/spec/meeting/index.js +2017 -742
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +115 -44
- package/test/unit/spec/meeting/utils.js +104 -171
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +439 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +31 -7
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
- package/test/unit/spec/multistream/receiveSlot.ts +6 -6
- package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
- package/test/unit/spec/multistream/remoteMedia.ts +10 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
- package/test/unit/spec/networkQualityMonitor/index.js +21 -15
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +58 -26
- package/test/unit/spec/reconnection-manager/index.js +102 -9
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +2 -1
- package/test/unit/spec/roap/request.ts +114 -0
- package/test/unit/spec/roap/turnDiscovery.ts +64 -45
- package/test/unit/spec/stats-analyzer/index.js +27 -22
- package/test/utils/cmr.js +44 -42
- package/test/utils/testUtils.js +83 -74
- package/test/utils/webex-config.js +18 -18
- package/test/utils/webex-test-users.js +54 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
|
@@ -4,12 +4,13 @@ import TurnDiscovery from '@webex/plugin-meetings/src/roap/turnDiscovery';
|
|
|
4
4
|
|
|
5
5
|
import RoapRequest from '@webex/plugin-meetings/src/roap/request';
|
|
6
6
|
import Roap from '@webex/plugin-meetings/src/roap/';
|
|
7
|
+
import Meeting from '@webex/plugin-meetings/src/meeting';
|
|
7
8
|
|
|
8
9
|
describe('Roap', () => {
|
|
9
10
|
describe('doTurnDiscovery', () => {
|
|
10
11
|
it('calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments', async () => {
|
|
11
12
|
const RESULT = {something: 'some value'};
|
|
12
|
-
const meeting = {id: 'some meeting id'};
|
|
13
|
+
const meeting = {id: 'some meeting id'} as Meeting;
|
|
13
14
|
|
|
14
15
|
const doTurnDiscoveryStub = sinon
|
|
15
16
|
.stub(TurnDiscovery.prototype, 'doTurnDiscovery')
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import {assert} from '@webex/test-helper-chai';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
import MockWebex from '@webex/test-helper-mock-webex';
|
|
4
|
+
import Metrics from '@webex/plugin-meetings/src/metrics';
|
|
5
|
+
|
|
6
|
+
import RoapRequest from '@webex/plugin-meetings/src/roap/request';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
describe('RoapRequest', () => {
|
|
10
|
+
describe('attachRechabilityData', () => {
|
|
11
|
+
let webex;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
webex = new MockWebex();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('attaches the reachability data when it exists', async () => {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
const roapRequest = new RoapRequest({}, {parent: webex});
|
|
20
|
+
|
|
21
|
+
const sdp = {some: 'attribute'};
|
|
22
|
+
|
|
23
|
+
const reachabilitData = {reachability: 'data'};
|
|
24
|
+
|
|
25
|
+
await webex.boundedStorage.put(
|
|
26
|
+
'Reachability',
|
|
27
|
+
'reachability.result',
|
|
28
|
+
JSON.stringify(reachabilitData)
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const newSdp = await roapRequest.attachRechabilityData(sdp);
|
|
32
|
+
|
|
33
|
+
assert.deepEqual(newSdp, {
|
|
34
|
+
some: 'attribute',
|
|
35
|
+
reachability: reachabilitData
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('handles the case when realiability data does not exist', async () => {
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
const roapRequest = new RoapRequest({}, {parent: webex});
|
|
42
|
+
|
|
43
|
+
const sdp = {some: 'attribute'};
|
|
44
|
+
|
|
45
|
+
const newSdp = await roapRequest.attachRechabilityData(sdp);
|
|
46
|
+
|
|
47
|
+
assert.deepEqual(newSdp, sdp);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('sendRoap', () => {
|
|
52
|
+
let webex;
|
|
53
|
+
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
webex = new MockWebex();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('calls attachReliabilityData', async () => {
|
|
59
|
+
Metrics.postEvent = sinon.stub();
|
|
60
|
+
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
const roapRequest = new RoapRequest({}, {parent: webex});
|
|
63
|
+
|
|
64
|
+
const newSdp = {new: 'sdp'}
|
|
65
|
+
|
|
66
|
+
roapRequest.attachRechabilityData = sinon.stub().returns(Promise.resolve(newSdp));
|
|
67
|
+
webex.request.returns(Promise.resolve({
|
|
68
|
+
body: {
|
|
69
|
+
locus: {}
|
|
70
|
+
}
|
|
71
|
+
}))
|
|
72
|
+
|
|
73
|
+
const result = await roapRequest.sendRoap({
|
|
74
|
+
roapMessage: {seq: 1},
|
|
75
|
+
locusSelfUrl: 'locusSelfUrl',
|
|
76
|
+
mediaId: 'mediaId',
|
|
77
|
+
correlationId: 'correlationId',
|
|
78
|
+
audioMuted: true,
|
|
79
|
+
videoMuted: true,
|
|
80
|
+
meetingId: 'meetingId',
|
|
81
|
+
preferTranscoding: true
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
assert.calledOnceWithExactly(webex.request, {
|
|
85
|
+
uri: 'locusSelfUrl/media',
|
|
86
|
+
method: 'PUT',
|
|
87
|
+
body: {
|
|
88
|
+
device: {
|
|
89
|
+
url: undefined,
|
|
90
|
+
deviceType: undefined,
|
|
91
|
+
},
|
|
92
|
+
correlationId: 'correlationId',
|
|
93
|
+
localMedias: [{
|
|
94
|
+
localSdp: JSON.stringify(newSdp),
|
|
95
|
+
mediaId: 'mediaId'
|
|
96
|
+
}],
|
|
97
|
+
clientMediaPreferences: {preferTranscoding: true}
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
assert.calledOnceWithExactly(roapRequest.attachRechabilityData, {
|
|
102
|
+
roapMessage: {seq: 1},
|
|
103
|
+
audioMuted: true,
|
|
104
|
+
videoMuted: true
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
assert.deepEqual(result, {
|
|
108
|
+
locus: {
|
|
109
|
+
roapSeq: 1
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
})
|
|
114
|
+
});
|
|
@@ -25,15 +25,15 @@ describe('TurnDiscovery', () => {
|
|
|
25
25
|
sinon.stub(Metrics, 'sendBehavioralMetric');
|
|
26
26
|
|
|
27
27
|
mockRoapRequest = {
|
|
28
|
-
sendRoap: sinon.fake.resolves({mediaConnections: FAKE_MEDIA_CONNECTIONS_FROM_LOCUS})
|
|
28
|
+
sendRoap: sinon.fake.resolves({mediaConnections: FAKE_MEDIA_CONNECTIONS_FROM_LOCUS}),
|
|
29
29
|
} as unknown as RoapRequest;
|
|
30
30
|
|
|
31
31
|
testMeeting = {
|
|
32
32
|
id: 'fake meeting id',
|
|
33
33
|
config: {
|
|
34
34
|
experimental: {
|
|
35
|
-
enableTurnDiscovery: true
|
|
36
|
-
}
|
|
35
|
+
enableTurnDiscovery: true,
|
|
36
|
+
},
|
|
37
37
|
},
|
|
38
38
|
correlationId: 'fake correlation id',
|
|
39
39
|
selfUrl: 'fake self url',
|
|
@@ -46,7 +46,8 @@ describe('TurnDiscovery', () => {
|
|
|
46
46
|
testMeeting.roapSeq = newSeq;
|
|
47
47
|
}),
|
|
48
48
|
updateMediaConnections: sinon.stub(),
|
|
49
|
-
webex: {meetings: {reachability: {isAnyClusterReachable: () => false}}}
|
|
49
|
+
webex: {meetings: {reachability: {isAnyClusterReachable: () => Promise.resolve(false)}}},
|
|
50
|
+
isMultistream: false
|
|
50
51
|
};
|
|
51
52
|
});
|
|
52
53
|
|
|
@@ -55,7 +56,11 @@ describe('TurnDiscovery', () => {
|
|
|
55
56
|
sinon.restore();
|
|
56
57
|
});
|
|
57
58
|
|
|
58
|
-
const checkRoapMessageSent = async (
|
|
59
|
+
const checkRoapMessageSent = async (
|
|
60
|
+
messageType,
|
|
61
|
+
expectedSeq,
|
|
62
|
+
expectedMediaId = testMeeting.mediaId
|
|
63
|
+
) => {
|
|
59
64
|
await testUtils.flushPromises();
|
|
60
65
|
|
|
61
66
|
assert.calledOnce(mockRoapRequest.sendRoap);
|
|
@@ -70,7 +75,8 @@ describe('TurnDiscovery', () => {
|
|
|
70
75
|
mediaId: expectedMediaId,
|
|
71
76
|
audioMuted: testMeeting.isAudioMuted(),
|
|
72
77
|
videoMuted: testMeeting.isVideoMuted(),
|
|
73
|
-
meetingId: testMeeting.id
|
|
78
|
+
meetingId: testMeeting.id,
|
|
79
|
+
preferTranscoding: !testMeeting.isMultistream
|
|
74
80
|
});
|
|
75
81
|
|
|
76
82
|
if (messageType === 'TURN_DISCOVERY_REQUEST') {
|
|
@@ -93,39 +99,44 @@ describe('TurnDiscovery', () => {
|
|
|
93
99
|
};
|
|
94
100
|
|
|
95
101
|
describe('doTurnDiscovery', () => {
|
|
96
|
-
|
|
97
|
-
|
|
102
|
+
[false, true].forEach(function (enabledMultistream ) {
|
|
103
|
+
it('sends TURN_DISCOVERY_REQUEST'+ (enabledMultistream ? ' when enable Multistream':'') + ', waits for response and sends OK', async () => {
|
|
104
|
+
testMeeting.isMultistream = enabledMultistream;
|
|
98
105
|
|
|
99
|
-
|
|
106
|
+
const td = new TurnDiscovery(mockRoapRequest);
|
|
100
107
|
|
|
101
|
-
|
|
102
|
-
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
108
|
+
const result = td.doTurnDiscovery(testMeeting, false);
|
|
103
109
|
|
|
104
|
-
|
|
110
|
+
// check that TURN_DISCOVERY_REQUEST was sent
|
|
111
|
+
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
headers: [
|
|
109
|
-
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
110
|
-
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
111
|
-
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
112
|
-
]
|
|
113
|
-
});
|
|
113
|
+
// @ts-ignore
|
|
114
|
+
mockRoapRequest.sendRoap.resetHistory();
|
|
114
115
|
|
|
115
|
-
|
|
116
|
+
// simulate the response
|
|
117
|
+
td.handleTurnDiscoveryResponse({
|
|
118
|
+
headers: [
|
|
119
|
+
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
120
|
+
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
121
|
+
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
122
|
+
]
|
|
123
|
+
});
|
|
116
124
|
|
|
117
|
-
|
|
118
|
-
await checkRoapMessageSent('OK', 0);
|
|
125
|
+
await testUtils.flushPromises();
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
// check that we've sent OK
|
|
128
|
+
await checkRoapMessageSent('OK', 0);
|
|
121
129
|
|
|
122
|
-
|
|
123
|
-
url: FAKE_TURN_URL,
|
|
124
|
-
username: FAKE_TURN_USERNAME,
|
|
125
|
-
password: FAKE_TURN_PASSWORD
|
|
126
|
-
});
|
|
130
|
+
const {turnServerInfo, turnDiscoverySkippedReason} = await result;
|
|
127
131
|
|
|
128
|
-
|
|
132
|
+
assert.deepEqual(turnServerInfo, {
|
|
133
|
+
url: FAKE_TURN_URL,
|
|
134
|
+
username: FAKE_TURN_USERNAME,
|
|
135
|
+
password: FAKE_TURN_PASSWORD
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
assert.isUndefined(turnDiscoverySkippedReason);
|
|
139
|
+
});
|
|
129
140
|
});
|
|
130
141
|
|
|
131
142
|
it('sends TURN_DISCOVERY_REQUEST with empty mediaId when isReconnecting is true', async () => {
|
|
@@ -137,6 +148,7 @@ describe('TurnDiscovery', () => {
|
|
|
137
148
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0, '');
|
|
138
149
|
|
|
139
150
|
// the main part of the test is complete now, checking the remaining part of the flow just for completeness
|
|
151
|
+
// @ts-ignore
|
|
140
152
|
mockRoapRequest.sendRoap.resetHistory();
|
|
141
153
|
|
|
142
154
|
// simulate the response
|
|
@@ -145,7 +157,7 @@ describe('TurnDiscovery', () => {
|
|
|
145
157
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
146
158
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
147
159
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
148
|
-
]
|
|
160
|
+
],
|
|
149
161
|
});
|
|
150
162
|
|
|
151
163
|
await testUtils.flushPromises();
|
|
@@ -158,7 +170,7 @@ describe('TurnDiscovery', () => {
|
|
|
158
170
|
assert.deepEqual(turnServerInfo, {
|
|
159
171
|
url: FAKE_TURN_URL,
|
|
160
172
|
username: FAKE_TURN_USERNAME,
|
|
161
|
-
password: FAKE_TURN_PASSWORD
|
|
173
|
+
password: FAKE_TURN_PASSWORD,
|
|
162
174
|
});
|
|
163
175
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
164
176
|
});
|
|
@@ -169,7 +181,7 @@ describe('TurnDiscovery', () => {
|
|
|
169
181
|
|
|
170
182
|
// check that TURN_DISCOVERY_REQUEST was sent
|
|
171
183
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
172
|
-
|
|
184
|
+
// @ts-ignore
|
|
173
185
|
mockRoapRequest.sendRoap.resetHistory();
|
|
174
186
|
|
|
175
187
|
// simulate the response with some extra headers
|
|
@@ -181,7 +193,7 @@ describe('TurnDiscovery', () => {
|
|
|
181
193
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
182
194
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
183
195
|
'another-header-at-the-end=12345',
|
|
184
|
-
]
|
|
196
|
+
],
|
|
185
197
|
});
|
|
186
198
|
|
|
187
199
|
await testUtils.flushPromises();
|
|
@@ -193,7 +205,7 @@ describe('TurnDiscovery', () => {
|
|
|
193
205
|
assert.deepEqual(turnServerInfo, {
|
|
194
206
|
url: FAKE_TURN_URL,
|
|
195
207
|
username: FAKE_TURN_USERNAME,
|
|
196
|
-
password: FAKE_TURN_PASSWORD
|
|
208
|
+
password: FAKE_TURN_PASSWORD,
|
|
197
209
|
});
|
|
198
210
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
199
211
|
});
|
|
@@ -202,7 +214,7 @@ describe('TurnDiscovery', () => {
|
|
|
202
214
|
const prevConfigValue = testMeeting.config.experimental.enableTurnDiscovery;
|
|
203
215
|
|
|
204
216
|
testMeeting.config.experimental.enableTurnDiscovery = false;
|
|
205
|
-
|
|
217
|
+
// @ts-ignore
|
|
206
218
|
const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
|
|
207
219
|
|
|
208
220
|
const {turnServerInfo, turnDiscoverySkippedReason} = result;
|
|
@@ -232,7 +244,7 @@ describe('TurnDiscovery', () => {
|
|
|
232
244
|
|
|
233
245
|
it('resolves with undefined when cluster is reachable', async () => {
|
|
234
246
|
const prev = testMeeting.webex.meetings.reachability.isAnyClusterReachable;
|
|
235
|
-
testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => true;
|
|
247
|
+
testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => Promise.resolve(true);
|
|
236
248
|
const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
|
|
237
249
|
|
|
238
250
|
const {turnServerInfo, turnDiscoverySkippedReason} = result;
|
|
@@ -242,10 +254,9 @@ describe('TurnDiscovery', () => {
|
|
|
242
254
|
assert.notCalled(mockRoapRequest.sendRoap);
|
|
243
255
|
assert.notCalled(Metrics.sendBehavioralMetric);
|
|
244
256
|
testMeeting.webex.meetings.reachability.isAnyClusterReachable = prev;
|
|
245
|
-
|
|
246
257
|
});
|
|
247
258
|
|
|
248
|
-
it(
|
|
259
|
+
it("resolves with undefined if we don't get a response within 10s", async () => {
|
|
249
260
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
250
261
|
|
|
251
262
|
const promise = td.doTurnDiscovery(testMeeting, false);
|
|
@@ -264,12 +275,14 @@ describe('TurnDiscovery', () => {
|
|
|
264
275
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
265
276
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
266
277
|
|
|
278
|
+
await testUtils.flushPromises();
|
|
279
|
+
|
|
267
280
|
// simulate the response without the password
|
|
268
281
|
td.handleTurnDiscoveryResponse({
|
|
269
282
|
headers: [
|
|
270
283
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
271
284
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
272
|
-
]
|
|
285
|
+
],
|
|
273
286
|
});
|
|
274
287
|
await testUtils.flushPromises();
|
|
275
288
|
const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
|
|
@@ -283,6 +296,8 @@ describe('TurnDiscovery', () => {
|
|
|
283
296
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
284
297
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
285
298
|
|
|
299
|
+
await testUtils.flushPromises();
|
|
300
|
+
|
|
286
301
|
// simulate the response without the headers
|
|
287
302
|
td.handleTurnDiscoveryResponse({});
|
|
288
303
|
|
|
@@ -298,11 +313,13 @@ describe('TurnDiscovery', () => {
|
|
|
298
313
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
299
314
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
300
315
|
|
|
316
|
+
await testUtils.flushPromises();
|
|
317
|
+
|
|
301
318
|
// simulate the response without the headers
|
|
302
319
|
td.handleTurnDiscoveryResponse({headers: []});
|
|
303
320
|
|
|
304
321
|
await testUtils.flushPromises();
|
|
305
|
-
const {turnServerInfo, turnDiscoverySkippedReason}= await turnDiscoveryPromise;
|
|
322
|
+
const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
|
|
306
323
|
|
|
307
324
|
assert.isUndefined(turnServerInfo);
|
|
308
325
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
@@ -314,9 +331,11 @@ describe('TurnDiscovery', () => {
|
|
|
314
331
|
|
|
315
332
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
316
333
|
|
|
334
|
+
await testUtils.flushPromises();
|
|
335
|
+
|
|
317
336
|
// check that TURN_DISCOVERY_REQUEST was sent
|
|
318
337
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
319
|
-
|
|
338
|
+
// @ts-ignore
|
|
320
339
|
mockRoapRequest.sendRoap.resetHistory();
|
|
321
340
|
|
|
322
341
|
// setup the mock so that sending of OK fails
|
|
@@ -328,7 +347,7 @@ describe('TurnDiscovery', () => {
|
|
|
328
347
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
329
348
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
330
349
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
331
|
-
]
|
|
350
|
+
],
|
|
332
351
|
});
|
|
333
352
|
|
|
334
353
|
await testUtils.flushPromises();
|
|
@@ -345,7 +364,7 @@ describe('TurnDiscovery', () => {
|
|
|
345
364
|
});
|
|
346
365
|
|
|
347
366
|
describe('handleTurnDiscoveryResponse', () => {
|
|
348
|
-
it(
|
|
367
|
+
it("doesn't do anything if turn discovery was not started", () => {
|
|
349
368
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
350
369
|
|
|
351
370
|
// there is not much we can check, but we mainly want to make
|
|
@@ -355,7 +374,7 @@ describe('TurnDiscovery', () => {
|
|
|
355
374
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
356
375
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
357
376
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
358
|
-
]
|
|
377
|
+
],
|
|
359
378
|
});
|
|
360
379
|
|
|
361
380
|
assert.notCalled(mockRoapRequest.sendRoap);
|
|
@@ -2,7 +2,7 @@ import 'jsdom-global/register';
|
|
|
2
2
|
import chai from 'chai';
|
|
3
3
|
import chaiAsPromised from 'chai-as-promised';
|
|
4
4
|
import sinon from 'sinon';
|
|
5
|
-
import {
|
|
5
|
+
import {ConnectionState} from '@webex/internal-media-core';
|
|
6
6
|
|
|
7
7
|
import {StatsAnalyzer, EVENTS} from '../../../../src/statsAnalyzer';
|
|
8
8
|
import NetworkQualityMonitor from '../../../../src/networkQualityMonitor';
|
|
@@ -20,31 +20,31 @@ describe('plugin-meetings', () => {
|
|
|
20
20
|
let sandBoxSpy;
|
|
21
21
|
|
|
22
22
|
const initialConfig = {
|
|
23
|
-
videoPacketLossRatioThreshold: 9
|
|
23
|
+
videoPacketLossRatioThreshold: 9,
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const defaultStats = {
|
|
27
27
|
internal: {
|
|
28
28
|
video: {
|
|
29
29
|
send: {
|
|
30
|
-
totalPacketsLostOnReceiver: 10
|
|
31
|
-
}
|
|
32
|
-
}
|
|
30
|
+
totalPacketsLostOnReceiver: 10,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
33
|
},
|
|
34
34
|
video: {
|
|
35
35
|
send: {
|
|
36
36
|
packetsSent: 2,
|
|
37
37
|
meanRemoteJitter: [],
|
|
38
|
-
meanRoundTripTime: []
|
|
39
|
-
}
|
|
40
|
-
}
|
|
38
|
+
meanRoundTripTime: [],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
const statusResult = {
|
|
44
44
|
type: 'remote-inbound-rtp',
|
|
45
45
|
packetsLost: 11,
|
|
46
46
|
rttThreshold: 501,
|
|
47
|
-
jitterThreshold: 501
|
|
47
|
+
jitterThreshold: 501,
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
const sandbox = sinon.createSandbox();
|
|
@@ -54,7 +54,10 @@ describe('plugin-meetings', () => {
|
|
|
54
54
|
|
|
55
55
|
statsAnalyzer = new StatsAnalyzer(initialConfig, networkQualityMonitor, defaultStats);
|
|
56
56
|
|
|
57
|
-
sandBoxSpy = sandbox.spy(
|
|
57
|
+
sandBoxSpy = sandbox.spy(
|
|
58
|
+
statsAnalyzer.networkQualityMonitor,
|
|
59
|
+
'determineUplinkNetworkQuality'
|
|
60
|
+
);
|
|
58
61
|
});
|
|
59
62
|
|
|
60
63
|
afterEach(() => {
|
|
@@ -65,11 +68,13 @@ describe('plugin-meetings', () => {
|
|
|
65
68
|
await statsAnalyzer.parseGetStatsResult(statusResult, 'video');
|
|
66
69
|
|
|
67
70
|
assert.calledOnce(statsAnalyzer.networkQualityMonitor.determineUplinkNetworkQuality);
|
|
68
|
-
assert(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
assert(
|
|
72
|
+
sandBoxSpy.calledWith({
|
|
73
|
+
mediaType: 'video',
|
|
74
|
+
remoteRtpResults: statusResult,
|
|
75
|
+
statsAnalyzerCurrentStats: statsAnalyzer.statsResults,
|
|
76
|
+
})
|
|
77
|
+
);
|
|
73
78
|
});
|
|
74
79
|
});
|
|
75
80
|
|
|
@@ -114,7 +119,7 @@ describe('plugin-meetings', () => {
|
|
|
114
119
|
type: 'outbound-rtp',
|
|
115
120
|
packetsSent: 0,
|
|
116
121
|
bytesSent: 1,
|
|
117
|
-
}
|
|
122
|
+
},
|
|
118
123
|
},
|
|
119
124
|
video: {
|
|
120
125
|
receiver: {
|
|
@@ -126,12 +131,12 @@ describe('plugin-meetings', () => {
|
|
|
126
131
|
type: 'outbound-rtp',
|
|
127
132
|
framesSent: 0,
|
|
128
133
|
bytesSent: 1,
|
|
129
|
-
}
|
|
130
|
-
}
|
|
134
|
+
},
|
|
135
|
+
},
|
|
131
136
|
};
|
|
132
137
|
|
|
133
138
|
pc = {
|
|
134
|
-
getConnectionState: sinon.stub().returns(
|
|
139
|
+
getConnectionState: sinon.stub().returns(ConnectionState.Connected),
|
|
135
140
|
getTransceiverStats: sinon.stub().resolves({
|
|
136
141
|
audio: {
|
|
137
142
|
sender: [fakeStats.audio.sender],
|
|
@@ -148,9 +153,9 @@ describe('plugin-meetings', () => {
|
|
|
148
153
|
screenShareVideo: {
|
|
149
154
|
sender: [],
|
|
150
155
|
receiver: [],
|
|
151
|
-
currentDirection: 'sendrecv'
|
|
152
|
-
}
|
|
153
|
-
})
|
|
156
|
+
currentDirection: 'sendrecv',
|
|
157
|
+
},
|
|
158
|
+
}),
|
|
154
159
|
};
|
|
155
160
|
|
|
156
161
|
networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
|
package/test/utils/cmr.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
import uuid from 'uuid';
|
|
3
2
|
import retry from '@webex/test-helper-retry';
|
|
4
3
|
|
|
@@ -23,16 +22,16 @@ CMR.reserve = (webex, claimed) => {
|
|
|
23
22
|
authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
|
|
24
23
|
'cisco-no-http-redirect': null,
|
|
25
24
|
'spark-user-agent': null,
|
|
26
|
-
trackingid: `ITCLIENT_${uuid.v4()}_0_imi:true
|
|
25
|
+
trackingid: `ITCLIENT_${uuid.v4()}_0_imi:true`,
|
|
27
26
|
},
|
|
28
27
|
body: {
|
|
29
28
|
resourceType,
|
|
30
29
|
requestMetaData: {
|
|
31
30
|
emailAddress: `test${uuid.v4()}@wx2.example.com`,
|
|
32
|
-
loginType: 'loginGuest'
|
|
31
|
+
loginType: 'loginGuest',
|
|
33
32
|
},
|
|
34
|
-
reservedBy: 'Webex JavaScript SDK Test Suite'
|
|
35
|
-
}
|
|
33
|
+
reservedBy: 'Webex JavaScript SDK Test Suite',
|
|
34
|
+
},
|
|
36
35
|
};
|
|
37
36
|
|
|
38
37
|
if (claimed) {
|
|
@@ -40,7 +39,8 @@ CMR.reserve = (webex, claimed) => {
|
|
|
40
39
|
}
|
|
41
40
|
console.log('USER ID ', webex.internal.device.userId);
|
|
42
41
|
|
|
43
|
-
return webex
|
|
42
|
+
return webex
|
|
43
|
+
.request(requestBody)
|
|
44
44
|
.then((response) => {
|
|
45
45
|
const cmr = response.body;
|
|
46
46
|
|
|
@@ -56,47 +56,49 @@ CMR.reserve = (webex, claimed) => {
|
|
|
56
56
|
CMR.release = (webex, reservationUrl) => {
|
|
57
57
|
console.log('releasing cmr');
|
|
58
58
|
|
|
59
|
-
return webex
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
return webex
|
|
60
|
+
.request({
|
|
61
|
+
method: 'DELETE',
|
|
62
|
+
uri: reservationUrl,
|
|
63
|
+
headers: {
|
|
64
|
+
authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
|
|
65
|
+
'cisco-no-http-redirect': null,
|
|
66
|
+
'spark-user-agent': null,
|
|
67
|
+
},
|
|
68
|
+
})
|
|
68
69
|
.then(() => console.log('released cmr'));
|
|
69
70
|
};
|
|
70
71
|
|
|
71
|
-
CMR.waitForHostToJoin = (webex, resourceUrl) =>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
CMR.waitForHostToJoin = (webex, resourceUrl) =>
|
|
73
|
+
retry(() => {
|
|
74
|
+
console.log('checking if the host has joined');
|
|
75
|
+
|
|
76
|
+
return webex
|
|
77
|
+
.request({
|
|
78
|
+
method: 'GET',
|
|
79
|
+
uri: resourceUrl,
|
|
80
|
+
headers: {
|
|
81
|
+
authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
|
|
82
|
+
'cisco-no-http-redirect': null,
|
|
83
|
+
'spark-user-agent': null,
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
.then((res) => {
|
|
87
|
+
if (res.body && res.body.meeting.hostPresent) {
|
|
88
|
+
console.log('the host has joined');
|
|
89
|
+
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
console.log('the host has not joined');
|
|
94
|
+
throw new Error('Meeting host has not yet joined');
|
|
95
|
+
});
|
|
82
96
|
})
|
|
83
|
-
.then((
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
.then(() => true)
|
|
98
|
+
.catch((reason) => {
|
|
99
|
+
console.warn(reason);
|
|
86
100
|
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
console.log('the host has not joined');
|
|
91
|
-
throw new Error('Meeting host has not yet joined');
|
|
101
|
+
return false;
|
|
92
102
|
});
|
|
93
|
-
})
|
|
94
|
-
.then(() => true)
|
|
95
|
-
.catch((reason) => {
|
|
96
|
-
console.warn(reason);
|
|
97
|
-
|
|
98
|
-
return false;
|
|
99
|
-
});
|
|
100
|
-
|
|
101
103
|
|
|
102
104
|
export default CMR;
|