mirror of https://github.com/OpenVidu/openvidu.git
openvidu-test-e2e: fix video dimension tests. Add new pro test
parent
026352133a
commit
6479382f58
|
@ -3137,6 +3137,82 @@ public class OpenViduProTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Broadcast and composed recording Test")
|
||||
void broadcastAndComposedRecordingTest() throws Exception {
|
||||
|
||||
log.info("Broadcast and composed recording Test");
|
||||
|
||||
try {
|
||||
String BROADCAST_IP = TestUtils.startRtmpServer();
|
||||
|
||||
final String sessionName = "BROADCAST_AND_RECORDED_SESSION";
|
||||
|
||||
OpenViduTestappUser user = setupBrowserAndConnectToOpenViduTestapp("chrome");
|
||||
user.getDriver().findElement(By.id("add-user-btn")).click();
|
||||
user.getDriver().findElement(By.id("session-name-input-0")).clear();
|
||||
user.getDriver().findElement(By.id("session-name-input-0")).sendKeys(sessionName);
|
||||
user.getDriver().findElement(By.className("join-btn")).sendKeys(Keys.ENTER);
|
||||
user.getEventManager().waitUntilEventReaches("streamCreated", 1);
|
||||
user.getEventManager().waitUntilEventReaches("streamPlaying", 1);
|
||||
|
||||
user.getDriver().findElement(By.id("session-api-btn-0")).click();
|
||||
Thread.sleep(750);
|
||||
WebElement broadcastUrlField = user.getDriver().findElement(By.id("broadcasturl-id-field"));
|
||||
broadcastUrlField.clear();
|
||||
broadcastUrlField.sendKeys("rtmp://" + BROADCAST_IP + "/live");
|
||||
user.getDriver().findElement(By.id("broadcast-properties-btn")).click();
|
||||
Thread.sleep(500);
|
||||
|
||||
// Start broadcast
|
||||
user.getDriver().findElement(By.id("start-broadcast-btn")).click();
|
||||
user.getWaiter().until(
|
||||
ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value", "Broadcast started"));
|
||||
user.getEventManager().waitUntilEventReaches("broadcastStarted", 1);
|
||||
|
||||
// Start composed recording
|
||||
user.getDriver().findElement(By.id("start-recording-btn")).click();
|
||||
user.getWaiter().until(ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value",
|
||||
"Recording started [" + sessionName + "]"));
|
||||
user.getEventManager().waitUntilEventReaches("recordingStarted", 1);
|
||||
|
||||
Thread.sleep(2000);
|
||||
|
||||
// Check broadcast
|
||||
checkRtmpRecordingIsFine(30, RecordingUtils::checkVideoAverageRgbGreen);
|
||||
|
||||
// Stop broadcast
|
||||
user.getDriver().findElement(By.id("stop-broadcast-btn")).click();
|
||||
user.getWaiter().until(
|
||||
ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value", "Broadcast stopped"));
|
||||
user.getEventManager().waitUntilEventReaches("broadcastStopped", 1);
|
||||
|
||||
// Stop recording
|
||||
user.getDriver().findElement(By.id("recording-id-field")).clear();
|
||||
user.getDriver().findElement(By.id("recording-id-field")).sendKeys(sessionName);
|
||||
user.getDriver().findElement(By.id("stop-recording-btn")).click();
|
||||
user.getWaiter().until(ExpectedConditions.attributeToBe(By.id("api-response-text-area"), "value",
|
||||
"Recording stopped [" + sessionName + "]"));
|
||||
user.getEventManager().waitUntilEventReaches("recordingStopped", 1);
|
||||
|
||||
// Check recording
|
||||
String recordingsPath = "/opt/openvidu/recordings/";
|
||||
File file1 = new File(recordingsPath + sessionName + "/" + sessionName + ".mp4");
|
||||
File file2 = new File(recordingsPath + sessionName + "/" + sessionName + ".jpg");
|
||||
Assertions.assertTrue(
|
||||
this.recordingUtils.recordedGreenFileFine(file1,
|
||||
new OpenVidu(OPENVIDU_URL, OPENVIDU_SECRET).getRecording(sessionName)),
|
||||
"Recorded file " + file1.getAbsolutePath() + " is not fine");
|
||||
Assertions.assertTrue(this.recordingUtils.thumbnailIsFine(file2, RecordingUtils::checkVideoAverageRgbGreen),
|
||||
"Thumbnail " + file2.getAbsolutePath() + " is not fine");
|
||||
|
||||
gracefullyLeaveParticipants(user, 1);
|
||||
|
||||
} finally {
|
||||
TestUtils.stopRtmpServer();
|
||||
}
|
||||
}
|
||||
|
||||
private void checkRtmpRecordingIsFine(long secondsTimeout, Function<Map<String, Long>, Boolean> colorCheckFunction)
|
||||
throws InterruptedException {
|
||||
final String broadcastRecordingPath = "/opt/openvidu/recordings";
|
||||
|
|
|
@ -1009,52 +1009,23 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
|||
}
|
||||
|
||||
// Resize captured window
|
||||
final CountDownLatch latchViewport = new CountDownLatch(1);
|
||||
final CountDownLatch latch3 = new CountDownLatch(2);
|
||||
int newWidth = 1000;
|
||||
int newHeight = 700;
|
||||
|
||||
final long[] expectedWidthHeight = new long[2];
|
||||
|
||||
user.getEventManager().on("streamPropertyChanged", (event) -> {
|
||||
try {
|
||||
if (latchViewport.await(4000, TimeUnit.MILLISECONDS)) {
|
||||
// Using a local or dockerized browser may vary the height value in 1 unit
|
||||
String expectedDimensions1 = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":"
|
||||
+ expectedWidthHeight[1] + "}";
|
||||
String expectedDimensions2 = "{\"width\":" + expectedWidthHeight[0] + ",\"height\":"
|
||||
+ (expectedWidthHeight[1] + 1) + "}";
|
||||
System.out.println("Publisher dimensions: " + event.get("newValue").getAsJsonObject().toString());
|
||||
System.out.println("Real dimensions of viewport (+0/+1 in height): " + expectedDimensions1);
|
||||
if ("videoDimensions".equals(event.get("changedProperty").getAsString())
|
||||
&& "screenResized".equals(event.get("reason").getAsString())
|
||||
&& (expectedDimensions1.equals(event.get("newValue").getAsJsonObject().toString())
|
||||
|| expectedDimensions2
|
||||
.equals(event.get("newValue").getAsJsonObject().toString()))) {
|
||||
latch3.countDown();
|
||||
}
|
||||
} else {
|
||||
fail("Viewport resolution did not change in 4 seconds");
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
log.error("Error waiting for viewport resolution");
|
||||
String expectedDimensions = "{\"width\":" + newWidth + ",\"height\":" + newHeight + "}";
|
||||
System.out.println("Publisher dimensions: " + event.get("newValue").getAsJsonObject().toString());
|
||||
System.out.println("Real dimensions of viewport: " + expectedDimensions);
|
||||
if ("videoDimensions".equals(event.get("changedProperty").getAsString())
|
||||
&& "screenResized".equals(event.get("reason").getAsString())
|
||||
&& (expectedDimensions.equals(event.get("newValue").getAsJsonObject().toString()))) {
|
||||
latch3.countDown();
|
||||
}
|
||||
});
|
||||
|
||||
user.getDriver().manage().window().setSize(new Dimension(newWidth, newHeight));
|
||||
|
||||
new Thread(() -> {
|
||||
String widthAndHeight = user.getBrowserUser().getDimensionOfViewport();
|
||||
JsonObject obj = JsonParser.parseString(widthAndHeight).getAsJsonObject();
|
||||
|
||||
expectedWidthHeight[0] = obj.get("width").getAsLong();
|
||||
expectedWidthHeight[1] = obj.get("height").getAsLong();
|
||||
|
||||
System.out.println("New viewport dimension: " + obj.toString());
|
||||
latchViewport.countDown();
|
||||
|
||||
}).start();
|
||||
|
||||
user.getEventManager().waitUntilEventReaches("streamPropertyChanged", 6);
|
||||
|
||||
if (!latch3.await(4000, TimeUnit.MILLISECONDS)) {
|
||||
|
@ -2669,7 +2640,9 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
|||
|
||||
OpenViduTestappUser user = setupBrowserAndConnectToOpenViduTestapp("chromeAlternateScreenShare");
|
||||
|
||||
user.getDriver().manage().window().setSize(new Dimension(1000, 800));
|
||||
final int width = 1000;
|
||||
final int height = 800;
|
||||
user.getDriver().manage().window().setSize(new Dimension(width, height));
|
||||
|
||||
log.info("openvidu-java-client test");
|
||||
|
||||
|
@ -2885,19 +2858,11 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
|||
}
|
||||
pub = connectionModerator.getPublishers().get(0);
|
||||
|
||||
String widthAndHeight = user.getBrowserUser().getDimensionOfViewport();
|
||||
JsonObject obj = JsonParser.parseString(widthAndHeight).getAsJsonObject();
|
||||
|
||||
// Using a local or dockerized browser may vary the height value in 1 unit
|
||||
long validHeight1 = obj.get("height").getAsLong();
|
||||
long validHeight2 = validHeight1 + 1;
|
||||
String validDimensions1 = "{\"width\":" + obj.get("width").getAsLong() + ",\"height\":" + validHeight1 + "}";
|
||||
String validDimensions2 = "{\"width\":" + obj.get("width").getAsLong() + ",\"height\":" + validHeight2 + "}";
|
||||
String validDimensions = "{\"width\":" + width + ",\"height\":" + height + "}";
|
||||
|
||||
Assertions.assertTrue(
|
||||
validDimensions1.equals(pub.getVideoDimensions()) || validDimensions2.equals(pub.getVideoDimensions()),
|
||||
"Wrong video dimenstions. Expected: " + validDimensions1 + "(+0/+1 in height) but actual: "
|
||||
+ pub.getVideoDimensions());
|
||||
Assertions.assertTrue(validDimensions.equals(pub.getVideoDimensions()),
|
||||
"Wrong video dimensions. Expected: " + validDimensions + " but actual: " + pub.getVideoDimensions());
|
||||
|
||||
Assertions.assertEquals(Integer.valueOf(30), pub.getFrameRate());
|
||||
Assertions.assertEquals("SCREEN", pub.getTypeOfVideo());
|
||||
|
|
Loading…
Reference in New Issue