@webex/plugin-meetings 2.36.1 → 2.37.1
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/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 +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- 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 +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- 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 +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +7 -46
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- 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 +35 -61
- 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 +1 -5
- package/dist/config.js.map +1 -1
- package/dist/constants.js +46 -42
- 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 +10 -28
- 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 +101 -193
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -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 +87 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +16 -81
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +74 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +3 -17
- 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 +120 -192
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -13
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +812 -1487
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +31 -78
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +157 -227
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +25 -169
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +179 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- 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 +3 -21
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +451 -570
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +7 -30
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +94 -148
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -89
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +17 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +2 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +68 -184
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +21 -56
- 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 +48 -136
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +60 -190
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/peer-connection-manager/util.js +10 -24
- package/dist/peer-connection-manager/util.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- 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 +100 -166
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +0 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +0 -5
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -468
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -12
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +15 -85
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +42 -94
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +81 -148
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +2 -39
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +8 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +0 -26
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +68 -168
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +54 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +17 -17
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +11 -11
- package/src/constants.ts +138 -119
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +34 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +25 -34
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +45 -68
- package/src/locus-info/selfUtils.ts +106 -57
- package/src/media/index.ts +118 -109
- package/src/media/properties.ts +26 -20
- package/src/media/util.ts +2 -2
- package/src/mediaQualityMetrics/config.ts +46 -46
- package/src/meeting/effectsState.ts +35 -35
- package/src/meeting/in-meeting-actions.ts +7 -3
- package/src/meeting/index.ts +1435 -1210
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +160 -113
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +131 -90
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +106 -108
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +59 -53
- package/src/meetings/collection.ts +1 -1
- package/src/meetings/index.ts +513 -441
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +26 -23
- package/src/member/index.ts +55 -49
- package/src/member/util.ts +26 -13
- package/src/members/collection.ts +0 -1
- package/src/members/index.ts +172 -121
- package/src/members/request.ts +46 -14
- package/src/members/util.ts +44 -42
- package/src/metrics/config.ts +254 -81
- package/src/metrics/constants.ts +0 -2
- package/src/metrics/index.ts +84 -71
- package/src/networkQualityMonitor/index.ts +20 -23
- package/src/peer-connection-manager/index.ts +321 -241
- package/src/peer-connection-manager/util.ts +4 -2
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +61 -59
- package/src/reachability/request.ts +36 -32
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +2 -3
- package/src/reconnection-manager/index.ts +159 -98
- package/src/roap/collection.ts +2 -4
- package/src/roap/handler.ts +63 -32
- package/src/roap/index.ts +78 -58
- package/src/roap/request.ts +69 -54
- package/src/roap/state.ts +17 -11
- package/src/roap/turnDiscovery.ts +60 -31
- package/src/roap/util.ts +39 -31
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +397 -169
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +666 -462
- package/test/integration/spec/space-meeting.js +318 -203
- package/test/integration/spec/transcription.js +6 -7
- 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 +5 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1 -2
- package/test/unit/spec/locus-info/infoUtils.js +24 -31
- 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 +72 -103
- package/test/unit/spec/locus-info/selfUtils.js +21 -12
- package/test/unit/spec/meeting/effectsState.js +33 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1141 -649
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +56 -45
- package/test/unit/spec/meeting/utils.js +66 -49
- 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 +438 -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 +5 -6
- package/test/unit/spec/members/index.js +84 -35
- 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/networkQualityMonitor/index.js +21 -15
- package/test/unit/spec/peerconnection-manager/index.js +88 -58
- package/test/unit/spec/peerconnection-manager/utils.js +5 -4
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +9 -11
- package/test/unit/spec/reconnection-manager/index.js +14 -17
- package/test/unit/spec/roap/index.ts +18 -8
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/roap/util.js +3 -3
- package/test/unit/spec/stats-analyzer/index.js +29 -24
- 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 +53 -50
|
@@ -12,13 +12,14 @@ describe('Peerconnection Manager', () => {
|
|
|
12
12
|
let sdp = null;
|
|
13
13
|
|
|
14
14
|
beforeEach(() => {
|
|
15
|
-
sdp =
|
|
15
|
+
sdp =
|
|
16
|
+
'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 47974 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 41234 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 41619 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 47098 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 37670 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 37790 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
|
|
16
17
|
|
|
17
18
|
peerConnection = {
|
|
18
19
|
iceGatheringState: 'new',
|
|
19
20
|
onicecandidate: null,
|
|
20
21
|
onicecandidateerror: null,
|
|
21
|
-
localDescription: {sdp}
|
|
22
|
+
localDescription: {sdp},
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
Object.defineProperty(global.window, 'RTCSessionDescription', {
|
|
@@ -28,7 +29,7 @@ describe('Peerconnection Manager', () => {
|
|
|
28
29
|
this.type = options.type;
|
|
29
30
|
this.sdp = options.sdp;
|
|
30
31
|
}
|
|
31
|
-
}
|
|
32
|
+
},
|
|
32
33
|
});
|
|
33
34
|
});
|
|
34
35
|
describe('setRemoteSessionDetails', () => {
|
|
@@ -40,25 +41,32 @@ describe('Peerconnection Manager', () => {
|
|
|
40
41
|
|
|
41
42
|
return Promise.resolve();
|
|
42
43
|
});
|
|
43
|
-
const remoteSdp =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
const remoteSdp =
|
|
45
|
+
'v=0\r\n' +
|
|
46
|
+
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
47
|
+
'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
|
|
48
|
+
'a=rtpmap:127 H264/90000\r\n' +
|
|
49
|
+
'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
|
|
50
|
+
'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
|
|
51
|
+
|
|
52
|
+
const resultSdp =
|
|
53
|
+
'v=0\r\n' +
|
|
54
|
+
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
55
|
+
'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n' +
|
|
56
|
+
'a=rtpmap:127 H264/90000\r\r\n' +
|
|
57
|
+
'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n';
|
|
55
58
|
const peerConnection = {
|
|
56
59
|
signalingState: 'have-local-offer',
|
|
57
60
|
setRemoteDescription,
|
|
58
|
-
enableExtmap: false
|
|
61
|
+
enableExtmap: false,
|
|
59
62
|
};
|
|
60
63
|
|
|
61
|
-
await PeerConnectionManager.setRemoteSessionDetails(
|
|
64
|
+
await PeerConnectionManager.setRemoteSessionDetails(
|
|
65
|
+
peerConnection,
|
|
66
|
+
'answer',
|
|
67
|
+
remoteSdp,
|
|
68
|
+
{}
|
|
69
|
+
);
|
|
62
70
|
|
|
63
71
|
assert.equal(result.sdp, resultSdp);
|
|
64
72
|
});
|
|
@@ -71,18 +79,24 @@ describe('Peerconnection Manager', () => {
|
|
|
71
79
|
|
|
72
80
|
return Promise.resolve();
|
|
73
81
|
});
|
|
74
|
-
const remoteSdp =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
82
|
+
const remoteSdp =
|
|
83
|
+
'v=0\r\n' +
|
|
84
|
+
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
85
|
+
'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
|
|
86
|
+
'a=rtpmap:127 H264/90000\r\n' +
|
|
87
|
+
'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
|
|
79
88
|
|
|
80
89
|
const peerConnection = {
|
|
81
90
|
signalingState: 'have-local-offer',
|
|
82
|
-
setRemoteDescription
|
|
91
|
+
setRemoteDescription,
|
|
83
92
|
};
|
|
84
93
|
|
|
85
|
-
await PeerConnectionManager.setRemoteSessionDetails(
|
|
94
|
+
await PeerConnectionManager.setRemoteSessionDetails(
|
|
95
|
+
peerConnection,
|
|
96
|
+
'answer',
|
|
97
|
+
remoteSdp,
|
|
98
|
+
{}
|
|
99
|
+
);
|
|
86
100
|
|
|
87
101
|
assert.equal(result.sdp, remoteSdp);
|
|
88
102
|
});
|
|
@@ -90,40 +104,50 @@ describe('Peerconnection Manager', () => {
|
|
|
90
104
|
it('removes xTLS candidates from the remote sdp', async () => {
|
|
91
105
|
StaticConfig.set({bandwidth: {}});
|
|
92
106
|
|
|
93
|
-
const remoteSdpWithXtlsCandidates =
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
const remoteSdpWithXtlsCandidates =
|
|
108
|
+
'v=0\r\n' +
|
|
109
|
+
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
110
|
+
'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
|
|
111
|
+
'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
|
|
112
|
+
'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
|
|
113
|
+
'a=candidate:4 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
|
|
114
|
+
'a=rtpmap:127 H264/90000\r\n' +
|
|
115
|
+
'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
|
|
116
|
+
'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
117
|
+
'a=candidate:1 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
|
|
118
|
+
'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
|
|
119
|
+
'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
|
|
105
120
|
|
|
106
121
|
// same as remoteSdpWithXtlsCandidates but without the xtls candidates
|
|
107
|
-
const resultSdp =
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
const resultSdp =
|
|
123
|
+
'v=0\r\n' +
|
|
124
|
+
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
125
|
+
'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
|
|
126
|
+
'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
|
|
127
|
+
'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
|
|
128
|
+
'a=rtpmap:127 H264/90000\r\n' +
|
|
129
|
+
'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
|
|
130
|
+
'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
131
|
+
'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
|
|
132
|
+
'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
|
|
117
133
|
|
|
118
134
|
const peerConnection = {
|
|
119
135
|
signalingState: 'have-local-offer',
|
|
120
136
|
setRemoteDescription: sinon.stub().resolves(),
|
|
121
|
-
enableExtmap: true
|
|
137
|
+
enableExtmap: true,
|
|
122
138
|
};
|
|
123
139
|
|
|
124
|
-
await PeerConnectionManager.setRemoteSessionDetails(
|
|
125
|
-
|
|
126
|
-
|
|
140
|
+
await PeerConnectionManager.setRemoteSessionDetails(
|
|
141
|
+
peerConnection,
|
|
142
|
+
'answer',
|
|
143
|
+
remoteSdpWithXtlsCandidates,
|
|
144
|
+
''
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
assert.calledWith(
|
|
148
|
+
peerConnection.setRemoteDescription,
|
|
149
|
+
new global.window.RTCSessionDescription({sdp: resultSdp, type: 'answer'})
|
|
150
|
+
);
|
|
127
151
|
});
|
|
128
152
|
});
|
|
129
153
|
|
|
@@ -157,10 +181,11 @@ describe('Peerconnection Manager', () => {
|
|
|
157
181
|
peerConnection.iceGatheringState = 'complete';
|
|
158
182
|
peerConnection.onIceGatheringStateChange();
|
|
159
183
|
}, 1000);
|
|
160
|
-
await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'})
|
|
161
|
-
|
|
184
|
+
await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}).then(
|
|
185
|
+
() => {
|
|
162
186
|
assert(peerConnection.sdp.search('max-fs:8192'), true);
|
|
163
|
-
}
|
|
187
|
+
}
|
|
188
|
+
);
|
|
164
189
|
});
|
|
165
190
|
|
|
166
191
|
it('should still generate sdp even if onicecandidateerror is called ', async () => {
|
|
@@ -169,19 +194,24 @@ describe('Peerconnection Manager', () => {
|
|
|
169
194
|
peerConnection.onicecandidateerror();
|
|
170
195
|
peerConnection.onicecandidate({candidate: null});
|
|
171
196
|
}, 1000);
|
|
172
|
-
await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'})
|
|
173
|
-
|
|
197
|
+
await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}).then(
|
|
198
|
+
() => {
|
|
174
199
|
assert(peerConnection.sdp.search('max-fs:8192'), true);
|
|
175
|
-
}
|
|
200
|
+
}
|
|
201
|
+
);
|
|
176
202
|
});
|
|
177
203
|
|
|
178
204
|
it('should throw generated SDP does not have candidates ', async () => {
|
|
179
205
|
peerConnection.iceGatheringState = 'none';
|
|
180
|
-
peerConnection.localDescription.sdp =
|
|
206
|
+
peerConnection.localDescription.sdp =
|
|
207
|
+
'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
|
|
181
208
|
setTimeout(() => {
|
|
182
209
|
peerConnection.onicecandidate({candidate: null});
|
|
183
210
|
}, 1000);
|
|
184
|
-
await assert.isRejected(
|
|
211
|
+
await assert.isRejected(
|
|
212
|
+
PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}),
|
|
213
|
+
InvalidSdpError
|
|
214
|
+
);
|
|
185
215
|
});
|
|
186
216
|
});
|
|
187
217
|
});
|
|
@@ -4,23 +4,24 @@ import PeerConnectionUtils from '@webex/plugin-meetings/src/peer-connection-mana
|
|
|
4
4
|
import {
|
|
5
5
|
SDP_MULTIPLE_VIDEO_CODECS,
|
|
6
6
|
SDP_MULTIPLE_VIDEO_CODECS_WITH_LOWERED_H264_PROFILE_LEVEL,
|
|
7
|
-
SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS
|
|
7
|
+
SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS,
|
|
8
8
|
} from './utils.test-fixtures';
|
|
9
9
|
|
|
10
10
|
describe('Peerconnection Manager', () => {
|
|
11
11
|
describe('Utils', () => {
|
|
12
12
|
describe('convertCLineToIpv4', () => {
|
|
13
13
|
it('changes ipv6 to ipv4 default', () => {
|
|
14
|
-
const localSdp =
|
|
14
|
+
const localSdp =
|
|
15
|
+
'v=0\r\n' +
|
|
15
16
|
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
16
17
|
'c=IN IP6 2607:fb90:d27c:b314:211a:32dd:c47f:ffe\r\n' +
|
|
17
18
|
'a=rtpmap:127 H264/90000\r\n';
|
|
18
|
-
const resultSdp =
|
|
19
|
+
const resultSdp =
|
|
20
|
+
'v=0\r\n' +
|
|
19
21
|
'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
|
|
20
22
|
'c=IN IP4 0.0.0.0\r\n' +
|
|
21
23
|
'a=rtpmap:127 H264/90000\r\n';
|
|
22
24
|
|
|
23
|
-
|
|
24
25
|
const temp = PeerConnectionUtils.convertCLineToIpv4(localSdp);
|
|
25
26
|
|
|
26
27
|
assert.equal(temp, resultSdp);
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
// here we're using tagged template literals to ensures that our SDP fixtures also have CRLF endings
|
|
3
3
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
4
|
const ensureCRLF = (strings: any, ...tags: string[]) => {
|
|
5
|
-
|
|
5
|
+
const stringsWithCRLF = strings.raw.map((str: string) => str.replace(/\n/g, '\r\n'));
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// now construct the output the same way as it's done by default for template literals
|
|
8
|
+
let output = stringsWithCRLF[0];
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
tags.forEach((tag, index) => {
|
|
11
|
+
output += tag + stringsWithCRLF[index + 1];
|
|
12
|
+
});
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
return output;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
// example SDP that has an audio and 2 video m-lines, video contains multiple codecs
|
|
@@ -263,7 +263,6 @@ a=rtcp-rsize
|
|
|
263
263
|
a=rtcp:9 IN IP4 0.0.0.0
|
|
264
264
|
`;
|
|
265
265
|
|
|
266
|
-
|
|
267
266
|
// same as SDP_MULTIPLE_VIDEO_CODECS, but has max-fs appended to all H264 fmtp lines
|
|
268
267
|
export const SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS = ensureCRLF`v=0
|
|
269
268
|
o=- 3328550572590672467 2 IN IP4 127.0.0.1
|
|
@@ -5,9 +5,7 @@
|
|
|
5
5
|
import 'jsdom-global/register';
|
|
6
6
|
import {assert} from '@webex/test-helper-chai';
|
|
7
7
|
import sinon from 'sinon';
|
|
8
|
-
import {
|
|
9
|
-
_PERSONAL_ROOM_
|
|
10
|
-
} from '@webex/plugin-meetings/src/constants';
|
|
8
|
+
import {_PERSONAL_ROOM_} from '@webex/plugin-meetings/src/constants';
|
|
11
9
|
import PersonalMeetingRoom from '@webex/plugin-meetings/src/personal-meeting-room';
|
|
12
10
|
|
|
13
11
|
describe('personal-meeting-room', () => {
|
|
@@ -16,14 +14,11 @@ describe('personal-meeting-room', () => {
|
|
|
16
14
|
|
|
17
15
|
beforeEach(() => {
|
|
18
16
|
meetingInfo = {
|
|
19
|
-
fetchMeetingInfo: sinon.stub().returns(Promise.resolve(
|
|
20
|
-
{body: {isPmr: true}}
|
|
21
|
-
))
|
|
17
|
+
fetchMeetingInfo: sinon.stub().returns(Promise.resolve({body: {isPmr: true}})),
|
|
22
18
|
};
|
|
23
19
|
pmr = new PersonalMeetingRoom({meetingInfo}, {parent: {}});
|
|
24
20
|
});
|
|
25
21
|
|
|
26
|
-
|
|
27
22
|
describe('#get()', () => {
|
|
28
23
|
it('returns personal meeting room info', async () => {
|
|
29
24
|
await pmr.get();
|
|
@@ -10,43 +10,41 @@ describe('isAnyClusterReachable', () => {
|
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
afterEach(() => {
|
|
13
|
-
window.localStorage.clear()
|
|
13
|
+
window.localStorage.clear();
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
const checkIsClusterReachable = (mockStorage: any, expectedValue: boolean) => {
|
|
17
|
-
|
|
18
17
|
if (mockStorage) {
|
|
19
|
-
window.localStorage.setItem('reachability.result', JSON.stringify(mockStorage))
|
|
18
|
+
window.localStorage.setItem('reachability.result', JSON.stringify(mockStorage));
|
|
20
19
|
}
|
|
21
20
|
const reachability = new Reachability({});
|
|
22
21
|
|
|
23
22
|
const result = reachability.isAnyClusterReachable();
|
|
24
23
|
|
|
25
24
|
assert.equal(result, expectedValue);
|
|
26
|
-
|
|
27
|
-
}
|
|
25
|
+
};
|
|
28
26
|
|
|
29
27
|
it('returns true when udp is reachable', () => {
|
|
30
|
-
checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'false'}}}, true)
|
|
28
|
+
checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'false'}}}, true);
|
|
31
29
|
});
|
|
32
30
|
|
|
33
31
|
it('returns true when tcp is reachable', () => {
|
|
34
|
-
checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'true'}}}, true)
|
|
32
|
+
checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'true'}}}, true);
|
|
35
33
|
});
|
|
36
34
|
|
|
37
35
|
it('returns true when both tcp and udp are reachable', () => {
|
|
38
|
-
checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'true'}}}, true)
|
|
36
|
+
checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'true'}}}, true);
|
|
39
37
|
});
|
|
40
38
|
|
|
41
39
|
it('returns false when both tcp and udp are unreachable', () => {
|
|
42
|
-
checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'false'}}}, false)
|
|
40
|
+
checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'false'}}}, false);
|
|
43
41
|
});
|
|
44
42
|
|
|
45
43
|
it('returns false when reachability result is empty', () => {
|
|
46
|
-
checkIsClusterReachable({x: {}}, false)
|
|
44
|
+
checkIsClusterReachable({x: {}}, false);
|
|
47
45
|
});
|
|
48
46
|
|
|
49
47
|
it('returns false when reachability.result item is not there', () => {
|
|
50
|
-
checkIsClusterReachable(undefined, false)
|
|
48
|
+
checkIsClusterReachable(undefined, false);
|
|
51
49
|
});
|
|
52
50
|
});
|
|
@@ -11,7 +11,6 @@ const {assert} = chai;
|
|
|
11
11
|
chai.use(chaiAsPromised);
|
|
12
12
|
sinon.assert.expose(chai.assert, {prefix: ''});
|
|
13
13
|
|
|
14
|
-
|
|
15
14
|
describe('plugin-meetings', () => {
|
|
16
15
|
describe('ReconnectionManager.reconnectMedia', () => {
|
|
17
16
|
it('uses correct TURN TLS information on reInitiatePeerconnection', async () => {
|
|
@@ -26,10 +25,10 @@ describe('plugin-meetings', () => {
|
|
|
26
25
|
times: 2,
|
|
27
26
|
backOff: {
|
|
28
27
|
start: 1000,
|
|
29
|
-
rate: 2
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
28
|
+
rate: 2,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
33
32
|
},
|
|
34
33
|
mediaProperties: {
|
|
35
34
|
unsetPeerConnection: sinon.stub(),
|
|
@@ -43,7 +42,7 @@ describe('plugin-meetings', () => {
|
|
|
43
42
|
username: 'fake_turn_username',
|
|
44
43
|
password: 'fake_turn_password',
|
|
45
44
|
},
|
|
46
|
-
turnDiscoverySkippedReason: undefined
|
|
45
|
+
turnDiscoverySkippedReason: undefined,
|
|
47
46
|
}),
|
|
48
47
|
sendRoapMediaRequest: sinon.stub().resolves({}),
|
|
49
48
|
},
|
|
@@ -53,9 +52,9 @@ describe('plugin-meetings', () => {
|
|
|
53
52
|
webex: {
|
|
54
53
|
meetings: {
|
|
55
54
|
getMeetingByType: sinon.stub().returns(true),
|
|
56
|
-
syncMeetings: sinon.stub().resolves({})
|
|
57
|
-
}
|
|
58
|
-
}
|
|
55
|
+
syncMeetings: sinon.stub().resolves({}),
|
|
56
|
+
},
|
|
57
|
+
},
|
|
59
58
|
};
|
|
60
59
|
|
|
61
60
|
Media.attachMedia = sinon.stub().resolves({});
|
|
@@ -63,7 +62,6 @@ describe('plugin-meetings', () => {
|
|
|
63
62
|
|
|
64
63
|
rm.iceState.disconnected = true;
|
|
65
64
|
|
|
66
|
-
|
|
67
65
|
await rm.reconnectMedia();
|
|
68
66
|
|
|
69
67
|
assert.calledOnce(fakeMeeting.roap.doTurnDiscovery);
|
|
@@ -94,11 +92,11 @@ describe('plugin-meetings', () => {
|
|
|
94
92
|
times: 2,
|
|
95
93
|
backOff: {
|
|
96
94
|
start: 1000,
|
|
97
|
-
rate: 2
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
95
|
+
rate: 2,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
102
100
|
});
|
|
103
101
|
});
|
|
104
102
|
|
|
@@ -117,8 +115,7 @@ describe('plugin-meetings', () => {
|
|
|
117
115
|
});
|
|
118
116
|
|
|
119
117
|
it('should resolve the deferred promise', () => {
|
|
120
|
-
reconnectionManager.iceState.resolve =
|
|
121
|
-
sinon.spy();
|
|
118
|
+
reconnectionManager.iceState.resolve = sinon.spy();
|
|
122
119
|
const {resolve} = reconnectionManager.iceState;
|
|
123
120
|
|
|
124
121
|
reconnectionManager.iceReconnected();
|
|
@@ -13,7 +13,9 @@ describe('Roap', () => {
|
|
|
13
13
|
const RESULT = {something: 'some value'};
|
|
14
14
|
const meeting = {id: 'some meeting id'};
|
|
15
15
|
|
|
16
|
-
const doTurnDiscoveryStub = sinon
|
|
16
|
+
const doTurnDiscoveryStub = sinon
|
|
17
|
+
.stub(TurnDiscovery.prototype, 'doTurnDiscovery')
|
|
18
|
+
.resolves(RESULT);
|
|
17
19
|
|
|
18
20
|
const roap = new Roap({}, {parent: 'fake'});
|
|
19
21
|
|
|
@@ -66,13 +68,20 @@ describe('Roap', () => {
|
|
|
66
68
|
{reconnect: false, enableTurnDiscovery: true, expectEmptyMediaId: false},
|
|
67
69
|
{reconnect: false, enableTurnDiscovery: false, expectEmptyMediaId: false},
|
|
68
70
|
].forEach(({reconnect, enableTurnDiscovery, expectEmptyMediaId}) =>
|
|
69
|
-
it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
|
|
71
|
+
it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
|
|
72
|
+
reconnect ? '' : 'not '
|
|
73
|
+
}reconnecting and TURN discovery is ${
|
|
74
|
+
enableTurnDiscovery ? 'enabled' : 'disabled'
|
|
75
|
+
}`, async () => {
|
|
70
76
|
meeting.config.experimental.enableTurnDiscovery = enableTurnDiscovery;
|
|
71
77
|
|
|
72
78
|
const roap = new Roap({}, {parent: 'fake'});
|
|
73
79
|
|
|
74
80
|
await roap.sendRoapMediaRequest({
|
|
75
|
-
meeting,
|
|
81
|
+
meeting,
|
|
82
|
+
sdp: 'sdp',
|
|
83
|
+
reconnect,
|
|
84
|
+
roapSeq: 1,
|
|
76
85
|
});
|
|
77
86
|
|
|
78
87
|
const expectedRoapMessage = {
|
|
@@ -80,7 +89,7 @@ describe('Roap', () => {
|
|
|
80
89
|
sdps: ['sdp'],
|
|
81
90
|
version: '2',
|
|
82
91
|
seq: 2,
|
|
83
|
-
tieBreaker: 4294967294
|
|
92
|
+
tieBreaker: 4294967294,
|
|
84
93
|
};
|
|
85
94
|
|
|
86
95
|
assert.calledOnce(sendRoapStub);
|
|
@@ -91,23 +100,24 @@ describe('Roap', () => {
|
|
|
91
100
|
mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
|
|
92
101
|
audioMuted: meeting.isAudioMuted(),
|
|
93
102
|
videoMuted: meeting.isVideoMuted(),
|
|
94
|
-
meetingId: meeting.id
|
|
103
|
+
meetingId: meeting.id,
|
|
95
104
|
});
|
|
96
105
|
|
|
97
106
|
assert.calledTwice(roapHandlerSubmitStub);
|
|
98
107
|
assert.calledWith(roapHandlerSubmitStub, {
|
|
99
108
|
type: ROAP.SEND_ROAP_MSG,
|
|
100
109
|
msg: expectedRoapMessage,
|
|
101
|
-
correlationId: meeting.correlationId
|
|
110
|
+
correlationId: meeting.correlationId,
|
|
102
111
|
});
|
|
103
112
|
assert.calledWith(roapHandlerSubmitStub, {
|
|
104
113
|
type: ROAP.SEND_ROAP_MSG_SUCCESS,
|
|
105
114
|
seq: 2,
|
|
106
|
-
correlationId: meeting.correlationId
|
|
115
|
+
correlationId: meeting.correlationId,
|
|
107
116
|
});
|
|
108
117
|
|
|
109
118
|
assert.calledOnce(meeting.setRoapSeq);
|
|
110
119
|
assert.calledWith(meeting.setRoapSeq, 2);
|
|
111
|
-
})
|
|
120
|
+
})
|
|
121
|
+
);
|
|
112
122
|
});
|
|
113
123
|
});
|