@webex/plugin-meetings 3.0.0-beta.372 → 3.0.0-beta.374

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.
@@ -955,6 +955,401 @@ describe('plugin-meetings', () => {
955
955
 
956
956
  assert.neverCalledWith(loggerSpy, 'StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot "". Total packets received on slot: ', 0);
957
957
  });
958
+
959
+ it('has the correct number of senders and receivers (2)', async () => {
960
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
961
+
962
+ await progressTime();
963
+
964
+ assert.lengthOf(mqeData.audioTransmit, 2);
965
+ assert.lengthOf(mqeData.audioReceive, 2);
966
+ assert.lengthOf(mqeData.videoTransmit, 2);
967
+ assert.lengthOf(mqeData.videoReceive, 2);
968
+ });
969
+
970
+ it('has one stream per sender/reciever', async () => {
971
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
972
+
973
+ await progressTime();
974
+
975
+ assert.deepEqual(
976
+ mqeData.audioTransmit[0].streams,
977
+ [
978
+ {
979
+ common: {
980
+ codec: 'opus',
981
+ csi: [],
982
+ requestedBitrate: 0,
983
+ requestedFrames: 0,
984
+ rtpPackets: 0,
985
+ ssci: 0,
986
+ transmittedBitrate: 0.13333333333333333,
987
+ transmittedFrameRate: 0
988
+ },
989
+ transmittedKeyFrames: 0,
990
+ requestedKeyFrames: 0
991
+ }
992
+ ]
993
+ );
994
+ assert.deepEqual(
995
+ mqeData.audioTransmit[1].streams,
996
+ [
997
+ {
998
+ common: {
999
+ codec: 'opus',
1000
+ csi: [],
1001
+ requestedBitrate: 0,
1002
+ requestedFrames: 0,
1003
+ rtpPackets: 0,
1004
+ ssci: 0,
1005
+ transmittedBitrate: 0.13333333333333333,
1006
+ transmittedFrameRate: 0
1007
+ },
1008
+ transmittedKeyFrames: 0,
1009
+ requestedKeyFrames: 0
1010
+ }
1011
+ ]
1012
+ );
1013
+ assert.deepEqual(
1014
+ mqeData.audioReceive[0].streams,
1015
+ [
1016
+ {
1017
+ common: {
1018
+ codec: 'opus',
1019
+ concealedFrames: 0,
1020
+ csi: [],
1021
+ maxConcealRunLength: 0,
1022
+ optimalBitrate: 0,
1023
+ optimalFrameRate: 0,
1024
+ receivedBitrate: 0.13333333333333333,
1025
+ receivedFrameRate: 0,
1026
+ renderedFrameRate: 0,
1027
+ requestedBitrate: 0,
1028
+ requestedFrameRate: 0,
1029
+ rtpEndToEndLost: 0,
1030
+ maxRtpJitter: 0,
1031
+ meanRtpJitter: 0,
1032
+ rtpPackets: 0,
1033
+ ssci: 0,
1034
+ rtpJitter: 0,
1035
+ framesDropped: 0,
1036
+ framesReceived: 0
1037
+ }
1038
+ }
1039
+ ]
1040
+ );
1041
+ assert.deepEqual(
1042
+ mqeData.audioReceive[1].streams,
1043
+ [
1044
+ {
1045
+ common: {
1046
+ codec: 'opus',
1047
+ concealedFrames: 0,
1048
+ csi: [],
1049
+ maxConcealRunLength: 0,
1050
+ optimalBitrate: 0,
1051
+ optimalFrameRate: 0,
1052
+ receivedBitrate: 0.13333333333333333,
1053
+ receivedFrameRate: 0,
1054
+ renderedFrameRate: 0,
1055
+ requestedBitrate: 0,
1056
+ requestedFrameRate: 0,
1057
+ rtpEndToEndLost: 0,
1058
+ maxRtpJitter: 0,
1059
+ meanRtpJitter: 0,
1060
+ rtpPackets: 0,
1061
+ ssci: 0,
1062
+ rtpJitter: 0,
1063
+ framesDropped: 0,
1064
+ framesReceived: 0
1065
+ }
1066
+ }
1067
+ ]
1068
+ );
1069
+ assert.deepEqual(
1070
+ mqeData.videoTransmit[0].streams,
1071
+ [
1072
+ {
1073
+ common: {
1074
+ codec: 'H264',
1075
+ csi: [],
1076
+ duplicateSsci: 0,
1077
+ requestedBitrate: 0,
1078
+ requestedFrames: 0,
1079
+ rtpPackets: 0,
1080
+ ssci: 0,
1081
+ transmittedBitrate: 0.13333333333333333,
1082
+ transmittedFrameRate: 0
1083
+ },
1084
+ h264CodecProfile: 'BP',
1085
+ isAvatar: false,
1086
+ isHardwareEncoded: false,
1087
+ localConfigurationChanges: 2,
1088
+ maxFrameQp: 0,
1089
+ maxNoiseLevel: 0,
1090
+ minRegionQp: 0,
1091
+ remoteConfigurationChanges: 0,
1092
+ requestedFrameSize: 0,
1093
+ requestedKeyFrames: 0,
1094
+ transmittedFrameSize: 0,
1095
+ transmittedHeight: 0,
1096
+ transmittedKeyFrames: 0,
1097
+ transmittedKeyFramesClient: 0,
1098
+ transmittedKeyFramesConfigurationChange: 0,
1099
+ transmittedKeyFramesFeedback: 0,
1100
+ transmittedKeyFramesLocalDrop: 0,
1101
+ transmittedKeyFramesOtherLayer: 0,
1102
+ transmittedKeyFramesPeriodic: 0,
1103
+ transmittedKeyFramesSceneChange: 0,
1104
+ transmittedKeyFramesStartup: 0,
1105
+ transmittedKeyFramesUnknown: 0,
1106
+ transmittedWidth: 0
1107
+ }
1108
+ ]
1109
+ );
1110
+ assert.deepEqual(
1111
+ mqeData.videoTransmit[1].streams,
1112
+ [
1113
+ {
1114
+ common: {
1115
+ codec: 'H264',
1116
+ csi: [],
1117
+ duplicateSsci: 0,
1118
+ requestedBitrate: 0,
1119
+ requestedFrames: 0,
1120
+ rtpPackets: 0,
1121
+ ssci: 0,
1122
+ transmittedBitrate: 0.13333333333333333,
1123
+ transmittedFrameRate: 0
1124
+ },
1125
+ h264CodecProfile: 'BP',
1126
+ isAvatar: false,
1127
+ isHardwareEncoded: false,
1128
+ localConfigurationChanges: 2,
1129
+ maxFrameQp: 0,
1130
+ maxNoiseLevel: 0,
1131
+ minRegionQp: 0,
1132
+ remoteConfigurationChanges: 0,
1133
+ requestedFrameSize: 0,
1134
+ requestedKeyFrames: 0,
1135
+ transmittedFrameSize: 0,
1136
+ transmittedHeight: 0,
1137
+ transmittedKeyFrames: 0,
1138
+ transmittedKeyFramesClient: 0,
1139
+ transmittedKeyFramesConfigurationChange: 0,
1140
+ transmittedKeyFramesFeedback: 0,
1141
+ transmittedKeyFramesLocalDrop: 0,
1142
+ transmittedKeyFramesOtherLayer: 0,
1143
+ transmittedKeyFramesPeriodic: 0,
1144
+ transmittedKeyFramesSceneChange: 0,
1145
+ transmittedKeyFramesStartup: 0,
1146
+ transmittedKeyFramesUnknown: 0,
1147
+ transmittedWidth: 0
1148
+ }
1149
+ ]
1150
+ );
1151
+ assert.deepEqual(
1152
+ mqeData.videoReceive[0].streams,
1153
+ [
1154
+ {
1155
+ common: {
1156
+ codec: 'H264',
1157
+ concealedFrames: 0,
1158
+ csi: [],
1159
+ maxConcealRunLength: 0,
1160
+ optimalBitrate: 0,
1161
+ optimalFrameRate: 0,
1162
+ receivedBitrate: 0.13333333333333333,
1163
+ receivedFrameRate: 0,
1164
+ renderedFrameRate: 0,
1165
+ requestedBitrate: 0,
1166
+ requestedFrameRate: 0,
1167
+ rtpEndToEndLost: 0,
1168
+ rtpJitter: 0,
1169
+ rtpPackets: 0,
1170
+ ssci: 0,
1171
+ framesDropped: 0
1172
+ },
1173
+ h264CodecProfile: 'BP',
1174
+ isActiveSpeaker: true,
1175
+ optimalFrameSize: 0,
1176
+ receivedFrameSize: 3600,
1177
+ receivedHeight: 720,
1178
+ receivedKeyFrames: 0,
1179
+ receivedKeyFramesForRequest: 0,
1180
+ receivedKeyFramesSourceChange: 0,
1181
+ receivedKeyFramesUnknown: 0,
1182
+ receivedWidth: 1280,
1183
+ requestedFrameSize: 0,
1184
+ requestedKeyFrames: 0
1185
+ }
1186
+ ]
1187
+ );
1188
+ assert.deepEqual(
1189
+ mqeData.videoReceive[1].streams,
1190
+ [
1191
+ {
1192
+ common: {
1193
+ codec: 'H264',
1194
+ concealedFrames: 0,
1195
+ csi: [],
1196
+ maxConcealRunLength: 0,
1197
+ optimalBitrate: 0,
1198
+ optimalFrameRate: 0,
1199
+ receivedBitrate: 0.13333333333333333,
1200
+ receivedFrameRate: 0,
1201
+ renderedFrameRate: 0,
1202
+ requestedBitrate: 0,
1203
+ requestedFrameRate: 0,
1204
+ rtpEndToEndLost: 0,
1205
+ rtpJitter: 0,
1206
+ rtpPackets: 0,
1207
+ ssci: 0,
1208
+ framesDropped: 0
1209
+ },
1210
+ h264CodecProfile: 'BP',
1211
+ isActiveSpeaker: true,
1212
+ optimalFrameSize: 0,
1213
+ receivedFrameSize: 3600,
1214
+ receivedHeight: 720,
1215
+ receivedKeyFrames: 0,
1216
+ receivedKeyFramesForRequest: 0,
1217
+ receivedKeyFramesSourceChange: 0,
1218
+ receivedKeyFramesUnknown: 0,
1219
+ receivedWidth: 1280,
1220
+ requestedFrameSize: 0,
1221
+ requestedKeyFrames: 0
1222
+ }
1223
+ ]
1224
+ );
1225
+ });
1226
+
1227
+ it('has three streams for video receivers when three exist', async () => {
1228
+ pc.getTransceiverStats = sinon.stub().resolves({
1229
+ audio: {
1230
+ senders: [fakeStats.audio.senders[0]],
1231
+ receivers: [fakeStats.audio.receivers[0]],
1232
+ },
1233
+ video: {
1234
+ senders: [fakeStats.video.senders[0]],
1235
+ receivers: [fakeStats.video.receivers[0], fakeStats.video.receivers[0], fakeStats.video.receivers[0]],
1236
+ },
1237
+ screenShareAudio: {
1238
+ senders: [fakeStats.audio.senders[0]],
1239
+ receivers: [fakeStats.audio.receivers[0]],
1240
+ },
1241
+ screenShareVideo: {
1242
+ senders: [fakeStats.video.senders[0]],
1243
+ receivers: [fakeStats.video.receivers[0]],
1244
+ },
1245
+ });
1246
+
1247
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
1248
+
1249
+ await progressTime();
1250
+
1251
+ assert.deepEqual(
1252
+ mqeData.videoReceive[0].streams,
1253
+ [
1254
+ {
1255
+ common: {
1256
+ codec: 'H264',
1257
+ concealedFrames: 0,
1258
+ csi: [],
1259
+ maxConcealRunLength: 0,
1260
+ optimalBitrate: 0,
1261
+ optimalFrameRate: 0,
1262
+ receivedBitrate: 0.13333333333333333,
1263
+ receivedFrameRate: 0,
1264
+ renderedFrameRate: 0,
1265
+ requestedBitrate: 0,
1266
+ requestedFrameRate: 0,
1267
+ rtpEndToEndLost: 0,
1268
+ rtpJitter: 0,
1269
+ rtpPackets: 0,
1270
+ ssci: 0,
1271
+ framesDropped: 0
1272
+ },
1273
+ h264CodecProfile: 'BP',
1274
+ isActiveSpeaker: true,
1275
+ optimalFrameSize: 0,
1276
+ receivedFrameSize: 3600,
1277
+ receivedHeight: 720,
1278
+ receivedKeyFrames: 0,
1279
+ receivedKeyFramesForRequest: 0,
1280
+ receivedKeyFramesSourceChange: 0,
1281
+ receivedKeyFramesUnknown: 0,
1282
+ receivedWidth: 1280,
1283
+ requestedFrameSize: 0,
1284
+ requestedKeyFrames: 0
1285
+ },
1286
+ {
1287
+ common: {
1288
+ codec: 'H264',
1289
+ concealedFrames: 0,
1290
+ csi: [],
1291
+ maxConcealRunLength: 0,
1292
+ optimalBitrate: 0,
1293
+ optimalFrameRate: 0,
1294
+ receivedBitrate: 0.13333333333333333,
1295
+ receivedFrameRate: 0,
1296
+ renderedFrameRate: 0,
1297
+ requestedBitrate: 0,
1298
+ requestedFrameRate: 0,
1299
+ rtpEndToEndLost: 0,
1300
+ rtpJitter: 0,
1301
+ rtpPackets: 0,
1302
+ ssci: 0,
1303
+ framesDropped: 0
1304
+ },
1305
+ h264CodecProfile: 'BP',
1306
+ isActiveSpeaker: true,
1307
+ optimalFrameSize: 0,
1308
+ receivedFrameSize: 3600,
1309
+ receivedHeight: 720,
1310
+ receivedKeyFrames: 0,
1311
+ receivedKeyFramesForRequest: 0,
1312
+ receivedKeyFramesSourceChange: 0,
1313
+ receivedKeyFramesUnknown: 0,
1314
+ receivedWidth: 1280,
1315
+ requestedFrameSize: 0,
1316
+ requestedKeyFrames: 0
1317
+ },
1318
+ {
1319
+ common: {
1320
+ codec: 'H264',
1321
+ concealedFrames: 0,
1322
+ csi: [],
1323
+ maxConcealRunLength: 0,
1324
+ optimalBitrate: 0,
1325
+ optimalFrameRate: 0,
1326
+ receivedBitrate: 0.13333333333333333,
1327
+ receivedFrameRate: 0,
1328
+ renderedFrameRate: 0,
1329
+ requestedBitrate: 0,
1330
+ requestedFrameRate: 0,
1331
+ rtpEndToEndLost: 0,
1332
+ rtpJitter: 0,
1333
+ rtpPackets: 0,
1334
+ ssci: 0,
1335
+ framesDropped: 0
1336
+ },
1337
+ h264CodecProfile: 'BP',
1338
+ isActiveSpeaker: true,
1339
+ optimalFrameSize: 0,
1340
+ receivedFrameSize: 3600,
1341
+ receivedHeight: 720,
1342
+ receivedKeyFrames: 0,
1343
+ receivedKeyFramesForRequest: 0,
1344
+ receivedKeyFramesSourceChange: 0,
1345
+ receivedKeyFramesUnknown: 0,
1346
+ receivedWidth: 1280,
1347
+ requestedFrameSize: 0,
1348
+ requestedKeyFrames: 0
1349
+ }
1350
+ ]
1351
+ );
1352
+ });
958
1353
  });
959
1354
  });
960
1355
  });
@@ -17,7 +17,7 @@ require('@webex/plugin-people');
17
17
  require('@webex/plugin-rooms');
18
18
  require('@webex/plugin-meetings');
19
19
 
20
- const generateTestUsers = (options = {}) => {
20
+ const generateTestUsers = async (options = {}) => {
21
21
  options.config = options.config || {};
22
22
  options.config.orgId = options.config.orgId || process.env.WEBEX_CONVERGED_ORG_ID;
23
23
 
@@ -30,7 +30,8 @@ const generateTestUsers = (options = {}) => {
30
30
  // Pause for 5 seconds for CI
31
31
  await new Promise((done) => setTimeout(done, 5000));
32
32
 
33
- const userRegisterPromises = [];
33
+ const webexRegisterPromises = [];
34
+ const userWebexMeetings = [];
34
35
 
35
36
  userSet.forEach((user) => {
36
37
  // eslint-disable-next-line no-param-reassign
@@ -44,12 +45,19 @@ const generateTestUsers = (options = {}) => {
44
45
  },
45
46
  });
46
47
 
48
+ webexRegisterPromises.push(new Promise((resolve) => {
49
+ user.webex.on('ready', resolve);
50
+ }));
51
+
47
52
  user.webex.internal.support.submitLogs = sinon.stub().returns(Promise.resolve());
48
53
 
49
- userRegisterPromises.push(user.webex.meetings.register());
54
+ userWebexMeetings.push(user.webex.meetings);
50
55
  });
51
56
 
52
- return Promise.all(userRegisterPromises).then(() => userSet);
57
+ // wait for webex to be ready before registering meetings
58
+ return Promise.all(webexRegisterPromises).then(() => {
59
+ return Promise.all(userWebexMeetings.map(m => m.register())).then(() => userSet);
60
+ })
53
61
  })
54
62
  .catch((error) => {
55
63
  console.error('#generateTestUsers=>ERROR', error);