mirror of https://github.com/OpenVidu/openvidu.git
openvidu-test-e2e: extend createSession in openviduJavaClientTest
parent
918ef299ae
commit
c2873b5020
|
@ -35,8 +35,6 @@ import java.util.concurrent.TimeoutException;
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.google.gson.*;
|
|
||||||
import io.openvidu.java.client.*;
|
|
||||||
import org.apache.http.HttpStatus;
|
import org.apache.http.HttpStatus;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
@ -51,15 +49,37 @@ import org.openqa.selenium.Dimension;
|
||||||
import org.openqa.selenium.Keys;
|
import org.openqa.selenium.Keys;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
import org.openqa.selenium.WebElement;
|
import org.openqa.selenium.WebElement;
|
||||||
import org.openqa.selenium.interactions.Actions;
|
|
||||||
import org.openqa.selenium.support.ui.ExpectedCondition;
|
import org.openqa.selenium.support.ui.ExpectedCondition;
|
||||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonNull;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
import com.mashape.unirest.http.HttpMethod;
|
import com.mashape.unirest.http.HttpMethod;
|
||||||
|
|
||||||
import io.appium.java_client.AppiumDriver;
|
import io.appium.java_client.AppiumDriver;
|
||||||
|
import io.openvidu.java.client.Connection;
|
||||||
|
import io.openvidu.java.client.ConnectionProperties;
|
||||||
|
import io.openvidu.java.client.ConnectionType;
|
||||||
|
import io.openvidu.java.client.IceServerProperties;
|
||||||
|
import io.openvidu.java.client.KurentoOptions;
|
||||||
|
import io.openvidu.java.client.MediaMode;
|
||||||
|
import io.openvidu.java.client.OpenVidu;
|
||||||
|
import io.openvidu.java.client.OpenViduHttpException;
|
||||||
|
import io.openvidu.java.client.OpenViduJavaClientException;
|
||||||
|
import io.openvidu.java.client.OpenViduRole;
|
||||||
|
import io.openvidu.java.client.Publisher;
|
||||||
|
import io.openvidu.java.client.Recording;
|
||||||
import io.openvidu.java.client.Recording.OutputMode;
|
import io.openvidu.java.client.Recording.OutputMode;
|
||||||
|
import io.openvidu.java.client.RecordingLayout;
|
||||||
|
import io.openvidu.java.client.RecordingMode;
|
||||||
|
import io.openvidu.java.client.RecordingProperties;
|
||||||
|
import io.openvidu.java.client.Session;
|
||||||
|
import io.openvidu.java.client.SessionProperties;
|
||||||
|
import io.openvidu.java.client.VideoCodec;
|
||||||
import io.openvidu.test.browsers.BrowserUser;
|
import io.openvidu.test.browsers.BrowserUser;
|
||||||
import io.openvidu.test.browsers.utils.BrowserNames;
|
import io.openvidu.test.browsers.utils.BrowserNames;
|
||||||
import io.openvidu.test.browsers.utils.CustomHttpClient;
|
import io.openvidu.test.browsers.utils.CustomHttpClient;
|
||||||
|
@ -2339,11 +2359,23 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
List<Session> sessions = OV.getActiveSessions();
|
List<Session> sessions = OV.getActiveSessions();
|
||||||
Assert.assertEquals("Expected no active sessions but found " + sessions.size(), 0, sessions.size());
|
Assert.assertEquals("Expected no active sessions but found " + sessions.size(), 0, sessions.size());
|
||||||
|
|
||||||
|
OpenVidu OV2 = new OpenVidu(OPENVIDU_URL, OPENVIDU_SECRET);
|
||||||
|
SessionProperties props = new SessionProperties.Builder().customSessionId("OTHER_SESSION")
|
||||||
|
.recordingMode(RecordingMode.ALWAYS).build();
|
||||||
|
OV2.createSession(props);
|
||||||
|
Assert.assertEquals(0, OV.getActiveSessions().size());
|
||||||
|
Session session = OV.createSession(new SessionProperties.Builder().customSessionId("OTHER_SESSION")
|
||||||
|
.recordingMode(RecordingMode.MANUAL).build());
|
||||||
|
Assert.assertEquals("OpenVidu#createSession should fetch remote session if it already exists",
|
||||||
|
RecordingMode.ALWAYS, session.getProperties().recordingMode());
|
||||||
|
Assert.assertFalse("OpenVidu.fetch() should return false after Session.getActiveSession()", OV.fetch());
|
||||||
|
session.close();
|
||||||
|
|
||||||
SessionProperties properties = new SessionProperties.Builder().customSessionId(customSessionId)
|
SessionProperties properties = new SessionProperties.Builder().customSessionId(customSessionId)
|
||||||
.mediaMode(MediaMode.ROUTED).recordingMode(RecordingMode.ALWAYS)
|
.mediaMode(MediaMode.ROUTED).recordingMode(RecordingMode.ALWAYS)
|
||||||
.defaultRecordingProperties(new RecordingProperties.Builder().outputMode(OutputMode.INDIVIDUAL).build())
|
.defaultRecordingProperties(new RecordingProperties.Builder().outputMode(OutputMode.INDIVIDUAL).build())
|
||||||
.build();
|
.build();
|
||||||
Session session = OV.createSession(properties);
|
session = OV.createSession(properties);
|
||||||
|
|
||||||
Assert.assertFalse("Session.fetch() should return false after OpenVidu.createSession()", session.fetch());
|
Assert.assertFalse("Session.fetch() should return false after OpenVidu.createSession()", session.fetch());
|
||||||
Assert.assertFalse("OpenVidu.fetch() should return false after OpenVidu.createSession()", OV.fetch());
|
Assert.assertFalse("OpenVidu.fetch() should return false after OpenVidu.createSession()", OV.fetch());
|
||||||
|
@ -3013,8 +3045,8 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
String goodStun = "{'url': 'stun:valid-domain.es:1234'}";
|
String goodStun = "{'url': 'stun:valid-domain.es:1234'}";
|
||||||
body = "{ 'customIceServers': [" + goodTurn + "," + goodStun + "]}";
|
body = "{ 'customIceServers': [" + goodTurn + "," + goodStun + "]}";
|
||||||
res = restClient.rest(HttpMethod.POST, "/openvidu/api/sessions/CUSTOM_SESSION_ID/connection", body,
|
res = restClient.rest(HttpMethod.POST, "/openvidu/api/sessions/CUSTOM_SESSION_ID/connection", body,
|
||||||
HttpStatus.SC_OK, true, false, true,
|
HttpStatus.SC_OK, true, false, true, mergeJson(DEFAULT_JSON_PENDING_CONNECTION,
|
||||||
mergeJson(DEFAULT_JSON_PENDING_CONNECTION, "{ 'customIceServers': [" + goodTurn + "," + goodStun+ "] }", new String[0]));
|
"{ 'customIceServers': [" + goodTurn + "," + goodStun + "] }", new String[0]));
|
||||||
restClient.rest(HttpMethod.DELETE,
|
restClient.rest(HttpMethod.DELETE,
|
||||||
"/openvidu/api/sessions/CUSTOM_SESSION_ID/connection/" + res.get("id").getAsString(),
|
"/openvidu/api/sessions/CUSTOM_SESSION_ID/connection/" + res.get("id").getAsString(),
|
||||||
HttpStatus.SC_NO_CONTENT);
|
HttpStatus.SC_NO_CONTENT);
|
||||||
|
@ -4382,7 +4414,8 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
Assert.assertTrue("Wrong token Connection property",
|
Assert.assertTrue("Wrong token Connection property",
|
||||||
connectionJson.get("token").getAsString().contains(session.getSessionId()));
|
connectionJson.get("token").getAsString().contains(session.getSessionId()));
|
||||||
Assert.assertEquals("Wrong number of keys in connectionProperties", 10, connectionProperties.keySet().size());
|
Assert.assertEquals("Wrong number of keys in connectionProperties", 10, connectionProperties.keySet().size());
|
||||||
Assert.assertTrue("Wrong customIceServer property", connectionProperties.get("customIceServers").getAsJsonArray().size() == 0);
|
Assert.assertTrue("Wrong customIceServer property",
|
||||||
|
connectionProperties.get("customIceServers").getAsJsonArray().size() == 0);
|
||||||
Assert.assertEquals("Wrong type property", ConnectionType.WEBRTC.name(),
|
Assert.assertEquals("Wrong type property", ConnectionType.WEBRTC.name(),
|
||||||
connectionProperties.get("type").getAsString());
|
connectionProperties.get("type").getAsString());
|
||||||
Assert.assertEquals("Wrong data property", "MY_SERVER_DATA", connectionProperties.get("data").getAsString());
|
Assert.assertEquals("Wrong data property", "MY_SERVER_DATA", connectionProperties.get("data").getAsString());
|
||||||
|
@ -4552,18 +4585,20 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
|
|
||||||
user.getDriver().findElement(By.id("save-btn")).click();
|
user.getDriver().findElement(By.id("save-btn")).click();
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
user.getDriver().findElements(By.className("join-btn"))
|
user.getDriver().findElements(By.className("join-btn")).stream().filter(el -> el.isEnabled())
|
||||||
.stream().filter(el -> el.isEnabled()).forEach(el -> el.sendKeys(Keys.ENTER));
|
.forEach(el -> el.sendKeys(Keys.ENTER));
|
||||||
user.getEventManager().waitUntilEventReaches("connectionCreated", 4);
|
user.getEventManager().waitUntilEventReaches("connectionCreated", 4);
|
||||||
user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
|
user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
|
||||||
user.getEventManager().waitUntilEventReaches("streamCreated", 4);
|
user.getEventManager().waitUntilEventReaches("streamCreated", 4);
|
||||||
user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
|
user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
|
||||||
|
|
||||||
// ------
|
// ------
|
||||||
// 2. Check that the IceServer is correctly setup on RTCPeerConnections created. This will ensure that the property
|
// 2. Check that the IceServer is correctly setup on RTCPeerConnections created.
|
||||||
|
// This will ensure that the property
|
||||||
// is reached in WebRTC browser related objects
|
// is reached in WebRTC browser related objects
|
||||||
// ------
|
// ------
|
||||||
List<WebElement> iceConfiguredButtons = user.getDriver().findElements(By.className("ice-config-button-" + connection1.getConnectionId()));
|
List<WebElement> iceConfiguredButtons = user.getDriver()
|
||||||
|
.findElements(By.className("ice-config-button-" + connection1.getConnectionId()));
|
||||||
for (WebElement iceConfigured : iceConfiguredButtons) {
|
for (WebElement iceConfigured : iceConfiguredButtons) {
|
||||||
iceConfigured.click();
|
iceConfigured.click();
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
@ -4571,8 +4606,10 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
IceServerProperties customIceServer = connection1.getCustomIceServers().get(i);
|
IceServerProperties customIceServer = connection1.getCustomIceServers().get(i);
|
||||||
String foundIceUrl = user.getDriver().findElement(By.id("ice-server-url-" + i)).getText();
|
String foundIceUrl = user.getDriver().findElement(By.id("ice-server-url-" + i)).getText();
|
||||||
String foundIceUsername = null, foundIceCred = null;
|
String foundIceUsername = null, foundIceCred = null;
|
||||||
List<WebElement> foundIceUsernameWebElem = user.getDriver().findElements(By.id("ice-server-username-" + i));
|
List<WebElement> foundIceUsernameWebElem = user.getDriver()
|
||||||
List<WebElement> foundIceCredWebElem = user.getDriver().findElements(By.id("ice-server-credential-" + i));
|
.findElements(By.id("ice-server-username-" + i));
|
||||||
|
List<WebElement> foundIceCredWebElem = user.getDriver()
|
||||||
|
.findElements(By.id("ice-server-credential-" + i));
|
||||||
if (foundIceUsernameWebElem.size() == 1) {
|
if (foundIceUsernameWebElem.size() == 1) {
|
||||||
foundIceUsername = foundIceUsernameWebElem.get(0).getText();
|
foundIceUsername = foundIceUsernameWebElem.get(0).getText();
|
||||||
}
|
}
|
||||||
|
@ -4611,21 +4648,24 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
JsonArray connectionsJsonArray = res.get("connections").getAsJsonArray();
|
JsonArray connectionsJsonArray = res.get("connections").getAsJsonArray();
|
||||||
boolean foundConnection = false;
|
boolean foundConnection = false;
|
||||||
for (JsonElement connectionJson : connectionsJsonArray) {
|
for (JsonElement connectionJson : connectionsJsonArray) {
|
||||||
// 4.2. Of all connections, get only the one created with openvidu-java-client with customIceServers added
|
// 4.2. Of all connections, get only the one created with openvidu-java-client
|
||||||
|
// with customIceServers added
|
||||||
// Check if connection is the one configured from java client
|
// Check if connection is the one configured from java client
|
||||||
String connectionId = connectionJson.getAsJsonObject().get("connectionId").getAsString();
|
String connectionId = connectionJson.getAsJsonObject().get("connectionId").getAsString();
|
||||||
if (connectionId.equals(connection1.getConnectionId())) {
|
if (connectionId.equals(connection1.getConnectionId())) {
|
||||||
// 4.3. If connection with custom ice server is found, get the property with all customIceServers
|
// 4.3. If connection with custom ice server is found, get the property with all
|
||||||
|
// customIceServers
|
||||||
foundConnection = true;
|
foundConnection = true;
|
||||||
JsonArray customIceServersJsonArray = connectionJson.getAsJsonObject()
|
JsonArray customIceServersJsonArray = connectionJson.getAsJsonObject().get("connectionProperties")
|
||||||
.get("connectionProperties").getAsJsonObject()
|
.getAsJsonObject().get("customIceServers").getAsJsonArray();
|
||||||
.get("customIceServers").getAsJsonArray();
|
|
||||||
for (IceServerProperties customIceServer : connection1.getCustomIceServers()) {
|
for (IceServerProperties customIceServer : connection1.getCustomIceServers()) {
|
||||||
// 4.4 Compare both list, the one created with openvidu-java-client with the one received from openvidu-node-client
|
// 4.4 Compare both list, the one created with openvidu-java-client with the one
|
||||||
|
// received from openvidu-node-client
|
||||||
boolean foundIceServer = false;
|
boolean foundIceServer = false;
|
||||||
Iterator<JsonElement> customIceServersJsonIterator = customIceServersJsonArray.iterator();
|
Iterator<JsonElement> customIceServersJsonIterator = customIceServersJsonArray.iterator();
|
||||||
while (customIceServersJsonIterator.hasNext() && !foundIceServer) {
|
while (customIceServersJsonIterator.hasNext() && !foundIceServer) {
|
||||||
// 4.5 When the custom ICE server is found in the openvidu-node-client object, compare it with the
|
// 4.5 When the custom ICE server is found in the openvidu-node-client object,
|
||||||
|
// compare it with the
|
||||||
// openvidu-java-client object
|
// openvidu-java-client object
|
||||||
JsonObject customIceJsonObject = customIceServersJsonIterator.next().getAsJsonObject();
|
JsonObject customIceJsonObject = customIceServersJsonIterator.next().getAsJsonObject();
|
||||||
String url = customIceJsonObject.get("url").getAsString();
|
String url = customIceJsonObject.get("url").getAsString();
|
||||||
|
@ -4633,38 +4673,36 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
foundIceServer = true;
|
foundIceServer = true;
|
||||||
Assert.assertEquals(customIceServer.getUrl(), customIceJsonObject.get("url").getAsString());
|
Assert.assertEquals(customIceServer.getUrl(), customIceJsonObject.get("url").getAsString());
|
||||||
if (customIceJsonObject.get("username") != null) {
|
if (customIceJsonObject.get("username") != null) {
|
||||||
Assert.assertEquals(customIceServer.getUsername(), customIceJsonObject.get("username").getAsString());
|
Assert.assertEquals(customIceServer.getUsername(),
|
||||||
|
customIceJsonObject.get("username").getAsString());
|
||||||
}
|
}
|
||||||
if (customIceJsonObject.get("credential") != null) {
|
if (customIceJsonObject.get("credential") != null) {
|
||||||
Assert.assertEquals(customIceServer.getCredential(), customIceJsonObject.get("credential").getAsString());
|
Assert.assertEquals(customIceServer.getCredential(),
|
||||||
|
customIceJsonObject.get("credential").getAsString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 4.6 Assert that the custom Ice Server was found on the openvidu-node-client connection object
|
// 4.6 Assert that the custom Ice Server was found on the openvidu-node-client
|
||||||
|
// connection object
|
||||||
Assert.assertTrue(foundIceServer);
|
Assert.assertTrue(foundIceServer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// 4.7 Assert that the connection was found on the openvidu-node-client session object, to fail in case it was not registered
|
// 4.7 Assert that the connection was found on the openvidu-node-client session
|
||||||
|
// object, to fail in case it was not registered
|
||||||
Assert.assertTrue(foundConnection);
|
Assert.assertTrue(foundConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Connection createConnWithCustomIceServer(Session session, OpenViduTestappUser user, String fromClient)
|
private Connection createConnWithCustomIceServer(Session session, OpenViduTestappUser user, String fromClient)
|
||||||
throws OpenViduJavaClientException, OpenViduHttpException, InterruptedException {
|
throws OpenViduJavaClientException, OpenViduHttpException, InterruptedException {
|
||||||
if (fromClient.equals("openvidu-java-client")) {
|
if (fromClient.equals("openvidu-java-client")) {
|
||||||
IceServerProperties iceServerProperties1 = new IceServerProperties.Builder()
|
IceServerProperties iceServerProperties1 = new IceServerProperties.Builder().url("turn:turn-server.com")
|
||||||
.url("turn:turn-server.com")
|
.username("usertest").credential("credtest").build();
|
||||||
.username("usertest")
|
IceServerProperties iceServerProperties2 = new IceServerProperties.Builder().url("stun:1.2.3.4:1234")
|
||||||
.credential("credtest")
|
|
||||||
.build();
|
|
||||||
IceServerProperties iceServerProperties2 = new IceServerProperties.Builder()
|
|
||||||
.url("stun:1.2.3.4:1234")
|
|
||||||
.build();
|
.build();
|
||||||
ConnectionProperties connectionProperties = new ConnectionProperties.Builder()
|
ConnectionProperties connectionProperties = new ConnectionProperties.Builder()
|
||||||
.addCustomIceServer(iceServerProperties1)
|
.addCustomIceServer(iceServerProperties1).addCustomIceServer(iceServerProperties2).build();
|
||||||
.addCustomIceServer(iceServerProperties2)
|
|
||||||
.build();
|
|
||||||
return session.createConnection(connectionProperties);
|
return session.createConnection(connectionProperties);
|
||||||
} else if (fromClient.equals("openvidu-node-client")) {
|
} else if (fromClient.equals("openvidu-node-client")) {
|
||||||
user.getDriver().findElement(By.id("session-api-btn-0")).click();
|
user.getDriver().findElement(By.id("session-api-btn-0")).click();
|
||||||
|
@ -4689,7 +4727,8 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
// Create connection
|
// Create connection
|
||||||
user.getDriver().findElement(By.id("crate-connection-api-btn")).click();
|
user.getDriver().findElement(By.id("crate-connection-api-btn")).click();
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
String responseAreaText = user.getDriver().findElement(By.id("api-response-text-area")).getAttribute("value");
|
String responseAreaText = user.getDriver().findElement(By.id("api-response-text-area"))
|
||||||
|
.getAttribute("value");
|
||||||
user.getDriver().findElement(By.id("close-dialog-btn")).click();
|
user.getDriver().findElement(By.id("close-dialog-btn")).click();
|
||||||
String connectionCreatedPrefix = "Connection created: ";
|
String connectionCreatedPrefix = "Connection created: ";
|
||||||
Assert.assertTrue(responseAreaText.startsWith(connectionCreatedPrefix));
|
Assert.assertTrue(responseAreaText.startsWith(connectionCreatedPrefix));
|
||||||
|
@ -4893,14 +4932,15 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest {
|
||||||
VideoCodec codecToCheck = (codec != null) ? codec : defaultForcedVideoCodec;
|
VideoCodec codecToCheck = (codec != null) ? codec : defaultForcedVideoCodec;
|
||||||
|
|
||||||
// Validate the codec to check for special cases:
|
// Validate the codec to check for special cases:
|
||||||
// * MEDIA_SERVER_PREFERRED means to use the codec that is preferred by the media server.
|
// * MEDIA_SERVER_PREFERRED means to use the codec that is preferred by the
|
||||||
|
// media server.
|
||||||
// * NONE means to use the codec that is preferred by the web browser.
|
// * NONE means to use the codec that is preferred by the web browser.
|
||||||
// Because this test is always run only for Kurento and Chrome, we know what to select here.
|
// Because this test is always run only for Kurento and Chrome, we know what to
|
||||||
|
// select here.
|
||||||
if (codecToCheck == VideoCodec.MEDIA_SERVER_PREFERRED) {
|
if (codecToCheck == VideoCodec.MEDIA_SERVER_PREFERRED) {
|
||||||
// Kurento preferred video codec is VP8.
|
// Kurento preferred video codec is VP8.
|
||||||
codecToCheck = VideoCodec.VP8;
|
codecToCheck = VideoCodec.VP8;
|
||||||
}
|
} else if (codecToCheck == VideoCodec.NONE) {
|
||||||
else if (codecToCheck == VideoCodec.NONE) {
|
|
||||||
// Chrome preferred video codec is VP8.
|
// Chrome preferred video codec is VP8.
|
||||||
codecToCheck = VideoCodec.VP8;
|
codecToCheck = VideoCodec.VP8;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue