mirror of https://github.com/OpenVidu/openvidu.git
openvidu-test-e2e: use different room names for different connection quality tests
parent
86300ec00e
commit
bd27fc51fd
|
|
@ -943,15 +943,22 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@code videoOptimizations} means simulcast, dynacast and adaptiveStream
|
* {@code videoOptimizations} means simulcast, dynacast and adaptiveStream
|
||||||
* enabled for both users, as OpenVidu Meet has them, with a 1280x720 camera, so
|
* enabled for both users with a 1280x720 camera, so the camera is published as
|
||||||
* the camera is published as three VP8 simulcast layers. Without them the camera
|
* three VP8 simulcast layers. Without them the camera is a single 640x480
|
||||||
* is a single 640x480 layer. Audio is the same in both cases (Opus with the
|
* layer. Audio is the same in both cases (Opus with the livekit-client
|
||||||
* livekit-client defaults, DTX and RED).
|
* defaults, DTX and RED).
|
||||||
|
*
|
||||||
|
* The unique room name is because livekit-server stores an ICE config cache
|
||||||
|
* (`iceConfigCache`) of [roomName, participantIdentity] that can force a
|
||||||
|
* participant to use TCP candidates during 5 minutes. Both room names and
|
||||||
|
* participant identities can survive between different Room entities, so one
|
||||||
|
* test could affect the next.
|
||||||
*/
|
*/
|
||||||
private Pair<OpenViduTestappUser, OpenViduTestappUser> connectionQualityTest(boolean isPublisher,
|
private Pair<OpenViduTestappUser, OpenViduTestappUser> connectionQualityTest(boolean isPublisher,
|
||||||
boolean isSubscriber, Integer outboundPacketLoss, Integer inboundPacketLoss, boolean videoOptimizations)
|
boolean isSubscriber, Integer outboundPacketLoss, Integer inboundPacketLoss, boolean videoOptimizations)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
||||||
|
final String roomName = "ConnectionQuality" + System.currentTimeMillis();
|
||||||
final Integer width = videoOptimizations ? 1280 : null;
|
final Integer width = videoOptimizations ? 1280 : null;
|
||||||
final Integer height = videoOptimizations ? 720 : null;
|
final Integer height = videoOptimizations ? 720 : null;
|
||||||
|
|
||||||
|
|
@ -1006,6 +1013,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
WebElement participantNameInput = punchbagUser.getDriver().findElement(By.id("participant-name-input-0"));
|
WebElement participantNameInput = punchbagUser.getDriver().findElement(By.id("participant-name-input-0"));
|
||||||
participantNameInput.clear();
|
participantNameInput.clear();
|
||||||
participantNameInput.sendKeys("PunchbagUser");
|
participantNameInput.sendKeys("PunchbagUser");
|
||||||
|
setConnectionQualityRoomName(punchbagUser, roomName);
|
||||||
|
|
||||||
punchbagUser.getDriver().findElement(By.cssSelector(".connect-btn")).sendKeys(Keys.ENTER);
|
punchbagUser.getDriver().findElement(By.cssSelector(".connect-btn")).sendKeys(Keys.ENTER);
|
||||||
try {
|
try {
|
||||||
|
|
@ -1048,6 +1056,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
participantNameInput = regularUser.getDriver().findElement(By.id("participant-name-input-0"));
|
participantNameInput = regularUser.getDriver().findElement(By.id("participant-name-input-0"));
|
||||||
participantNameInput.clear();
|
participantNameInput.clear();
|
||||||
participantNameInput.sendKeys("RegularUser");
|
participantNameInput.sendKeys("RegularUser");
|
||||||
|
setConnectionQualityRoomName(regularUser, roomName);
|
||||||
|
|
||||||
regularUser.getDriver().findElement(By.cssSelector(".connect-btn")).sendKeys(Keys.ENTER);
|
regularUser.getDriver().findElement(By.cssSelector(".connect-btn")).sendKeys(Keys.ENTER);
|
||||||
if (isPublisher) {
|
if (isPublisher) {
|
||||||
|
|
@ -1102,6 +1111,12 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
return new ImmutablePair<>(punchbagUser, regularUser);
|
return new ImmutablePair<>(punchbagUser, regularUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setConnectionQualityRoomName(OpenViduTestappUser user, String roomName) {
|
||||||
|
WebElement roomNameInput = user.getDriver().findElement(By.id("room-name-input-0"));
|
||||||
|
roomNameInput.clear();
|
||||||
|
roomNameInput.sendKeys(roomName);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("ConnectionQuality POOR publisher test")
|
@DisplayName("ConnectionQuality POOR publisher test")
|
||||||
void connectionQualityPoorPublisherTest() throws Exception {
|
void connectionQualityPoorPublisherTest() throws Exception {
|
||||||
|
|
@ -1217,10 +1232,10 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("ConnectionQuality LOST publisher with OpenVidu Meet media does not make its subscriber LOST")
|
@DisplayName("ConnectionQuality LOST publisher with video optimizations enabled does not make its subscriber LOST")
|
||||||
void connectionQualityLostMeetPublisherSubscriberNotLostTest() throws Exception {
|
void connectionQualityLostPublisherWithVideoOptimizationsSubscriberNotLostTest() throws Exception {
|
||||||
|
|
||||||
log.info("ConnectionQuality LOST publisher with OpenVidu Meet media does not make its subscriber LOST");
|
log.info("ConnectionQuality LOST publisher with video optimizations enabled does not make its subscriber LOST");
|
||||||
|
|
||||||
lostPublisherDoesNotMakeSubscriberLost(true);
|
lostPublisherDoesNotMakeSubscriberLost(true);
|
||||||
}
|
}
|
||||||
|
|
@ -1266,6 +1281,51 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
gracefullyLeaveParticipants(punchbagUser, 1);
|
gracefullyLeaveParticipants(punchbagUser, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("ConnectionQuality short publisher outage keeps its session")
|
||||||
|
void connectionQualityShortPublisherOutageKeepsSessionTest() throws Exception {
|
||||||
|
|
||||||
|
log.info("ConnectionQuality short publisher outage keeps its session");
|
||||||
|
|
||||||
|
final int OUTAGE_SECONDS = 18;
|
||||||
|
|
||||||
|
// PunchbagUser publishes with video optimizations and RegularUser only
|
||||||
|
// subscribes to it
|
||||||
|
Pair<OpenViduTestappUser, OpenViduTestappUser> users = connectionQualityTest(true, false, null, null, true);
|
||||||
|
OpenViduTestappUser punchbagUser = users.getLeft();
|
||||||
|
OpenViduTestappUser regularUser = users.getRight();
|
||||||
|
|
||||||
|
// Cut the publisher's media uplink for a while, keeping its signaling up: a
|
||||||
|
// short network outage on the publisher's side. Its quality may well go LOST,
|
||||||
|
// but once the network is back its session must go on (resumed, not left and
|
||||||
|
// joined again)
|
||||||
|
NetworkConditioner.blackoutOutbound(getNetemContainerName(punchbagUser), "7900-7999", OUTAGE_SECONDS);
|
||||||
|
try {
|
||||||
|
Thread.sleep(OUTAGE_SECONDS * 1000L);
|
||||||
|
} finally {
|
||||||
|
NetworkConditioner.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
waitUntilConnectionQuality(regularUser, 0, "PunchbagUser", q -> q.contains("good") || q.contains("excellent"),
|
||||||
|
45, "Expected the publisher's connection quality to RECOVER after the outage");
|
||||||
|
// livekit-client (>= 2.22) does a full reconnect 10 s after its own quality is
|
||||||
|
// LOST, unless a better quality arrives first: leave time for a late one
|
||||||
|
Thread.sleep(15000);
|
||||||
|
|
||||||
|
int participantDisconnected = regularUser.getEventManager().getNumEvents("participantDisconnected-RoomEvent")
|
||||||
|
.get();
|
||||||
|
Assertions.assertEquals(0, participantDisconnected,
|
||||||
|
"PunchbagUser left and joined again after a " + OUTAGE_SECONDS + " s outage instead of keeping its "
|
||||||
|
+ "session (localTrackPublished: "
|
||||||
|
+ punchbagUser.getEventManager().getNumEvents("localTrackPublished-RoomEvent").get()
|
||||||
|
+ ", reconnecting: "
|
||||||
|
+ punchbagUser.getEventManager().getNumEvents("reconnecting-RoomEvent").get()
|
||||||
|
+ ", reconnected: "
|
||||||
|
+ punchbagUser.getEventManager().getNumEvents("reconnected-RoomEvent").get() + ")");
|
||||||
|
|
||||||
|
gracefullyLeaveParticipants(punchbagUser, 1);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("ConnectionQuality POOR subscriber test")
|
@DisplayName("ConnectionQuality POOR subscriber test")
|
||||||
void connectionQualityPoorSubscriberTest() throws Exception {
|
void connectionQualityPoorSubscriberTest() throws Exception {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue