openvidu-test-e2e: add opera test and refactor Jenkinsfile

pull/559/head
pabloFuente 2020-11-14 22:42:59 +01:00
parent f695a13c88
commit 1c21a154cd
4 changed files with 307 additions and 176 deletions

View File

@ -1,16 +1,15 @@
node('container') { node('container') {
sh 'docker rm -f chrome firefox e2e || true' sh 'docker rm -f e2e chrome firefox opera || true'
docker.image('selenium/standalone-chrome:latest').pull()
docker.image('selenium/standalone-firefox:latest').pull()
docker.image('selenium/standalone-chrome:latest').withRun('-p 6666:4444 --name chrome --shm-size=1g -v /opt/openvidu:/opt/openvidu') { c ->
sh 'rm -rf /opt/openvidu/* || true' sh 'rm -rf /opt/openvidu/* || true'
sh 'wget https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/barcode.y4m -P /opt/openvidu' sh 'wget https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/barcode.y4m -P /opt/openvidu'
sh 'wget https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/fakeaudio.wav -P /opt/openvidu' sh 'wget https://github.com/OpenVidu/openvidu/raw/master/openvidu-test-e2e/docker/fakeaudio.wav -P /opt/openvidu'
sh 'wget --directory-prefix=/opt/openvidu/test-layouts/layout1 https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-test-e2e/docker/my-custom-layout/index.html' sh 'wget --directory-prefix=/opt/openvidu/test-layouts/layout1 https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-test-e2e/docker/my-custom-layout/index.html'
docker.image('selenium/standalone-firefox:latest').withRun('-p 6667:4444 --name firefox --shm-size=1g') { d -> docker.image('openvidu/openvidu-test-e2e:$DISTRO').pull()
def mycontainer = docker.image('openvidu/openvidu-test-e2e:$DISTRO') docker.image('selenium/standalone-chrome:latest').pull()
mycontainer.pull() docker.image('selenium/standalone-firefox:latest').pull()
mycontainer.inside('--name e2e -p 4200:4200 -p 4443:4443 -p 5555:5555 -u root -e MY_UID=0 -v /var/run/docker.sock:/var/run/docker.sock:rw -v /dev/shm:/dev/shm -v /opt/openvidu:/opt/openvidu --privileged') { docker.image('selenium/standalone-opera:latest').pull()
docker.image('openvidu/openvidu-test-e2e:$DISTRO').inside('--name e2e -p 4200:4200 -p 4443:4443 -p 5555:5555 -u root -e MY_UID=0 -v /var/run/docker.sock:/var/run/docker.sock:rw -v /dev/shm:/dev/shm -v /opt/openvidu:/opt/openvidu --privileged') {
stage('Preparation') { stage('Preparation') {
sh 'rm -rf ~/.m2 || true' sh 'rm -rf ~/.m2 || true'
@ -142,6 +141,10 @@ node('container') {
sh 'until $(curl --insecure --output /dev/null --silent --head --fail https://OPENVIDUAPP:MY_SECRET@localhost:4443/); do echo "Waiting for openvidu-server..."; sleep 2; done' sh 'until $(curl --insecure --output /dev/null --silent --head --fail https://OPENVIDUAPP:MY_SECRET@localhost:4443/); do echo "Waiting for openvidu-server..."; sleep 2; done'
} }
docker.image('selenium/standalone-chrome:latest').withRun('-p 6666:4444 --name chrome --shm-size=1g -v /opt/openvidu:/opt/openvidu') { a ->
docker.image('selenium/standalone-firefox:latest').withRun('-p 6667:4444 --name firefox --shm-size=1g') { b ->
docker.image('selenium/standalone-opera:latest').withRun('-p 6668:4444 --name opera --shm-size=1g') { c ->
stage ('OpenVidu E2E tests') { stage ('OpenVidu E2E tests') {
try { try {
sh(script: '''#!/bin/bash -xe sh(script: '''#!/bin/bash -xe
@ -156,7 +159,7 @@ node('container') {
mvn --batch-mode versions:set-property -Dproperty=version.openvidu.test.browsers -DnewVersion=TEST mvn --batch-mode versions:set-property -Dproperty=version.openvidu.test.browsers -DnewVersion=TEST
cd openvidu-test-e2e cd openvidu-test-e2e
mvn -DskipTests=true clean install mvn -DskipTests=true clean install
sudo mvn --batch-mode -Dtest=OpenViduTestAppE2eTest -DAPP_URL=https://172.17.0.1:4200/ -DOPENVIDU_URL=https://172.17.0.1:4443/ -DREMOTE_URL_CHROME=http://172.17.0.1:6666/wd/hub/ -DREMOTE_URL_FIREFOX=http://172.17.0.1:6667/wd/hub/ -DEXTERNAL_CUSTOM_LAYOUT_URL=http://172.17.0.1:5555 -DEXTERNAL_CUSTOM_LAYOUT_PARAMS=sessionId,CUSTOM_LAYOUT_SESSION,secret,MY_SECRET test sudo mvn --batch-mode -Dtest=OpenViduTestAppE2eTest -DAPP_URL=https://172.17.0.1:4200/ -DOPENVIDU_URL=https://172.17.0.1:4443/ -DREMOTE_URL_CHROME=http://172.17.0.1:6666/wd/hub/ -DREMOTE_URL_FIREFOX=http://172.17.0.1:6667/wd/hub/ -DREMOTE_URL_OPERA=http://172.17.0.1:6668/wd/hub/ -DEXTERNAL_CUSTOM_LAYOUT_URL=http://172.17.0.1:5555 -DEXTERNAL_CUSTOM_LAYOUT_PARAMS=sessionId,CUSTOM_LAYOUT_SESSION,secret,MY_SECRET test
git checkout -f $OPENVIDU_COMMIT git checkout -f $OPENVIDU_COMMIT
'''.stripIndent()) '''.stripIndent())
} }
@ -165,6 +168,8 @@ node('container') {
archiveArtifacts artifacts: '**/openvidu-server.log' archiveArtifacts artifacts: '**/openvidu-server.log'
} }
} }
}
} }
} }
} }

View File

@ -102,6 +102,7 @@ public class AbstractOpenViduTestAppE2eTest {
protected static void setupBrowserDrivers() { protected static void setupBrowserDrivers() {
WebDriverManager.chromedriver().setup(); WebDriverManager.chromedriver().setup();
WebDriverManager.firefoxdriver().setup(); WebDriverManager.firefoxdriver().setup();
WebDriverManager.operadriver().setup();
} }
protected static void cleanFoldersAndSetUpOpenViduJavaClient() { protected static void cleanFoldersAndSetUpOpenViduJavaClient() {

View File

@ -0,0 +1,101 @@
package io.openvidu.test.e2e;
import static org.openqa.selenium.OutputType.BASE64;
import java.net.URL;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
public class OpenViduTestAppE2eAndroidTest {
protected static String OPENVIDU_SECRET = "MY_SECRET";
@Test
void android() throws Exception {
/* CHROME */
// Create object of DesiredCapabilities class and specify android platform
DesiredCapabilities capabilities = DesiredCapabilities.android();
// set the capability to execute test in chrome browser
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, BrowserType.CHROME);
// set the capability to execute our test in Android Platform
capabilities.setCapability(MobileCapabilityType.PLATFORM, Platform.ANDROID);
// we need to define platform name
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
// Set the device name as well (you can give any name)
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "my phone");
// set the android version as well
capabilities.setCapability(MobileCapabilityType.VERSION, "10.0");
ChromeOptions chromeOptions = new ChromeOptions();
// This flag avoids to grant the user media
chromeOptions.addArguments("--use-fake-ui-for-media-stream");
// This flag fakes user media with synthetic video
chromeOptions.addArguments("--use-fake-device-for-media-stream");
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
/* CHROME */
/* FIREFOX */
// DesiredCapabilities capabilities = DesiredCapabilities.android();
// capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "MozillaFirefox");
// capabilities.setCapability("automationName", "Gecko");
// capabilities.setCapability("platformName", "linux");
//
// FirefoxOptions options = new FirefoxOptions();
// options.addPreference("androidPackage", "org.mozilla.firefox");
// options.addPreference("androidDeviceSerial", "emulator-5554");
//// capabilities.setCapability("moz:firefoxOptions",
//// "{\"androidPackage\":\"org.mozilla.firefox\",\"androidDeviceSerial\":\"emulator-5554\"}");
// // capabilities.setCapability("moz:firefoxOptions", value);
// capabilities.setCapability(FirefoxOptions.FIREFOX_OPTIONS,
// "{\"androidPackage\":\"org.mozilla.firefox\",\"androidDeviceSerial\":\"emulator-5554\"}");
/* FIREFOX */
// Create object of URL class and specify the appium server address
URL url = new URL("http://172.19.0.3:4723/wd/hub");
AppiumDriver<MobileElement> driver = new AndroidDriver<MobileElement>(url, capabilities);
// Open url
driver.get("https://172.19.0.1:4200");
OpenViduEventManager eventManager = new OpenViduEventManager(driver, 50);
eventManager.startPolling();
// print the title
System.out.println("Title " + driver.getTitle());
WebElement urlInput = driver.findElement(By.id("openvidu-url"));
urlInput.clear();
urlInput.sendKeys("https://172.19.0.1:4443/");
WebElement secretInput = driver.findElement(By.id("openvidu-secret"));
secretInput.clear();
secretInput.sendKeys(OPENVIDU_SECRET);
driver.findElement(By.id("auto-join-checkbox")).click();
driver.findElement(By.id("one2one-btn")).click();
eventManager.waitUntilEventReaches("connectionCreated", 4);
eventManager.waitUntilEventReaches("accessAllowed", 2);
eventManager.waitUntilEventReaches("streamCreated", 4);
eventManager.waitUntilEventReaches("streamPlaying", 4);
System.out.println("data:image/png;base64," + ((TakesScreenshot) driver).getScreenshotAs(BASE64));
// close the browser
driver.quit();
}
}

View File

@ -117,6 +117,54 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest {
gracefullyLeaveParticipants(2); gracefullyLeaveParticipants(2);
} }
@Test
@DisplayName("One2One Firefox [Video + Audio]")
void oneToOneVideoAudioSessionFirefox() throws Exception {
setupBrowser("firefox");
log.info("One2One Firefox [Video + Audio]");
user.getDriver().findElement(By.id("auto-join-checkbox")).click();
user.getDriver().findElement(By.id("one2one-btn")).click();
user.getEventManager().waitUntilEventReaches("connectionCreated", 4);
user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
user.getEventManager().waitUntilEventReaches("streamCreated", 4);
user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size();
Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, 4, numberOfVideos);
Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager()
.assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true));
gracefullyLeaveParticipants(2);
}
@Test
@DisplayName("One2One Opera [Video + Audio]")
void oneToOneVideoAudioSessionOpera() throws Exception {
setupBrowser("opera");
log.info("One2One Opera [Video + Audio]");
user.getDriver().findElement(By.id("auto-join-checkbox")).click();
user.getDriver().findElement(By.id("one2one-btn")).click();
user.getEventManager().waitUntilEventReaches("connectionCreated", 4);
user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
user.getEventManager().waitUntilEventReaches("streamCreated", 4);
user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size();
Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, 4, numberOfVideos);
Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager()
.assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true));
gracefullyLeaveParticipants(2);
}
@Test @Test
@DisplayName("One2One [Audio]") @DisplayName("One2One [Audio]")
void oneToOneAudioSession() throws Exception { void oneToOneAudioSession() throws Exception {
@ -299,30 +347,6 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestAppE2eTest {
gracefullyLeaveParticipants(4); gracefullyLeaveParticipants(4);
} }
@Test
@DisplayName("One2One Firefox [Video + Audio]")
void oneToOneVideoAudioSessionFirefox() throws Exception {
setupBrowser("firefox");
log.info("One2One Firefox [Video + Audio]");
user.getDriver().findElement(By.id("auto-join-checkbox")).click();
user.getDriver().findElement(By.id("one2one-btn")).click();
user.getEventManager().waitUntilEventReaches("connectionCreated", 4);
user.getEventManager().waitUntilEventReaches("accessAllowed", 2);
user.getEventManager().waitUntilEventReaches("streamCreated", 4);
user.getEventManager().waitUntilEventReaches("streamPlaying", 4);
final int numberOfVideos = user.getDriver().findElements(By.tagName("video")).size();
Assert.assertEquals("Expected 4 videos but found " + numberOfVideos, 4, numberOfVideos);
Assert.assertTrue("Videos were expected to have audio and video tracks", user.getEventManager()
.assertMediaTracks(user.getDriver().findElements(By.tagName("video")), true, true));
gracefullyLeaveParticipants(2);
}
@Test @Test
@DisplayName("Cross-Browser test") @DisplayName("Cross-Browser test")
void crossBrowserTest() throws Exception { void crossBrowserTest() throws Exception {