diff --git a/openvidu-server/pom.xml b/openvidu-server/pom.xml
index 5fc6ecf9..4b5c1de9 100644
--- a/openvidu-server/pom.xml
+++ b/openvidu-server/pom.xml
@@ -314,27 +314,6 @@
-
- io.openvidu
- openvidu-test
- ${version.openvidu.test}
- test
-
-
- org.slf4j
- slf4j-nop
-
-
- org.slf4j
- slf4j-api
-
-
- org.slf4j
- jcl-over-slf4j
-
-
-
-
org.hamcrest
hamcrest-core
diff --git a/openvidu-test/.gitignore b/openvidu-test/.gitignore
deleted file mode 100644
index d7eebfc8..00000000
--- a/openvidu-test/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/target/
-.factorypath
diff --git a/openvidu-test/LICENSE b/openvidu-test/LICENSE
deleted file mode 100644
index 7a4a3ea2..00000000
--- a/openvidu-test/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
\ No newline at end of file
diff --git a/openvidu-test/NOTICE b/openvidu-test/NOTICE
deleted file mode 100644
index b7393e6f..00000000
--- a/openvidu-test/NOTICE
+++ /dev/null
@@ -1,13 +0,0 @@
-(C) Copyright 2016 Kurento (http://kurento.org)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/openvidu-test/README.md b/openvidu-test/README.md
deleted file mode 100644
index 8d2d2c74..00000000
--- a/openvidu-test/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-[](http://www.apache.org/licenses/LICENSE-2.0)
-[](https://docs.openvidu.io/en/stable/?badge=stable)
-[](https://hub.docker.com/r/openvidu/)
-[](https://groups.google.com/forum/#!forum/openvidu)
-
-[![][OpenViduLogo]](https://openvidu.io)
-
-openvidu-test
-===
-
-[OpenViduLogo]: https://secure.gravatar.com/avatar/5daba1d43042f2e4e85849733c8e5702?s=120
\ No newline at end of file
diff --git a/openvidu-test/pom.xml b/openvidu-test/pom.xml
deleted file mode 100644
index f2e36153..00000000
--- a/openvidu-test/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-
- 4.0.0
-
-
- io.openvidu
- openvidu-parent
- 2.0.0
-
-
- openvidu-test
- jar
-
- OpenVidu Test
- 1.1.0
-
- OpenVidu Tests Framework
-
- This project contains the test framework for the openvidu projects
-
- https://github.com/OpenVidu/openvidu
-
-
-
- Apache 2.0
- http://www.apache.org/licenses/LICENSE-2.0
- repo
-
-
-
-
- OpenVidu
- https://github.com/OpenVidu/openvidu
-
-
-
- ${openvidu.scm.url}
- scm:git:${openvidu.scm.connection}
- scm:git:${openvidu.scm.connection}
- develop
-
-
-
-
- openvidu.io
- -openvidu.io Community
- OpenVidu
- https://openvidu.io
-
-
-
-
-
- junit
- junit
- ${version.junit}
- compile
-
-
- io.openvidu
- openvidu-client
- ${version.openvidu.client}
-
-
- org.kurento
- kurento-commons
- ${version.kurento}
-
-
- org.kurento
- kurento-test
- ${version.kurento}
-
-
- org.springframework.boot
- spring-boot-starter-logging
-
-
- org.springframework.boot
- spring-boot-starter-log4j2
-
-
-
-
-
-
-
diff --git a/openvidu-test/src/main/java/io/openvidu/test/OpenViduClientBrowserTest.java b/openvidu-test/src/main/java/io/openvidu/test/OpenViduClientBrowserTest.java
deleted file mode 100644
index 0d5513fa..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/OpenViduClientBrowserTest.java
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test;
-
-import static io.openvidu.test.config.RoomTestConfiguration.ROOM_APP_CLASSNAME_DEFAULT;
-import static io.openvidu.test.config.RoomTestConfiguration.ROOM_APP_CLASSNAME_PROP;
-import static org.junit.Assert.fail;
-import static org.kurento.commons.PropertiesManager.getProperty;
-import static org.kurento.test.config.TestConfiguration.SELENIUM_SCOPE_PROPERTY;
-import static org.kurento.test.config.TestConfiguration.TEST_URL_TIMEOUT_DEFAULT;
-import static org.kurento.test.config.TestConfiguration.TEST_URL_TIMEOUT_PROPERTY;
-
-import java.security.SecureRandom;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorCompletionService;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.kurento.commons.PropertiesManager;
-import org.kurento.jsonrpc.JsonUtils;
-import org.kurento.test.base.BrowserTest;
-import org.kurento.test.browser.Browser;
-import org.kurento.test.browser.BrowserType;
-import org.kurento.test.browser.WebPage;
-import org.kurento.test.browser.WebPageType;
-import org.kurento.test.config.BrowserScope;
-import org.kurento.test.config.TestScenario;
-import org.kurento.test.services.KmsService;
-import org.kurento.test.services.Service;
-import org.kurento.test.services.TestService;
-import org.kurento.test.services.WebServerService;
-import org.openqa.selenium.By;
-import org.openqa.selenium.Dimension;
-import org.openqa.selenium.ElementNotVisibleException;
-import org.openqa.selenium.NoSuchElementException;
-import org.openqa.selenium.Point;
-import org.openqa.selenium.TimeoutException;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.interactions.Actions;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
-
-import com.google.gson.JsonArray;
-
-/**
- * Base for Kurento Room tests with browsers.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public abstract class OpenViduClientBrowserTest extends BrowserTest {
-
- public interface UserLifecycle {
- public void run(int numUser, int iteration) throws Exception;
- }
-
- public interface Task {
- public void exec(int numTask) throws Exception;
- }
-
- static class KmsUriSetterService extends TestService {
-
- private KmsService kms;
-
- public KmsUriSetterService(KmsService kms) {
- this.kms = kms;
- }
-
- @Override
- public TestServiceScope getScope() {
- return kms.getScope();
- }
-
- @Override
- public void start() {
- super.start();
- String uri = kms.getWsUri();
- System.setProperty("kms.uris", "[\"" + uri + "\"]");
- System.setProperty("kms.uri", uri);
- log.debug("Set system properties 'kms.uri' to {} & 'kms.uris' to [{}] ", uri, uri);
- }
-
- }
-
- public static long TASKS_TIMEOUT_IN_MINUTES = 15 * 60;
-
- public static int POLLING_LATENCY = 100;
- public static int WEB_TEST_MAX_WIDTH = 1200;
- public static int WEB_TEST_LEFT_BAR_WIDTH = 60;
- public static int WEB_TEST_TOP_BAR_WIDTH = 30;
- public static int WEB_TEST_BROWSER_WIDTH = 500;
- public static int WEB_TEST_BROWSER_HEIGHT = 400;
-
- public static String ROOM_PREFIX = "room";
- public static String USER_BROWSER_PREFIX = "browser";
- public static String USER_FAKE_PREFIX = "user";
-
- public static @Service(1) KmsService kms = new KmsService();
- public static @Service(2) KmsUriSetterService kmsUriSetter = new KmsUriSetterService(kms);
-
- public static BrowserScope testScope = BrowserScope.LOCAL;
- public static Class> webServerClass;
-
- static {
- loadWebServerClass();
- if (webServerClass == null) {
- Assert.fail("Unable to load any of the provided classnames for the web server test service");
- }
-
- String scopeProp = PropertiesManager.getProperty(SELENIUM_SCOPE_PROPERTY);
- if (scopeProp != null) {
- testScope = BrowserScope.valueOf(scopeProp.toUpperCase());
- }
- }
-
- public static @Service(99) WebServerService webServer = new WebServerService(webServerClass);
-
- public static int testTimeout;
-
- public static SecureRandom random = new SecureRandom();
-
- public WebPageType webPageType = WebPageType.ROOM;
-
- public int PLAY_TIME = 5; // seconds
-
- public int ITERATIONS = 2;
-
- public Object browsersLock = new Object();
-
- public String roomName = ROOM_PREFIX;
-
- public Map execExceptions = new HashMap();
-
- public boolean failed = false;
-
- public OpenViduClientBrowserTest() {
- setDeleteLogsIfSuccess(false); // always keep the logs
- }
-
- @BeforeClass
- public static void beforeClass() {
- testTimeout = getProperty(TEST_URL_TIMEOUT_PROPERTY, TEST_URL_TIMEOUT_DEFAULT);
- log.debug("Test timeout: {}", testTimeout);
- }
-
- @Override
- public void setupBrowserTest() throws InterruptedException {
- super.setupBrowserTest();
-
- execExceptions.clear();
-
- if (testScenario != null && testScenario.getBrowserMap() != null
- && testScenario.getBrowserMap().size() > 0) {
- int row = 0;
- int col = 0;
- for (final String browserKey : testScenario.getBrowserMap().keySet()) {
- Browser browser = getPage(browserKey).getBrowser();
- browser.getWebDriver().manage().window()
- .setSize(new Dimension(WEB_TEST_BROWSER_WIDTH, WEB_TEST_BROWSER_HEIGHT));
- browser
- .getWebDriver()
- .manage()
- .window()
- .setPosition(
- new Point(col * WEB_TEST_BROWSER_WIDTH + WEB_TEST_LEFT_BAR_WIDTH, row
- * WEB_TEST_BROWSER_HEIGHT + WEB_TEST_TOP_BAR_WIDTH));
- col++;
- if (col * WEB_TEST_BROWSER_WIDTH + WEB_TEST_LEFT_BAR_WIDTH > WEB_TEST_MAX_WIDTH) {
- col = 0;
- row++;
- }
- }
- }
- }
-
- @Override
- public void teardownBrowserTest() {
- super.teardownBrowserTest();
- failWithExceptions();
- }
-
- public static Collection localChromes(String caller, int browsers, WebPageType pageType) {
- TestScenario test = new TestScenario();
- for (int i = 0; i < browsers; i++) {
- Browser browser = new Browser.Builder().webPageType(pageType).browserType(BrowserType.CHROME)
- .scope(BrowserScope.LOCAL).build();
- test.addBrowser(getBrowserKey(i), browser);
- }
- log.debug("{}: Web browsers: {}, webPageType: {}, test scope: {}, Browsers map keySet: {}",
- caller, browsers, pageType, testScope.toString(), test.getBrowserMap().keySet());
- return Arrays.asList(new Object[][] { { test } });
- }
-
- public static void loadWebServerClass() {
- try {
- List auxList = JsonUtils.toStringList(PropertiesManager.getPropertyJson(
- ROOM_APP_CLASSNAME_PROP, ROOM_APP_CLASSNAME_DEFAULT, JsonArray.class));
-
- for (String aux : auxList) {
- log.info("Loading class '{}' as the test's web server service", aux);
- try {
- webServerClass = Class.forName(aux);
- break;
- } catch (Exception e) {
- log.warn("Couldn't load web server class '{}': {}", aux, e.getMessage());
- log.debug("Couldn't load web server class '{}'", aux, e);
- }
- }
- } catch (Exception e) {
- log.error("Incorrect value for property '{}'", ROOM_APP_CLASSNAME_PROP, e);
- }
- }
-
- public static void sleep(long seconds) {
- try {
- Thread.sleep(seconds * 1000);
- } catch (InterruptedException e) {
- log.warn("Interrupted while sleeping {}seconds", seconds, e);
- }
- }
-
- public static String getBrowserKey(int index) {
- return USER_BROWSER_PREFIX + index;
- }
-
- public static String getBrowserStreamName(int index) {
- return getBrowserKey(index) + "_webcam";
- }
-
- public static String getBrowserVideoStreamName(int index) {
- return "video-" + getBrowserStreamName(index);
- }
-
- public static String getBrowserNativeStreamName(int index) {
- return "native-" + getBrowserVideoStreamName(index);
- }
-
- public static String getFakeKey(int index) {
- return USER_FAKE_PREFIX + index;
- }
-
- public static String getFakeStreamName(int index) {
- return getFakeKey(index) + "_webcam";
- }
-
- public static String getFakeStreamName(String userName) {
- return userName + "_webcam";
- }
-
- public static String getFakeVideoStreamName(int index) {
- return "video-" + getFakeStreamName(index);
- }
-
- public static String getFakeNativeStreamName(int index) {
- return "native-" + getFakeVideoStreamName(index);
- }
-
- public static CountDownLatch[] createCdl(int numLatches, int numUsers) {
- final CountDownLatch[] cdl = new CountDownLatch[numLatches];
- for (int i = 0; i < numLatches; i++) {
- cdl[i] = new CountDownLatch(numUsers);
- }
- return cdl;
- }
-
- public void iterParallelUsers(int numUsers, int iterations, final UserLifecycle user)
- throws InterruptedException, ExecutionException, TimeoutException {
-
- int totalExecutions = iterations * numUsers;
- ExecutorService threadPool = Executors.newFixedThreadPool(totalExecutions);
- ExecutorCompletionService exec = new ExecutorCompletionService<>(threadPool);
- List> futures = new ArrayList<>();
-
- try {
- for (int j = 0; j < iterations; j++) {
- final int it = j;
- log.info("it#{}: Starting execution of {} users", it, numUsers);
- for (int i = 0; i < numUsers; i++) {
- final int numUser = i;
- final Browser browser = getPage(getBrowserKey(i)).getBrowser();
- futures.add(exec.submit(new Callable() {
- @Override
- public Void call() throws Exception {
- Thread.currentThread().setName("it" + it + "|browser" + numUser);
- if (it > 0) {
- log.debug("Page reloaded");
- browser.reload();
- }
- user.run(numUser, it);
- return null;
- }
- }));
- }
-
- for (int i = 0; i < numUsers; i++) {
- try {
- exec.take().get();
- } catch (ExecutionException e) {
- log.error("Execution exception", e);
- throw e;
- }
- }
- log.info("it#{}: Finished execution of {} users", it, numUsers);
- }
- } finally {
- threadPool.shutdownNow();
- }
- }
-
- public void parallelTasks(int numThreads, final String thPrefix, String taskName, final Task task) {
- ExecutorService threadPool = Executors.newFixedThreadPool(numThreads);
- ExecutorCompletionService exec = new ExecutorCompletionService<>(threadPool);
- try {
- for (int i = 0; i < numThreads; i++) {
- final int numTask = i;
- exec.submit(new Callable() {
- @Override
- public Void call() throws Exception {
- String thname = Thread.currentThread().getName();
- Thread.currentThread().setName(thPrefix + numTask);
- task.exec(numTask);
- Thread.currentThread().setName(thname);
- return null;
- }
- });
- }
- for (int i = 0; i < numThreads; i++) {
- String thTask = taskName + "-" + thPrefix + i;
- try {
- log.debug("Waiting for the {} execution to complete ({}/{})", thTask, i + 1, numThreads);
- exec.take().get();
- log.debug("Job {} completed ({}/{})", thTask, i + 1, numThreads);
- } catch (ExecutionException e) {
- log.debug("Execution exception of {} ({}/{})", thTask, i + 1, numThreads, e);
- execExceptions.put(taskName + "-" + thPrefix + i, e);
- } catch (InterruptedException e) {
- log.error("Interrupted while waiting for execution of task{}", i, e);
- }
- }
- } finally {
- threadPool.shutdown();
- try {
- threadPool.awaitTermination(TASKS_TIMEOUT_IN_MINUTES, TimeUnit.MINUTES);
- } catch (InterruptedException e) {
- log.warn("Tasks were executed more than {} minutes. Stopping it", TASKS_TIMEOUT_IN_MINUTES);
- threadPool.shutdownNow();
- }
-
- }
- }
-
- public void joinToRoom(int pageIndex, String userName, String roomName) {
- Browser userBrowser = getPage(getBrowserKey(pageIndex)).getBrowser();
- WebElement nameInput = findElement(userName, userBrowser, "name");
- nameInput.clear();
- nameInput.sendKeys(userName);
- WebElement roomInput = findElement(userName, userBrowser, "roomName");
- roomInput.clear();
- roomInput.sendKeys(roomName);
- findElement(userName, userBrowser, "joinBtn").submit();
- log.debug("Clicked on 'joinBtn' in {}", userName);
- }
-
- public void exitFromRoom(int pageIndex, String userName) {
- Browser userBrowser = getPage(getBrowserKey(pageIndex)).getBrowser();
- try {
- Actions actions = new Actions(userBrowser.getWebDriver());
- actions.click(findElement(userName, userBrowser, "buttonLeaveRoom")).perform();
- log.debug("'buttonLeaveRoom' clicked on in {}", userName);
- } catch (ElementNotVisibleException e) {
- log.warn("Button 'buttonLeaveRoom' is not visible. Session can't be closed");
- }
- }
-
- public void unsubscribe(int pageIndex, int unsubscribeFromIndex) {
- String clickableVideoTagId = getBrowserVideoStreamName(unsubscribeFromIndex);
- selectVideoTag(pageIndex, clickableVideoTagId);
-
- WebDriver userWebDriver = getPage(getBrowserKey(pageIndex)).getBrowser().getWebDriver();
- try {
- userWebDriver.findElement(By.id("buttonDisconnect")).click();
- } catch (ElementNotVisibleException e) {
- String msg = "Button 'buttonDisconnect' is not visible. Can't unsubscribe from media.";
- log.warn(msg);
- fail(msg);
- }
- }
-
- public void selectVideoTag(int pageIndex, String targetVideoTagId) {
- WebDriver userWebDriver = getPage(getBrowserKey(pageIndex)).getBrowser().getWebDriver();
- try {
- WebElement element = userWebDriver.findElement(By.id(targetVideoTagId));
- Actions actions = new Actions(userWebDriver);
- actions.moveToElement(element).click().perform();
- } catch (ElementNotVisibleException e) {
- String msg = "Video tag '" + targetVideoTagId + "' is not visible, thus not selectable.";
- log.warn(msg);
- fail(msg);
- }
- }
-
- protected void unpublish(int pageIndex) {
- WebDriver userWebDriver = getPage(getBrowserKey(pageIndex)).getBrowser().getWebDriver();
- try {
- userWebDriver.findElement(By.id("buttonDisconnect")).click();
- } catch (ElementNotVisibleException e) {
- log.warn("Button 'buttonDisconnect' is not visible. Can't unpublish media.");
- }
- }
-
- public WebElement findElement(String label, Browser browser, String id) {
- try {
- return new WebDriverWait(browser.getWebDriver(), testTimeout, POLLING_LATENCY)
- .until(ExpectedConditions.presenceOfElementLocated(By.id(id)));
- } catch (TimeoutException e) {
- log.warn("Timeout when waiting for element {} to exist in browser {}", id, label);
- int originalTimeout = 60;
- try {
- originalTimeout = browser.getTimeout();
- log.debug("Original browser timeout (s): {}, set to 10", originalTimeout);
- browser.setTimeout(10);
- browser.changeTimeout(10);
- WebElement elem = browser.getWebDriver().findElement(By.id(id));
- log.info("Additional findElement call was able to locate {} in browser {}", id, label);
- return elem;
- } catch (NoSuchElementException e1) {
- log.debug("Additional findElement call couldn't locate {} in browser {} ({})", id, label,
- e1.getMessage());
- throw new NoSuchElementException("Element with id='" + id + "' not found after "
- + testTimeout + " seconds in browser " + label);
- } finally {
- browser.setTimeout(originalTimeout);
- browser.changeTimeout(originalTimeout);
- }
- }
- }
-
- public void waitWhileElement(String label, Browser browser, String id) throws TimeoutException {
- int originalTimeout = 60;
- try {
- originalTimeout = browser.getTimeout();
- log.debug("Original browser timeout (s): {}, set to 1", originalTimeout);
- browser.setTimeout(1);
- browser.changeTimeout(1);
- new WebDriverWait(browser.getWebDriver(), testTimeout, POLLING_LATENCY)
- .until(ExpectedConditions.invisibilityOfElementLocated(By.id(id)));
- } catch (org.openqa.selenium.TimeoutException e) {
- log.warn("Timeout when waiting for element {} to disappear in browser {}", id, label, e);
- throw new TimeoutException("Element with id='" + id + "' is present in page after "
- + testTimeout + " seconds");
- } finally {
- browser.setTimeout(originalTimeout);
- browser.changeTimeout(originalTimeout);
- }
- }
-
- /**
- * Wait for stream of another browser user.
- *
- * @param index
- * own user index
- * @param label
- * browser name (user name)
- * @param targetIndex
- * the target user index
- */
- public void waitForStream(int index, String label, int targetIndex) {
- waitForStream(index, label, getBrowserNativeStreamName(targetIndex));
- }
-
- /**
- * Wait for stream of a fake user.
- *
- * @param index
- * own user index
- * @param label
- * browser name (user name)
- * @param targetIndex
- * the target user index
- */
- public void waitForStreamFake(int index, String label, int targetIndex) {
- waitForStream(index, label, getFakeNativeStreamName(targetIndex));
- }
-
- /**
- * Wait for stream of user whose video tag has already been generated.
- *
- * @param index
- * own user index
- * @param label
- * browser name (user name)
- * @param targetVideoTagId
- * expected video tag id
- */
- public void waitForStream(int index, String label, String targetVideoTagId) {
- String hostKey = getBrowserKey(index);
- Browser browser = getPage(hostKey).getBrowser();
- int i = 0;
- for (; i < testTimeout; i++) {
- WebElement video = findElement(label, browser, targetVideoTagId);
- String srcAtt = video.getAttribute("src");
- if (srcAtt != null && srcAtt.startsWith("blob")) {
- break;
- }
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- if (i == testTimeout) {
- Assert.fail("Video tag '" + targetVideoTagId + "' is not playing media after " + testTimeout
- + " seconds in '" + hostKey + "'");
- }
- }
-
- public void verify(boolean[] activeBrowserUsers) {
- verify(activeBrowserUsers, null);
- }
-
- public void verify(boolean[] activeBrowserUsers, Map activeFakeUsers) {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < activeBrowserUsers.length; i++) {
- if (activeBrowserUsers[i]) {
- sb.append(USER_BROWSER_PREFIX + i + ": active, ");
- } else {
- sb.append(USER_BROWSER_PREFIX + i + ": not, ");
- }
- }
- log.debug("Checking Browser users (active or not): [{}]", sb);
- if (activeFakeUsers != null && !activeFakeUsers.isEmpty()) {
- log.debug("Checking Fake users (active or not): {}", activeFakeUsers);
- }
-
- long startTime = System.nanoTime();
-
- for (int i = 0; i < activeBrowserUsers.length; i++) {
-
- if (activeBrowserUsers[i]) {
- Browser browser = getPage(getBrowserKey(i)).getBrowser();
- String browserLabel = getBrowserStreamName(i);
- String browserUsername = USER_BROWSER_PREFIX + i;
-
- for (int j = 0; j < activeBrowserUsers.length; j++) {
- String videoElementId = "video-" + getBrowserStreamName(j);
- verifyVideoInBrowser(browser, browserLabel, browserUsername, videoElementId,
- activeBrowserUsers[j]);
- }
-
- if (activeFakeUsers != null) {
- for (Entry fakeEntry : activeFakeUsers.entrySet()) {
- String videoElementId = "video-" + getFakeStreamName(fakeEntry.getKey());
- verifyVideoInBrowser(browser, browserLabel, browserUsername, videoElementId,
- fakeEntry.getValue());
- }
- }
- }
- }
- long endTime = System.nanoTime();
- double duration = ((double) endTime - startTime) / 1_000_000;
- log.debug("Checked active users: [{}] {} - in {} millis", sb, activeFakeUsers != null
- && !activeFakeUsers.isEmpty() ? "& " + activeFakeUsers : "", duration);
- }
-
- public void verifyVideoInBrowser(Browser browser, String browserLabel, String chromeName,
- String videoElementId, boolean isActive) {
- if (isActive) {
- log.debug("Verifing element {} exists in browser of {}", videoElementId, chromeName);
- try {
- WebElement video = findElement(browserLabel, browser, videoElementId);
- if (video == null) {
- fail("Video element " + videoElementId + " was not found in browser of " + chromeName);
- }
- } catch (NoSuchElementException e) {
- fail(e.getMessage());
- }
- log.debug("OK - element {} found in browser of {}", videoElementId, chromeName);
- } else {
- log.debug("Verifing element {} is missing from browser of {}", videoElementId, chromeName);
- try {
- waitWhileElement(browserLabel, browser, videoElementId);
- } catch (TimeoutException e) {
- fail(e.getMessage());
- }
- log.debug("OK - element {} is missing from browser of {}", videoElementId, chromeName);
- }
- }
-
- public void failWithExceptions() {
- if (!failed && !execExceptions.isEmpty()) {
- failed = true;
- StringBuffer sb = new StringBuffer();
- log.warn("\n+-------------------------------------------------------+\n"
- + "| Failing because of the following test errors: |\n"
- + "+-------------------------------------------------------+");
- for (String exKey : execExceptions.keySet()) {
- Exception e = execExceptions.get(exKey);
- log.warn("Error on '{}'", exKey, e);
- sb.append(exKey).append(" - ").append(e.getMessage()).append("\n");
- }
- sb.append("Check logs for more details");
- log.warn("\n+-------------------------------------------------------+\n"
- + "| End of errors list |\n"
- + "+-------------------------------------------------------+");
- Assert.fail(sb.toString());
- }
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/RoomClientFakeTest.java b/openvidu-test/src/main/java/io/openvidu/test/RoomClientFakeTest.java
deleted file mode 100644
index 9c08473b..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/RoomClientFakeTest.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test;
-
-import static org.kurento.commons.PropertiesManager.getProperty;
-import static org.kurento.test.config.TestConfiguration.TEST_HOST_PROPERTY;
-import static org.kurento.test.config.TestConfiguration.TEST_PORT_PROPERTY;
-import static org.kurento.test.config.TestConfiguration.TEST_PROTOCOL_DEFAULT;
-import static org.kurento.test.config.TestConfiguration.TEST_PROTOCOL_PROPERTY;
-import static org.kurento.test.config.TestConfiguration.TEST_PUBLIC_IP_DEFAULT;
-import static org.kurento.test.config.TestConfiguration.TEST_PUBLIC_IP_PROPERTY;
-import static org.kurento.test.config.TestConfiguration.TEST_PUBLIC_PORT_PROPERTY;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Assert;
-import org.kurento.client.KurentoClient;
-import org.kurento.commons.PropertiesManager;
-import org.kurento.commons.exception.KurentoException;
-import org.kurento.test.base.KurentoTest;
-import org.kurento.test.browser.WebPage;
-import org.kurento.test.config.BrowserScope;
-import org.kurento.test.config.Protocol;
-import org.kurento.test.docker.Docker;
-import org.kurento.test.services.FakeKmsService;
-import org.kurento.test.services.KmsService;
-import org.kurento.test.services.Service;
-import org.kurento.test.services.WebServerService;
-import org.kurento.test.utils.Shell;
-
-import io.openvidu.test.fake.util.FakeSession;
-
-/**
- * Base for Kurento Room tests with browsers and fake clients.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public abstract class RoomClientFakeTest extends OpenViduClientBrowserTest {
-
- public static @Service(3) KmsService fakeKms = new FakeKmsService();
-
- public static String testFiles = KurentoTest.getTestFilesDiskPath();
-
- // overwritten if running in Docker
- public static String serverAddress = PropertiesManager.getProperty(TEST_HOST_PROPERTY,
- getProperty(TEST_PUBLIC_IP_PROPERTY, TEST_PUBLIC_IP_DEFAULT));
- public static int serverPort = getProperty(TEST_PORT_PROPERTY,
- getProperty(TEST_PUBLIC_PORT_PROPERTY, WebServerService.getAppHttpsPort()));
- public static Protocol protocol = Protocol.valueOf(getProperty(TEST_PROTOCOL_PROPERTY,
- TEST_PROTOCOL_DEFAULT).toUpperCase());
-
- // might get overwritten by custom room apps
- public static String appWsPath = "/openvidu";
-
- public long JOIN_ROOM_TOTAL_TIMEOUT_IN_SECONDS = 30;
- public long ACTIVE_LIVE_TOTAL_TIMEOUT_IN_SECONDS = 180;
- public long ROOM_ACTIVITY_IN_SECONDS = 30;
- public long LEAVE_ROOM_TOTAL_TIMEOUT_IN_SECONDS = 10;
-
- public URI appWsUrl;
- public URI appBaseUrl;
- public URI appUrl;
-
- public ConcurrentMap sessions = new ConcurrentHashMap();
-
- public KurentoClient fakeKurentoClient;
-
- public RoomClientFakeTest() {
- super();
- }
-
- @Override
- public void setupBrowserTest() throws InterruptedException {
- super.setupBrowserTest();
-
- calculateUrl();
-
- String wsProtocol = "ws";
- if (protocol.equals(Protocol.HTTPS)) {
- wsProtocol = "wss";
- }
- String hostName = appUrl.getHost();
- try {
- appWsUrl = new URI(wsProtocol, null, hostName, serverPort, appWsPath, null, null);
- } catch (URISyntaxException e) {
- throw new KurentoException("Exception generating WS URI from " + wsProtocol + ", " + hostName
- + ", server port " + serverPort + " and WS path " + appWsPath);
- }
- log.debug("Protocol: {}, Hostname: {}, Port: {}, Path: {}", wsProtocol, hostName, serverPort,
- appWsPath);
-
- fakeKurentoClient = fakeKms.getKurentoClient();
- Assert.assertNotNull("Fake Kurento Client is null", fakeKurentoClient);
- }
-
- @Override
- public void teardownBrowserTest() {
- for (FakeSession s : sessions.values()) {
- try {
- s.close();
- } catch (IOException e) {
- log.warn("Error closing session", e);
- }
- }
- fakeKms.closeKurentoClient();
- super.teardownBrowserTest();
- }
-
- public void calculateUrl() {
- if (appUrl == null) {
- String hostName = serverAddress;
-
- if (BrowserScope.DOCKER.equals(testScope)) {
- Docker docker = Docker.getSingleton();
- if (docker.isRunningInContainer()) {
- hostName = docker.getContainerIpAddress();
- } else {
- hostName = docker.getHostIpForContainers();
- }
- }
-
- log.debug("Protocol: {}, Hostname: {}, Port: {}, Web page type: {}", protocol, hostName,
- serverPort, webPageType);
-
- try {
- appUrl = new URI(protocol.toString(), null, hostName, serverPort, webPageType.toString(),
- null, null);
- } catch (URISyntaxException e) {
- throw new KurentoException("Exception generating URI from " + protocol + ", " + hostName
- + ", server port " + serverPort + " and webpage type " + webPageType);
- }
- try {
- appBaseUrl = new URI(protocol.toString(), null, hostName, serverPort, null, null, null);
- } catch (URISyntaxException e) {
- throw new KurentoException("Exception generating URI from " + protocol + ", " + hostName
- + ", server port " + serverPort);
- }
- }
- }
-
- public FakeSession getSession(String room) {
- return sessions.get(room);
- }
-
- public FakeSession createSession(String room) {
- if (sessions.containsKey(room)) {
- return sessions.get(room);
- }
- FakeSession s = new FakeSession(appWsUrl.toString(), room, fakeKurentoClient);
- FakeSession old = sessions.putIfAbsent(room, s);
- if (old != null) {
- return old;
- }
- return s;
- }
-
- public void closeSession(String room) {
- FakeSession session = sessions.get(room);
- if (session != null) {
- try {
- session.close();
- } catch (IOException e) {
- log.warn("Error closing session", e);
- }
- }
- }
-
- public FakeSession removeSession(String room) {
- return sessions.remove(room);
- }
-
- public CountDownLatch parallelJoinFakeUsers(final List relativePaths, final String room,
- final KurentoClient kurento) {
- if (relativePaths == null || relativePaths.isEmpty()) {
- execExceptions.put("parallelJoinFakeUsers-" + room, new Exception(
- "Null or empty play paths list"));
- return null;
- }
- int userThreads = relativePaths.size();
- log.info("Joining room '{}': {} fake users with relative play paths:\n{}", room, userThreads,
- relativePaths);
-
- final CountDownLatch joinLatch = new CountDownLatch(userThreads);
- parallelTasks(userThreads, USER_FAKE_PREFIX, "parallelJoinFakeUsers-" + room, new Task() {
- @Override
- public void exec(int numTask) throws Exception {
- try {
- String userName = getFakeKey(numTask);
- FakeSession s = createSession(room);
- String fullPlayPath = getPlaySourcePath(userName, relativePaths.get(numTask));
- if (kurento == null) {
- s.newParticipant(userName, fullPlayPath, true, true);
- } else {
- s.newParticipant(userName, fullPlayPath, true, true, kurento);
- }
- } finally {
- joinLatch.countDown();
- }
- }
- });
- return joinLatch;
- }
-
- protected CountDownLatch parallelLeaveFakeUsers(final String room, int userThreads) {
- final CountDownLatch leaveLatch = new CountDownLatch(userThreads);
- parallelTasks(userThreads, USER_FAKE_PREFIX, "parallelLeaveFakeUsers-" + room, new Task() {
- @Override
- public void exec(int numTask) throws Exception {
- try {
- getSession(room).getParticipant(getFakeKey(numTask)).leaveRoom();
- } finally {
- leaveLatch.countDown();
- }
- }
- });
- return leaveLatch;
- }
-
- protected CountDownLatch parallelWaitActiveLive(final String room, int userThreads) {
- final CountDownLatch waitForLatch = new CountDownLatch(userThreads);
- parallelTasks(userThreads, USER_FAKE_PREFIX, "parallelWaitForActiveLive-" + room, new Task() {
- @Override
- public void exec(int numTask) throws Exception {
- getSession(room).getParticipant(getFakeKey(numTask)).waitForActiveLive(waitForLatch);
- }
- });
- return waitForLatch;
- }
-
- public void await(CountDownLatch waitLatch, long actionTimeoutInSeconds, String action,
- int userThreads) {
- failWithExceptions();
- try {
- if (!waitLatch.await(actionTimeoutInSeconds, TimeUnit.SECONDS)) {
- execExceptions.put(action, new Exception("Timeout waiting for '" + action + "' of "
- + userThreads + " tasks (max " + actionTimeoutInSeconds + "s)"));
- } else {
- log.debug("Finished waiting for {}", action);
- }
- } catch (InterruptedException e) {
- log.warn("Interrupted when waiting for {} of {} tasks (max {}s)", action, userThreads,
- actionTimeoutInSeconds, e);
- }
- }
-
- public void idlePeriod() {
- idlePeriod("ACTIVE_LIVE", "LEAVE_ROOM", roomName);
- }
-
- public void idlePeriod(String room) {
- idlePeriod("ACTIVE_LIVE", "LEAVE_ROOM", room);
- }
-
- public void idlePeriod(String previousAction, String nextAction, String room) {
- failWithExceptions();
- log.info("\n-----------------\n" + "Wait for {} concluded in '{}'" + "\n-----------------\n"
- + "Waiting {} seconds", previousAction, room, ROOM_ACTIVITY_IN_SECONDS);
- sleep(ROOM_ACTIVITY_IN_SECONDS);
- log.info("\n-----------------\n" + "{} in '{}'" + "\n-----------------\n", nextAction, room);
- }
-
- public static String getPlaySourcePath(String userName, String relativePath) throws Exception {
- return getPlaySourcePath(userName, relativePath, testFiles);
- }
-
- public static String getPlaySourcePath(String userName, String relativePath, String basePath)
- throws Exception {
- if (relativePath == null) {
- throw new Exception("Null play path for user " + userName);
- }
- if (!basePath.startsWith("http://") && !basePath.startsWith("https://")
- && !basePath.startsWith("file://")) {
- basePath = "file://" + basePath;
- }
- URI playerUri = null;
- try {
- playerUri = new URI(basePath + relativePath);
- } catch (URISyntaxException e) {
- throw new Exception("Unable to construct player URI for user " + userName
- + " from base path " + basePath + " and file " + relativePath);
- }
- String fullPlayPath = playerUri.toString();
- log.debug("Fake user '{}': using play URI {}", userName, fullPlayPath);
- return fullPlayPath;
- }
-
- // use fake.kms.ws.uri instead
- @Deprecated
- public static String getFreePort(String wsUri) {
- if (BrowserScope.DOCKER.equals(testScope)) {
- log.info("Test is dockerized, returning the same WS for the KMS: {}", wsUri);
- return wsUri;
- }
-
- URI url;
- try {
- url = new URI(wsUri);
- } catch (URISyntaxException e) {
- log.warn("WebSocket URI {} is malformed: " + e.getMessage(), wsUri);
- throw new KurentoException("WebSocket URI " + wsUri + " is malformed");
- }
-
- int c = 0;
- do {
- try {
- c++;
- int newPort = url.getPort() + c * c * c;
- url = new URI(url.getScheme(), null, url.getHost(), newPort, url.getPath(), null, null);
- String updatedWsUri = url.toString();
- log.debug("try#{} Is port available for running (fake) KMS using this URI? {}", c,
- updatedWsUri);
- String result = Shell.runAndWait("/bin/bash", "-c",
- "nc -z " + url.getHost() + " " + url.getPort() + "; echo $?");
- if (result.trim().equals("0")) {
- log.warn("Port " + url.getPort()
- + " is used. Maybe another KMS instance is running in this port");
- } else {
- log.debug("URI is available: {}", updatedWsUri);
- return updatedWsUri;
- }
- } catch (URISyntaxException e) {
- log.warn("WebSocket URI {} is malformed: " + e.getMessage(), wsUri);
- }
- } while (c < 3);
-
- log.warn("Giving up, will return the original URI: {}", wsUri);
- return wsUri;
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/RoomFunctionalBrowserTest.java b/openvidu-test/src/main/java/io/openvidu/test/RoomFunctionalBrowserTest.java
deleted file mode 100644
index 7d77e141..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/RoomFunctionalBrowserTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test;
-
-import org.junit.experimental.categories.Category;
-import org.kurento.commons.testing.SystemFunctionalTests;
-import org.kurento.test.browser.WebPage;
-
-/**
- * Functional Kurento Room tests (using browser clients).
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-@Category(SystemFunctionalTests.class)
-public class RoomFunctionalBrowserTest extends OpenViduClientBrowserTest {
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/RoomFunctionalFakeTest.java b/openvidu-test/src/main/java/io/openvidu/test/RoomFunctionalFakeTest.java
deleted file mode 100644
index 9c112c32..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/RoomFunctionalFakeTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test;
-
-import org.junit.experimental.categories.Category;
-import org.kurento.commons.testing.SystemFunctionalTests;
-import org.kurento.test.browser.WebPage;
-
-/**
- * Functional Kurento Room tests (using browser and fake clients).
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-@Category(SystemFunctionalTests.class)
-public class RoomFunctionalFakeTest extends RoomClientFakeTest {
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/AddRemoveUsers.java b/openvidu-test/src/main/java/io/openvidu/test/browser/AddRemoveUsers.java
deleted file mode 100644
index 0cf4bde4..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/AddRemoveUsers.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room demo integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class AddRemoveUsers extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 2;
-
- @Test
- public void test() throws Exception {
- final boolean[] activeUsers = new boolean[NUM_USERS];
-
- final CountDownLatch[] joinCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] leaveCdl = createCdl(ITERATIONS, NUM_USERS);
-
- iterParallelUsers(NUM_USERS, ITERATIONS, new UserLifecycle() {
-
- @Override
- public void run(int numUser, int iteration) throws Exception {
- String userName = getBrowserKey(numUser);
- log.info("User '{}' is joining room '{}'", userName, roomName);
- synchronized (browsersLock) {
- joinToRoom(numUser, userName, roomName);
- activeUsers[numUser] = true;
- verify(activeUsers);
- joinCdl[iteration].countDown();
- }
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- joinCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- sleep(PLAY_TIME);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- synchronized (browsersLock) {
- exitFromRoom(numUser, userName);
- activeUsers[numUser] = false;
- verify(activeUsers);
- leaveCdl[iteration].countDown();
- }
- log.info("User '{}' exited from room '{}'", userName, roomName);
- leaveCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- }
-
- });
- }
-
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/AddRemoveUsersNoSinkVerify.java b/openvidu-test/src/main/java/io/openvidu/test/browser/AddRemoveUsersNoSinkVerify.java
deleted file mode 100644
index cf2f7416..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/AddRemoveUsersNoSinkVerify.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class AddRemoveUsersNoSinkVerify extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 4;
-
- @Test
- public void test() throws Exception {
- iterParallelUsers(NUM_USERS, ITERATIONS, new UserLifecycle() {
- @Override
- public void run(int numUser, int iteration) throws Exception {
- String userName = getBrowserKey(numUser);
-
- log.info("User '{}' is joining room '{}'", userName, roomName);
- joinToRoom(numUser, userName, roomName);
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- sleep(PLAY_TIME);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- exitFromRoom(numUser, userName);
- log.info("User '{}' exited from room '{}'", userName, roomName);
- }
- });
- }
-
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/NUsersEqualLifetime.java b/openvidu-test/src/main/java/io/openvidu/test/browser/NUsersEqualLifetime.java
deleted file mode 100644
index 392ceec4..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/NUsersEqualLifetime.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room demo integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class NUsersEqualLifetime extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 4;
-
- @Test
- public void test() throws Exception {
- ITERATIONS = 1;
-
- final boolean[] activeUsers = new boolean[NUM_USERS];
-
- final CountDownLatch[] joinCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] publishCdl = createCdl(ITERATIONS, NUM_USERS * NUM_USERS);
- final CountDownLatch[] leaveCdl = createCdl(ITERATIONS, NUM_USERS);
-
- iterParallelUsers(NUM_USERS, ITERATIONS, new UserLifecycle() {
-
- @Override
- public void run(final int numUser, final int iteration) throws Exception {
- final String userName = getBrowserKey(numUser);
- log.info("User '{}' is joining room '{}'", userName, roomName);
- synchronized (browsersLock) {
- joinToRoom(numUser, userName, roomName);
- activeUsers[numUser] = true;
- verify(activeUsers);
- joinCdl[iteration].countDown();
- }
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- joinCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- final long start = System.currentTimeMillis();
-
- parallelTasks(NUM_USERS, USER_BROWSER_PREFIX, "parallelWaitForStream", new Task() {
- @Override
- public void exec(int numTask) throws Exception {
- String videoUserName = getBrowserKey(numTask);
- synchronized (browsersLock) {
- waitForStream(numUser, userName, numTask);
- }
- long duration = System.currentTimeMillis() - start;
- log.info("Video received in browser of user '{}' for user '{}' in {} millis", userName,
- videoUserName, duration);
- publishCdl[iteration].countDown();
- }
- });
- publishCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- sleep(PLAY_TIME);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- synchronized (browsersLock) {
- exitFromRoom(numUser, userName);
- activeUsers[numUser] = false;
- verify(activeUsers);
- leaveCdl[iteration].countDown();
- }
- log.info("User '{}' exited from room '{}'", userName, roomName);
- leaveCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- }
- });
-
- }
-
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/OneUserQuickReentry.java b/openvidu-test/src/main/java/io/openvidu/test/browser/OneUserQuickReentry.java
deleted file mode 100644
index 8706fdf7..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/OneUserQuickReentry.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room demo integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class OneUserQuickReentry extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 1;
-
- @Test
- public void test() throws Exception {
- ITERATIONS = 5;
-
- final boolean[] activeUsers = new boolean[NUM_USERS];
-
- final CountDownLatch[] joinCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] leaveCdl = createCdl(ITERATIONS, NUM_USERS);
-
- iterParallelUsers(NUM_USERS, ITERATIONS, new UserLifecycle() {
-
- @Override
- public void run(int numUser, int iteration) throws Exception {
- String userName = getBrowserKey(numUser);
- log.info("User '{}' is joining room '{}'", userName, roomName);
- synchronized (browsersLock) {
- joinToRoom(numUser, userName, roomName);
- activeUsers[numUser] = true;
- verify(activeUsers);
- joinCdl[iteration].countDown();
- }
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- joinCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- sleep(0);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- synchronized (browsersLock) {
- exitFromRoom(numUser, userName);
- activeUsers[numUser] = false;
- verify(activeUsers);
- leaveCdl[iteration].countDown();
- }
- log.info("User '{}' exited from room '{}'", userName, roomName);
- leaveCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- }
-
- });
- }
-
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/SeqAddRemoveUser.java b/openvidu-test/src/main/java/io/openvidu/test/browser/SeqAddRemoveUser.java
deleted file mode 100644
index 1ca85d05..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/SeqAddRemoveUser.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room demo integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class SeqAddRemoveUser extends RoomFunctionalBrowserTest {
-
- private static final int WAIT_TIME = 1;
-
- public static final int NUM_USERS = 2;
-
- @Test
- public void test() throws Exception {
-
- boolean[] activeUsers = new boolean[NUM_USERS];
-
- for (int cycle = 0; cycle < ITERATIONS; cycle++) {
-
- for (int i = 0; i < NUM_USERS; i++) {
- String userName = getBrowserKey(i);
- log.info("User '{}' joining room '{}'", userName, roomName);
- joinToRoom(i, userName, roomName);
- activeUsers[i] = true;
- sleep(WAIT_TIME);
- verify(activeUsers);
- log.info("User '{}' joined to room '{}'", userName, roomName);
- }
-
- for (int i = 0; i < NUM_USERS; i++) {
- for (int j = 0; j < NUM_USERS; j++) {
- waitForStream(i, getBrowserKey(i), j);
- log.debug("Received media from '{}' in browser of '{}'", getBrowserKey(j),
- getBrowserKey(i));
- }
- }
-
- // Guard time to see application in action
- sleep(PLAY_TIME);
-
- // Stop application by caller
- for (int i = 0; i < NUM_USERS; i++) {
- String userName = getBrowserKey(i);
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- exitFromRoom(i, userName);
- activeUsers[i] = false;
- sleep(WAIT_TIME);
- verify(activeUsers);
- log.info("User '{}' exited from room '{}'", userName, roomName);
- }
- }
- }
-
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/SeqNUsersEqualLifetime.java b/openvidu-test/src/main/java/io/openvidu/test/browser/SeqNUsersEqualLifetime.java
deleted file mode 100644
index 5ff65c3f..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/SeqNUsersEqualLifetime.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room demo integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class SeqNUsersEqualLifetime extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 4;
-
- @Test
- public void test() throws Exception {
-
- for (int i = 0; i < NUM_USERS; i++) {
- String userName = getBrowserKey(i);
- joinToRoom(i, userName, roomName);
- log.info("User '{}' joined to room '{}'", userName, roomName);
- }
-
- // FIXME it fails sporadically (could be the TrickleICE mechanism)
-
- for (int i = 0; i < NUM_USERS; i++) {
- String userName = getBrowserKey(i);
- for (int j = 0; j < NUM_USERS; j++) {
- if (i != j) {
- waitForStream(i, userName, j);
- log.debug("Received media from '{}' in '{}'", getBrowserKey(j), userName);
- }
- }
- }
-
- // Guard time to see application in action
- sleep(PLAY_TIME);
-
- for (int i = 0; i < NUM_USERS; i++) {
- String userName = getBrowserKey(i);
- exitFromRoom(i, userName);
- log.info("User '{}' exited from room '{}'", userName, roomName);
- }
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/TwoUsersEqualLifetime.java b/openvidu-test/src/main/java/io/openvidu/test/browser/TwoUsersEqualLifetime.java
deleted file mode 100644
index dba0eb69..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/TwoUsersEqualLifetime.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room demo integration test (basic version).
- *
- * @author Micael Gallego (micael.gallego@gmail.com)
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 5.0.0
- */
-public class TwoUsersEqualLifetime extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 2;
-
- @Test
- public void test() throws Exception {
-
- String user0Name = getBrowserKey(0);
- String user1Name = getBrowserKey(1);
-
- joinToRoom(0, user0Name, roomName);
- log.info("User '{}' joined to room '{}'", user0Name, roomName);
-
- joinToRoom(1, user1Name, roomName);
- log.info("User '{}' joined to room '{}'", user1Name, roomName);
-
- // FIXME it fails sporadically (could be the TrickleICE mechanism)
-
- waitForStream(0, user0Name, 0);
- log.debug("Received media from '{}' in '{}'", user0Name, user0Name);
- waitForStream(0, user0Name, 1);
- log.debug("Received media from '{}' in '{}'", user1Name, user0Name);
-
- waitForStream(1, user1Name, 0);
- log.debug("Received media from '{}' in '{}'", user0Name, user1Name);
- waitForStream(1, user1Name, 1);
- log.debug("Received media from '{}' in '{}'", user1Name, user1Name);
-
- // Guard time to see application in action
- sleep(PLAY_TIME);
-
- // Stop application by caller
- exitFromRoom(0, user0Name);
- exitFromRoom(1, user1Name);
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/UnpublishMedia.java b/openvidu-test/src/main/java/io/openvidu/test/browser/UnpublishMedia.java
deleted file mode 100644
index 1717779d..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/UnpublishMedia.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room browser test. Designed for the demo app.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.0.0
- */
-public class UnpublishMedia extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 3;
-
- @Test
- public void test() throws Exception {
- ITERATIONS = 3;
-
- final boolean[] activeUsers = new boolean[NUM_USERS];
-
- final CountDownLatch[] joinCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] publishCdl = createCdl(ITERATIONS, NUM_USERS * NUM_USERS);
- final CountDownLatch[] unpublishCdl = createCdl(ITERATIONS, 1);
- final CountDownLatch[] verifyCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] leaveCdl = createCdl(ITERATIONS, NUM_USERS);
-
- final int[] unpublisherIndex = new int[ITERATIONS];
- for (int i = 0; i < unpublisherIndex.length; i++) {
- unpublisherIndex[i] = random.nextInt(NUM_USERS);
- }
-
- iterParallelUsers(NUM_USERS, ITERATIONS, new UserLifecycle() {
-
- @Override
- public void run(final int numUser, final int iteration) throws Exception {
- final String userName = getBrowserKey(numUser);
-
- log.info("User '{}' is joining room '{}'", userName, roomName);
- synchronized (browsersLock) {
- joinToRoom(numUser, userName, roomName);
- activeUsers[numUser] = true;
- verify(activeUsers);
- joinCdl[iteration].countDown();
- }
- log.info("User '{}' joined room '{}'", userName, roomName);
- joinCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- final long start = System.currentTimeMillis();
-
- parallelTasks(NUM_USERS, USER_BROWSER_PREFIX, "parallelWaitForStream", new Task() {
- @Override
- public void exec(int numTask) throws Exception {
- String videoUserName = getBrowserKey(numTask);
- synchronized (browsersLock) {
- waitForStream(numUser, userName, numTask);
- }
- long duration = System.currentTimeMillis() - start;
- log.info("Video received in browser of user '{}' for user '{}' in {} millis", userName,
- videoUserName, duration);
- publishCdl[iteration].countDown();
- }
- });
- publishCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- synchronized (browsersLock) {
- if (numUser == unpublisherIndex[iteration]) {
- log.info("User '{}' unpublishing media in room '{}'", userName, roomName);
- unpublish(numUser);
- log.info("User '{}' unpublished media in room '{}'", userName, roomName);
- activeUsers[numUser] = false;
- unpublishCdl[iteration].countDown();
- }
- }
- unpublishCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- synchronized (browsersLock) {
- verify(activeUsers);
- verifyCdl[iteration].countDown();
- }
- log.info("{} - Verified that '{}' unpublished media in room '{}'", userName,
- getBrowserKey(unpublisherIndex[iteration]), roomName);
- verifyCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- sleep(PLAY_TIME);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- synchronized (browsersLock) {
- exitFromRoom(numUser, userName);
- activeUsers[numUser] = false;
- verify(activeUsers);
- leaveCdl[iteration].countDown();
- }
- log.info("User '{}' exited from room '{}'", userName, roomName);
- leaveCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- }
- });
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/UnsubscribeFromMedia.java b/openvidu-test/src/main/java/io/openvidu/test/browser/UnsubscribeFromMedia.java
deleted file mode 100644
index 39150c78..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/UnsubscribeFromMedia.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Room browser test. Designed for the demo app.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.0.0
- */
-public class UnsubscribeFromMedia extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 3;
-
- @Test
- public void test() throws Exception {
- final boolean[] activeUsers = new boolean[NUM_USERS];
-
- final CountDownLatch[] joinCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] publishCdl = createCdl(ITERATIONS, NUM_USERS * NUM_USERS);
- final CountDownLatch[] unsubscribeCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] verifyCdl = createCdl(ITERATIONS, NUM_USERS);
- final CountDownLatch[] leaveCdl = createCdl(ITERATIONS, NUM_USERS);
-
- final int[] unsubscribeFromIndex = new int[ITERATIONS];
- for (int i = 0; i < unsubscribeFromIndex.length; i++) {
- unsubscribeFromIndex[i] = random.nextInt(NUM_USERS);
- }
-
- iterParallelUsers(NUM_USERS, ITERATIONS, new UserLifecycle() {
-
- @Override
- public void run(final int numUser, final int iteration) throws Exception {
- final String userName = getBrowserKey(numUser);
-
- log.info("User '{}' is joining room '{}'", userName, roomName);
- synchronized (browsersLock) {
- joinToRoom(numUser, userName, roomName);
- activeUsers[numUser] = true;
- verify(activeUsers);
- joinCdl[iteration].countDown();
- }
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- joinCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- final long start = System.currentTimeMillis();
-
- parallelTasks(NUM_USERS, USER_BROWSER_PREFIX, "parallelWaitForStream", new Task() {
- @Override
- public void exec(int numTask) throws Exception {
- String videoUserName = getBrowserKey(numTask);
- synchronized (browsersLock) {
- waitForStream(numUser, userName, numTask);
- }
- long duration = System.currentTimeMillis() - start;
- log.info("Video received in browser of user '{}' for user '{}' in {} millis", userName,
- videoUserName, duration);
- publishCdl[iteration].countDown();
- }
- });
-
- publishCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- if (execExceptions != null && !execExceptions.isEmpty()) {
- return;
- }
-
- String userUnsubscribe = getBrowserKey(unsubscribeFromIndex[iteration]);
- if (numUser != unsubscribeFromIndex[iteration]) {
- log.info("User '{}' unsubscribing from '{}' (vTag={}) in room '{}'", userName,
- userUnsubscribe, getBrowserNativeStreamName(unsubscribeFromIndex[iteration]),
- roomName);
- synchronized (browsersLock) {
- unsubscribe(numUser, unsubscribeFromIndex[iteration]);
- }
- log.info("User '{}' unsubscribed from '{}' in room '{}'", userName, userUnsubscribe,
- roomName);
- } else {
- activeUsers[numUser] = false;
- }
- unsubscribeCdl[iteration].countDown();
- unsubscribeCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- if (numUser != unsubscribeFromIndex[iteration]) {
- synchronized (browsersLock) {
- verify(activeUsers);
- }
- log.info("{} - Verified that I've unsubscribed from '{}' media in room '{}'", userName,
- userUnsubscribe, roomName);
- }
- verifyCdl[iteration].countDown();
- verifyCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- synchronized (browsersLock) {
- exitFromRoom(numUser, userName);
- activeUsers[numUser] = false;
- verify(activeUsers);
- leaveCdl[iteration].countDown();
- }
- log.info("User '{}' exited from room '{}'", userName, roomName);
- leaveCdl[iteration].await(PLAY_TIME * 5000L, TimeUnit.MILLISECONDS);
- }
- });
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/browser/WebAppAvailability.java b/openvidu-test/src/main/java/io/openvidu/test/browser/WebAppAvailability.java
deleted file mode 100644
index 83532574..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/browser/WebAppAvailability.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.openvidu.test.browser;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalBrowserTest;
-
-/**
- * Web app availability basic test.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public class WebAppAvailability extends RoomFunctionalBrowserTest {
-
- public static final int NUM_USERS = 1;
-
- @Test
- public void test() throws Exception {
- boolean[] activeUsers = new boolean[NUM_USERS];
-
- int numUser = 0;
- String userName = getBrowserKey(numUser);
- log.info("User '{}' is joining room '{}'", userName, roomName);
- joinToRoom(numUser, userName, roomName);
- activeUsers[numUser] = true;
- verify(activeUsers);
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- long start = System.currentTimeMillis();
- waitForStream(numUser, userName, numUser);
- long duration = System.currentTimeMillis() - start;
- log.info("Video received in browser of user '{}' for user '{}' in {} millis", userName,
- userName, duration);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- exitFromRoom(numUser, userName);
- activeUsers[numUser] = false;
- verify(activeUsers);
- log.info("User '{}' exited from room '{}'", userName, roomName);
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/config/RoomTestConfiguration.java b/openvidu-test/src/main/java/io/openvidu/test/config/RoomTestConfiguration.java
deleted file mode 100644
index c3d12bcd..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/config/RoomTestConfiguration.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.config;
-
-import static org.kurento.test.config.TestConfiguration.KMS_WS_URI_DEFAULT;
-import static org.kurento.test.config.TestConfiguration.KMS_WS_URI_PROP;
-
-/**
- * Kurento Room test properties.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public class RoomTestConfiguration {
-
- public static final String ROOM_APP_CLASSNAME_PROP = "room.app.classnames";
- public static final String ROOM_APP_CLASSNAME_DEFAULT = "[org.kurento.room.basic.KurentoRoomBasicApp,"
- + "org.kurento.room.demo.KurentoRoomDemoApp]";
-
- public static final String EXTRA_KMS_WS_URI_PROP = KMS_WS_URI_PROP + ".extra";
- public static final String EXTRA_KMS_WS_URI_DEFAULT = KMS_WS_URI_DEFAULT;
-
- public static final String ROOM_PREFIX = "room";
- public static final String USER_BROWSER_PREFIX = "browser";
- public static final String USER_FAKE_PREFIX = "user";
- public static final String DEFAULT_ROOM = ROOM_PREFIX;
-
- public final static int DEFAULT_ROOM_INOUT_AWAIT_TIME_IN_SECONDS = 60;
- public final static int DEFAULT_ACTIVE_LIVE_TOTAL_TIMEOUT_IN_SECONDS = 60;
- public final static int DEFAULT_PLAY_TIME_IN_SECONDS = 30;
- public static final int TASKS_TIMEOUT_IN_MINUTES = 15;
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/ExtraKmsFakeUsers.java b/openvidu-test/src/main/java/io/openvidu/test/fake/ExtraKmsFakeUsers.java
deleted file mode 100644
index c5b156c7..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/ExtraKmsFakeUsers.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake;
-
-import static io.openvidu.test.config.RoomTestConfiguration.EXTRA_KMS_WS_URI_DEFAULT;
-import static io.openvidu.test.config.RoomTestConfiguration.EXTRA_KMS_WS_URI_PROP;
-
-import java.util.Arrays;
-import java.util.concurrent.CountDownLatch;
-
-import org.junit.Test;
-import org.kurento.client.KurentoClient;
-import org.kurento.client.KurentoConnectionListener;
-import org.kurento.commons.PropertiesManager;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalFakeTest;
-import io.openvidu.test.config.RoomTestConfiguration;
-
-/**
- * Tests multiple fake WebRTC users concurrently joining the same room. Some of them are built on a
- * pipeline from an extra KMS instance. (the config key for the WS URI of this instance is
- * {@link RoomTestConfiguration#EXTRA_KMS_WS_URI_PROP}, with the default value
- * {@link RoomTestConfiguration#EXTRA_KMS_WS_URI_DEFAULT})
- *
- * @see RoomTestConfiguration#EXTRA_KMS_WS_URI_PROP
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public class ExtraKmsFakeUsers extends RoomFunctionalFakeTest {
-
- public final static int NUM_USERS = 0;
-
- public static String[] relativeUris = { "/video/filter/fiwarecut.webm",
- "/video/filter/fiwarecut_30.webm", "/video/filter/street.webm" };
-
- public static String[] extraRelativeUris = { "/video/filter/plates.webm" };
-
- public String testExtraFakeKmsWsUri;
-
- public KurentoClient testExtraFakeKurento;
-
- @Override
- public void setupBrowserTest() throws InterruptedException {
- testExtraFakeKmsWsUri = PropertiesManager
- .getProperty(EXTRA_KMS_WS_URI_PROP, fakeKms.getWsUri());
- if (testExtraFakeKmsWsUri == null) {
- testExtraFakeKmsWsUri = EXTRA_KMS_WS_URI_DEFAULT;
- log.debug(
- "Extra Fake KMS URI: {} (default value, as '{}' was not specified nor the Fake KMS had one)",
- testExtraFakeKmsWsUri, EXTRA_KMS_WS_URI_PROP);
- } else {
- log.debug("Extra Fake KMS URI: {}", testExtraFakeKmsWsUri);
- }
-
- super.setupBrowserTest();
- }
-
- @Override
- public void teardownBrowserTest() {
- super.teardownBrowserTest();
- if (testExtraFakeKurento != null) {
- testExtraFakeKurento.destroy();
- testExtraFakeKurento = null;
- }
- }
-
- protected synchronized KurentoClient getTestExtraFakeKurento() {
- if (testExtraFakeKurento == null) {
- testExtraFakeKurento = KurentoClient.create(testExtraFakeKmsWsUri,
- new KurentoConnectionListener() {
- @Override
- public void connected() {
- }
-
- @Override
- public void connectionFailed() {
- }
-
- @Override
- public void disconnected() {
- testExtraFakeKurento = null;
- }
-
- @Override
- public void reconnected(boolean sameServer) {
- }
- });
- }
-
- return testExtraFakeKurento;
- }
-
- @Test
- public void test() {
- int fakeUsers = relativeUris.length;
-
- CountDownLatch joinLatch = parallelJoinFakeUsers(Arrays.asList(relativeUris), roomName,
- fakeKurentoClient);
-
- await(joinLatch, JOIN_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "joinRoom", fakeUsers);
-
- log.info("\n-----------------\n" + "Join concluded in room '{}'" + "\n-----------------\n",
- roomName);
-
- String aux = USER_FAKE_PREFIX;
- USER_FAKE_PREFIX = USER_FAKE_PREFIX + "extra";
-
- int extraFakeUsers = extraRelativeUris.length;
-
- joinLatch = parallelJoinFakeUsers(Arrays.asList(extraRelativeUris), roomName,
- getTestExtraFakeKurento());
-
- USER_FAKE_PREFIX = aux;
- CountDownLatch waitForLatch = parallelWaitActiveLive(roomName, fakeUsers);
- await(waitForLatch, ACTIVE_LIVE_TOTAL_TIMEOUT_IN_SECONDS, "waitForActiveLive", fakeUsers);
-
- USER_FAKE_PREFIX = USER_FAKE_PREFIX + "extra";
- waitForLatch = parallelWaitActiveLive(roomName, extraFakeUsers);
- await(waitForLatch, ACTIVE_LIVE_TOTAL_TIMEOUT_IN_SECONDS, "waitForActiveLiveExtra",
- extraFakeUsers);
-
- idlePeriod();
-
- USER_FAKE_PREFIX = aux;
- CountDownLatch leaveLatch = parallelLeaveFakeUsers(roomName, fakeUsers);
- await(leaveLatch, LEAVE_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "leaveRoom", fakeUsers);
-
- USER_FAKE_PREFIX = USER_FAKE_PREFIX + "extra";
- leaveLatch = parallelLeaveFakeUsers(roomName, extraFakeUsers);
- await(leaveLatch, LEAVE_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "leaveRoomExtra", extraFakeUsers);
-
- log.info("\n-----------------\n" + "Leave concluded in room '{}'" + "\n-----------------\n",
- roomName);
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/MixedUsers.java b/openvidu-test/src/main/java/io/openvidu/test/fake/MixedUsers.java
deleted file mode 100644
index c9eb6dfa..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/MixedUsers.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalFakeTest;
-
-/**
- * Tests multiple fake WebRTC and Selenium (Chrome) users sequentially joining the same room.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public class MixedUsers extends RoomFunctionalFakeTest {
-
- public static String[] relativeUris = { "/video/filter/fiwarecut.webm",
- "/video/filter/fiwarecut_30.webm" };
-
- public final static int CHROME_SPINNER_USERS = 1;
-
- @Test
- public void test() {
- int fakeUsers = relativeUris.length;
-
- CountDownLatch joinLatch = parallelJoinFakeUsers(Arrays.asList(relativeUris), roomName,
- fakeKurentoClient);
-
- // fail if necessary before continuing
- failWithExceptions();
-
- boolean[] activeBrowserUsers = new boolean[CHROME_SPINNER_USERS];
- int numUser = 0;
- String userName = getBrowserKey(numUser);
- log.info("User '{}' is joining room '{}'", userName, roomName);
- joinToRoom(numUser, userName, roomName);
- activeBrowserUsers[numUser] = true;
- verify(activeBrowserUsers); // only browser users
- log.info("User '{}' joined room '{}'", userName, roomName);
-
- await(joinLatch, JOIN_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "joinRoom", fakeUsers);
- log.info("\n-----------------\n" + "Join concluded in room '{}'" + "\n-----------------\n",
- roomName);
-
- CountDownLatch waitForLatch = parallelWaitActiveLive(roomName, fakeUsers);
- await(waitForLatch, ACTIVE_LIVE_TOTAL_TIMEOUT_IN_SECONDS, "waitForActiveLive", fakeUsers);
-
- // verify from the browser
- Map activeFakeWrUsers = new HashMap();
- for (int i = 0; i < fakeUsers; i++) {
- activeFakeWrUsers.put(getFakeKey(i), true);
- }
- verify(activeBrowserUsers, activeFakeWrUsers);
-
- // let's check that video streams are being received in the browser
- long start = System.currentTimeMillis();
- waitForStream(numUser, userName, numUser);
- long duration = System.currentTimeMillis() - start;
- log.info("Video received in browser of user '{}' for user '{}' in {} millis", userName,
- userName, duration);
- for (int i = 0; i < fakeUsers; i++) {
- start = System.currentTimeMillis();
- waitForStream(numUser, userName, getFakeNativeStreamName(i));
- duration = System.currentTimeMillis() - start;
- log.info("Video received in browser of user '{}' for user '{}' in {} millis", userName,
- getFakeKey(i), duration);
- }
-
- long aux = ROOM_ACTIVITY_IN_SECONDS;
- ROOM_ACTIVITY_IN_SECONDS = 20;
- idlePeriod();
-
- int targetIndex = random.nextInt(fakeUsers);
- log.debug("Selecting video of user {}", getFakeKey(targetIndex));
- selectVideoTag(numUser, getFakeVideoStreamName(targetIndex));
-
- ROOM_ACTIVITY_IN_SECONDS = aux;
- idlePeriod();
-
- CountDownLatch leaveLatch = parallelLeaveFakeUsers(roomName, fakeUsers);
- await(leaveLatch, LEAVE_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "leaveRoom", fakeUsers);
-
- for (int i = 0; i < fakeUsers; i++) {
- activeFakeWrUsers.put(getFakeKey(i), false);
- }
- verify(activeBrowserUsers, activeFakeWrUsers);
-
- log.info("User '{}' is exiting from room '{}'", userName, roomName);
- exitFromRoom(numUser, userName);
- activeBrowserUsers[numUser] = false;
- verify(activeBrowserUsers);
- log.info("User '{}' exited from room '{}'", userName, roomName);
-
- log.info("\n-----------------\n" + "Leave concluded in room '{}'" + "\n-----------------\n",
- roomName);
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/ParallelNFakeUsers.java b/openvidu-test/src/main/java/io/openvidu/test/fake/ParallelNFakeUsers.java
deleted file mode 100644
index 80121e27..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/ParallelNFakeUsers.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake;
-
-import java.util.Arrays;
-import java.util.concurrent.CountDownLatch;
-
-import org.junit.Test;
-import org.kurento.test.browser.WebPage;
-
-import io.openvidu.test.RoomFunctionalFakeTest;
-
-/**
- * Tests several fake WebRTC users' concurrently joining the same room.
- *
- * @author Radu Tom Vlad (rvlad@naevatec.com)
- * @since 6.2.1
- */
-public abstract class ParallelNFakeUsers extends RoomFunctionalFakeTest {
-
- public final static int NUM_USERS = 0;
-
- public static String[] relativeUris = { "/video/filter/fiwarecut.webm",
- "/video/filter/fiwarecut_30.webm", "/video/filter/street.webm" };
-
- @Test
- public void test() {
- int fakeUsers = relativeUris.length;
-
- CountDownLatch joinLatch = parallelJoinFakeUsers(Arrays.asList(relativeUris), roomName,
- fakeKurentoClient);
-
- await(joinLatch, JOIN_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "joinRoom", fakeUsers);
-
- log.info("\n-----------------\n" + "Join concluded in room '{}'" + "\n-----------------\n",
- roomName);
-
- CountDownLatch waitForLatch = parallelWaitActiveLive(roomName, fakeUsers);
-
- await(waitForLatch, ACTIVE_LIVE_TOTAL_TIMEOUT_IN_SECONDS, "waitForActiveLive", fakeUsers);
-
- idlePeriod();
-
- CountDownLatch leaveLatch = parallelLeaveFakeUsers(roomName, fakeUsers);
-
- await(leaveLatch, LEAVE_ROOM_TOTAL_TIMEOUT_IN_SECONDS, "leaveRoom", fakeUsers);
-
- log.info("\n-----------------\n" + "Leave concluded in room '{}'" + "\n-----------------\n",
- roomName);
- }
-
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/util/AudioVideoFile.java b/openvidu-test/src/main/java/io/openvidu/test/fake/util/AudioVideoFile.java
deleted file mode 100644
index 7641de19..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/util/AudioVideoFile.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake.util;
-
-public class AudioVideoFile {
- private String audio;
- private String video;
-
- public AudioVideoFile(String audio, String video) {
- super();
- this.audio = audio;
- this.video = video;
- }
-
- public String getAudio() {
- return audio;
- }
-
- public void setAudio(String audio) {
- this.audio = audio;
- }
-
- public String getVideo() {
- return video;
- }
-
- public void setVideo(String video) {
- this.video = video;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("[");
- if (audio != null) {
- builder.append("audio=").append(audio).append(", ");
- }
- if (video != null) {
- builder.append("video=").append(video);
- }
- builder.append("]");
- return builder.toString();
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/util/FakeParticipant.java b/openvidu-test/src/main/java/io/openvidu/test/fake/util/FakeParticipant.java
deleted file mode 100644
index 44a1622e..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/util/FakeParticipant.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake.util;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.junit.Assert;
-import org.kurento.client.EndOfStreamEvent;
-import org.kurento.client.ErrorEvent;
-import org.kurento.client.EventListener;
-import org.kurento.client.IceCandidate;
-import org.kurento.client.MediaPipeline;
-import org.kurento.client.MediaState;
-import org.kurento.client.MediaStateChangedEvent;
-import org.kurento.client.OnIceCandidateEvent;
-import org.kurento.client.PlayerEndpoint;
-import org.kurento.client.WebRtcEndpoint;
-import io.openvidu.client.OpenViduClient;
-import io.openvidu.client.internal.IceCandidateInfo;
-import io.openvidu.client.internal.Notification;
-import io.openvidu.client.internal.ParticipantLeftInfo;
-import io.openvidu.client.internal.ParticipantPublishedInfo;
-import io.openvidu.client.internal.ParticipantUnpublishedInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * @author Radu Tom Vlad
- *
- */
-public class FakeParticipant implements Closeable {
- private static final long WAIT_ACTIVE_LIVE_BY_PEER_TIMEOUT = 10; // seconds
-
- private static Logger log = LoggerFactory.getLogger(FakeParticipant.class);
-
- private OpenViduClient jsonRpcClient;
-
- private MediaPipeline pipeline;
- private WebRtcEndpoint webRtc;
- private CountDownLatch ownLatch = new CountDownLatch(1);
- private PlayerEndpoint player;
-
- private String name;
- private String room;
- private String playerUri;
-
- private boolean autoMedia = false;
- private boolean loopMedia = false;
-
- private Map peerStreams = new ConcurrentSkipListMap();
- private Map peerEndpoints = new ConcurrentSkipListMap();
- private Map peerLatches = new ConcurrentSkipListMap();
-
- private Thread notifThread;
-
- public FakeParticipant(String serviceUrl, String name, String room, String playerUri,
- MediaPipeline pipeline, boolean autoMedia, boolean loopMedia) {
- this.name = name;
- this.room = room;
- this.playerUri = playerUri;
- this.autoMedia = autoMedia;
- this.loopMedia = loopMedia;
- this.pipeline = pipeline;
- this.jsonRpcClient = new OpenViduClient(serviceUrl);
- this.notifThread = new Thread(name + "-notif") {
- @Override
- public void run() {
- try {
- internalGetNotification();
- } catch (InterruptedException e) {
- log.debug("Interrupted while running notification polling");
- return;
- }
- }
- };
- this.notifThread.start();
- }
-
- private void internalGetNotification() throws InterruptedException {
- log.info("Starting receiving notifications by polling blocking queue");
- while (true) {
- try {
- Notification notif = jsonRpcClient.getServerNotification();
- if (notif == null) {
- return;
- }
- log.debug("Polled notif {}", notif);
- switch (notif.getMethod()) {
- case ICECANDIDATE_METHOD:
- onIceCandidate(notif);
- break;
- case MEDIAERROR_METHOD:
- // TODO
- break;
- case PARTICIPANTEVICTED_METHOD:
- // TODO
- break;
- case PARTICIPANTJOINED_METHOD:
- // TODO
- break;
- case PARTICIPANTLEFT_METHOD:
- onParticipantLeft(notif);
- break;
- case PARTICIPANTPUBLISHED_METHOD:
- onParticipantPublished(notif);
- break;
- case PARTICIPANTSENDMESSAGE_METHOD:
- break;
- case PARTICIPANTUNPUBLISHED_METHOD:
- onParticipantUnpublish(notif);
- break;
- case ROOMCLOSED_METHOD:
- // TODO
- break;
- default:
- break;
- }
- } catch (Exception e) {
- log.warn("Encountered a problem when reading " + "the notifications queue", e);
- }
- }
- }
-
- private void onParticipantUnpublish(Notification notif) {
- ParticipantUnpublishedInfo info = (ParticipantUnpublishedInfo) notif;
- log.debug("Notif details {}: {}", info.getClass().getSimpleName(), info);
- releaseRemote(info.getName());
- }
-
- private void onParticipantLeft(Notification notif) {
- ParticipantLeftInfo info = (ParticipantLeftInfo) notif;
- log.debug("Notif details {}: {}", info.getClass().getSimpleName(), info);
- releaseRemote(info.getName());
- }
-
- private void releaseRemote(String remote) {
- WebRtcEndpoint peer = peerEndpoints.get(remote);
- if (peer != null) {
- peer.release();
- }
- peerEndpoints.remove(remote);
- }
-
- private void onParticipantPublished(Notification notif) {
- ParticipantPublishedInfo info = (ParticipantPublishedInfo) notif;
- log.debug("Notif details {}: {}", info.getClass().getSimpleName(), info);
- String remote = info.getId();
- addPeerStream(remote, info.getStreams());
- if (autoMedia) {
- if (peerEndpoints.containsKey(remote)) {
- log.info("(autosubscribe on) Already subscribed to {}. No actions required.", remote);
- return;
- }
- subscribe(remote);
- }
- }
-
- private void onIceCandidate(Notification notif) {
- IceCandidateInfo info = (IceCandidateInfo) notif;
- log.debug("Notif details {}: {}", info.getClass().getSimpleName(), info);
- String epname = info.getEndpointName();
- if (name.equals(epname)) {
- if (webRtc != null) {
- webRtc.addIceCandidate(toKurentoIceCandidate(info.getIceCandidate()));
- }
- } else {
- WebRtcEndpoint peer = peerEndpoints.get(epname);
- if (peer != null) {
- peer.addIceCandidate(toKurentoIceCandidate(info.getIceCandidate()));
- }
- }
- }
-
- private IceCandidate toKurentoIceCandidate(
- io.openvidu.client.internal.IceCandidate iceCandidate) {
- return new IceCandidate(iceCandidate.getCandidate(), iceCandidate.getSdpMid(),
- iceCandidate.getSdpMLineIndex());
- }
-
- public void joinRoom() {
- try {
- addPeers(jsonRpcClient.joinRoom(room, name));
- log.info("Joined room {}: {} peers", room, peerStreams);
- if (autoMedia) {
- log.debug("Automedia on, publishing and subscribing to as many as {} publishers",
- peerStreams.size());
- publish();
- if (!peerStreams.isEmpty()) {
- for (Entry e : peerStreams.entrySet()) {
- String stream = e.getValue();
- String remote = e.getKey();
- if (stream != null) {
- subscribe(remote);
- }
- }
- log.debug("Finished subscribing to existing publishers");
- }
- }
- } catch (IOException e) {
- log.warn("Unable to join room '{}'", room, e);
- Assert.fail("Unable to join: " + e.getMessage());
- }
- }
-
- public void leaveRoom() {
- try {
- jsonRpcClient.leaveRoom();
- log.info("Left room '{}'", room);
- } catch (IOException e) {
- log.warn("Unable to leave room '{}'", room, e);
- Assert.fail("Unable to leave room: " + e.getMessage());
- }
- }
-
- public void publish() {
- try {
- String sdpOffer = createWebRtcForParticipant();
- String sdpAnswer = jsonRpcClient.publishVideo(sdpOffer, false);
- this.webRtc.processAnswer(sdpAnswer);
- this.webRtc.gatherCandidates();
- player.play();
- log.debug("Published media in room '{}'", room);
- log.trace("Published media in room '{}'- SDP OFFER:\n{}\nSDP ANSWER:\n{}", room, sdpOffer,
- sdpAnswer);
- } catch (IOException | URISyntaxException e) {
- log.warn("Unable to publish in room '{}'", room, e);
- Assert.fail("Unable to publish: " + e.getMessage());
- }
- }
-
- public void unpublish() {
- try {
- jsonRpcClient.unpublishVideo();
- log.debug("Unpublished media");
- } catch (IOException e) {
- log.warn("Unable to unpublish in room '{}'", room, e);
- Assert.fail("Unable to unpublish: " + e.getMessage());
- } finally {
- if (player != null) {
- player.stop();
- player.release();
- }
- if (webRtc != null) {
- webRtc.release();
- }
- ownLatch = null;
- }
- }
-
- public synchronized void subscribe(String remoteName) {
- try {
- if (peerEndpoints.containsKey(remoteName)) {
- log.warn("Already subscribed to {}", remoteName);
- return;
- }
- String sdpOffer = createWebRtcForPeer(remoteName);
- String sdpAnswer = jsonRpcClient.receiveVideoFrom(peerStreams.get(remoteName), sdpOffer);
- WebRtcEndpoint peer = peerEndpoints.get(remoteName);
- if (peer == null) {
- throw new Exception("Receiving endpoint not found for peer " + remoteName);
- }
- peer.processAnswer(sdpAnswer);
- peer.gatherCandidates();
- log.debug("Subscribed to '{}' in room '{}'", peerStreams.get(remoteName), room);
- log.trace("Subscribed to '{}' in room '{}' - SDP OFFER:\n{}\nSDP ANSWER:\n{}",
- peerStreams.get(remoteName), room, sdpOffer, sdpAnswer);
- } catch (Exception e) {
- log.warn("Unable to subscribe in room '{}' to '{}'", room, remoteName, e);
- Assert.fail("Unable to subscribe: " + e.getMessage());
- }
- }
-
- public synchronized void unsubscribe(String remoteName) {
- WebRtcEndpoint peer = null;
- try {
- peer = peerEndpoints.get(remoteName);
- if (peer == null) {
- log.warn("No local peer found for remote {}", remoteName);
- }
- jsonRpcClient.unsubscribeFromVideo(peerStreams.get(remoteName));
- log.debug("Unsubscribed from {}", peerStreams.get(remoteName));
- } catch (IOException e) {
- log.warn("Unable to unsubscribe in room '{}' from '{}'", room, remoteName, e);
- Assert.fail("Unable to unsubscribe: " + e.getMessage());
- } finally {
- if (peer != null) {
- peer.release();
- }
- peerEndpoints.remove(remoteName);
- peerLatches.remove(remoteName);
- }
- }
-
- public Set getPeers() {
- return peerStreams.keySet();
- }
-
- private String createWebRtcForParticipant() throws URISyntaxException {
-
- webRtc = new WebRtcEndpoint.Builder(pipeline).build();
- ownLatch = new CountDownLatch(1);
-
- webRtc.addOnIceCandidateListener(new EventListener() {
- @Override
- public void onEvent(OnIceCandidateEvent event) {
- try {
- log.debug("New ICE candidate: {}, {}, {}", event.getCandidate().getCandidate(),
- event.getCandidate().getSdpMid(), event.getCandidate().getSdpMLineIndex());
- jsonRpcClient.onIceCandidate(name, event.getCandidate().getCandidate(),
- event.getCandidate().getSdpMid(), event.getCandidate().getSdpMLineIndex());
- } catch (Exception e) {
- log.warn("Exception sending iceCanditate. Exception {}:{}", e.getClass().getName(),
- e.getMessage());
- }
- }
- });
-
- webRtc.addMediaStateChangedListener(new EventListener() {
- @Override
- public void onEvent(MediaStateChangedEvent event) {
- log.info("Media state changed: {}", event.getNewState());
- if (event.getNewState() == MediaState.CONNECTED) {
- ownLatch.countDown();
- }
- }
- });
-
- player = new PlayerEndpoint.Builder(pipeline, playerUri).build();
- player.addErrorListener(new EventListener() {
- @Override
- public void onEvent(ErrorEvent event) {
- log.warn("ErrorEvent for player of '{}': {}", name, event.getDescription());
- }
- });
- player.addEndOfStreamListener(new EventListener() {
- @Override
- public void onEvent(EndOfStreamEvent event) {
- if (loopMedia) {
- log.debug("Replaying {}", playerUri);
- player.play();
- } else {
- log.debug("Finished playing from {}", playerUri);
- }
- }
-
- });
- player.connect(webRtc);
- log.debug("Playing media from {}", playerUri);
- return webRtc.generateOffer();
- }
-
- private String createWebRtcForPeer(final String remoteName) throws Exception {
- if (peerEndpoints.containsKey(remoteName)) {
- throw new Exception("Already subscribed to " + remoteName);
- }
-
- WebRtcEndpoint peer = new WebRtcEndpoint.Builder(pipeline).build();
- final CountDownLatch peerLatch = new CountDownLatch(1);
-
- peer.addOnIceCandidateListener(new EventListener() {
- @Override
- public void onEvent(OnIceCandidateEvent event) {
- try {
- jsonRpcClient.onIceCandidate(remoteName, event.getCandidate().getCandidate(),
- event.getCandidate().getSdpMid(), event.getCandidate().getSdpMLineIndex());
- } catch (Exception e) {
- log.warn("Exception sending iceCanditate. Exception {}:{}", e.getClass().getName(),
- e.getMessage());
- }
- }
- });
-
- peer.addMediaStateChangedListener(new EventListener() {
- @Override
- public void onEvent(MediaStateChangedEvent event) {
- log.info("{}: Media state changed for remote {}: {}", name, remoteName,
- event.getNewState());
- if (event.getNewState() == MediaState.CONNECTED) {
- peerLatch.countDown();
- }
- }
- });
-
- peerEndpoints.put(remoteName, peer);
- peerLatches.put(remoteName, peerLatch);
-
- return peer.generateOffer();
- }
-
- @Override
- public void close() {
- log.debug("Closing {}", name);
- try {
- if (jsonRpcClient != null) {
- jsonRpcClient.close();
- }
- } catch (Exception e) {
- log.error("Exception closing jsonRpcClient", e);
- }
- notifThread.interrupt();
- }
-
- public void waitForActiveLive(CountDownLatch waitForLatch) {
- try {
- boolean allPeersConnected = true;
- for (WebRtcEndpoint peer : peerEndpoints.values()) {
- if (peer.getMediaState() != MediaState.CONNECTED) {
- allPeersConnected = false;
- }
- }
-
- boolean ownConnected = webRtc.getMediaState() == MediaState.CONNECTED;
-
- if (ownConnected && allPeersConnected) {
- return;
- }
-
- long remaining = WAIT_ACTIVE_LIVE_BY_PEER_TIMEOUT * (peerEndpoints.size() + 1);
- log.debug("{}: Start waiting for ACTIVE_LIVE in session '{}' - max {}s", name, room,
- remaining);
- remaining = remaining * 1000L;
-
- if (!ownConnected) {
- remaining = waitForLatch(remaining, ownLatch, name);
- }
-
- if (!allPeersConnected) {
- for (Entry e : peerEndpoints.entrySet()) {
- String remoteName = e.getKey();
- if (e.getValue().getMediaState() != MediaState.CONNECTED) {
- remaining = waitForLatch(remaining, peerLatches.get(remoteName), remoteName);
- }
- }
- }
- } catch (Exception e) {
- log.warn("{}: WaitForActiveLive error", name, e);
- throw e;
- } finally {
- waitForLatch.countDown();
- }
- }
-
- private long waitForLatch(long remaining, CountDownLatch latch, String epname) {
- long start = System.currentTimeMillis();
- try {
- if (!latch.await(remaining, TimeUnit.MILLISECONDS)) {
- throw new RuntimeException("Timeout waiting for ACTIVE_LIVE in participant '" + name
- + "' of session '" + room + "' for endpoint '" + epname + "'");
- }
- remaining -= System.currentTimeMillis() - start;
- log.trace("ACTIVE_LIVE - remaining {} ms", remaining);
- } catch (InterruptedException e) {
- log.warn("InterruptedException when waiting for ACTIVE_LIVE in participant '{}' "
- + "of session '{}' for endpoint '{}'", name, room, epname);
- }
- return remaining;
- }
-
- private void addPeers(Map> newPeers) {
- for (String name : newPeers.keySet()) {
- addPeerStream(name, newPeers.get(name));
- }
- }
-
- private synchronized void addPeerStream(String name, List streams) {
- if (streams == null || streams.isEmpty()) {
- log.warn("Wrong streams info for {}: {}", name, streams);
- return;
- }
- if (this.peerStreams.containsKey(name)) {
- log.warn("Overriding peer {}: {} - new: {}", name, this.peerStreams.get(name), streams);
- }
- this.peerStreams.put(name, name + "_" + streams.get(0));
- log.debug("Added first remote stream for {}: {}", name, this.peerStreams.get(name));
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/util/FakeSession.java b/openvidu-test/src/main/java/io/openvidu/test/fake/util/FakeSession.java
deleted file mode 100644
index caeea6dd..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/util/FakeSession.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake.util;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CountDownLatch;
-
-import org.kurento.client.KurentoClient;
-import org.kurento.client.MediaPipeline;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Stores the fake WebRTC participants for a session (room). Each participant will have assigned a
- * shared {@link MediaPipeline} which it can use to create media elements and interact with the
- * session. More than one pipelines are allowed for each session.
- *
- * @author Radu Tom Vlad
- */
-public class FakeSession implements Closeable {
- private static Logger log = LoggerFactory.getLogger(FakeSession.class);
-
- private String serviceUrl;
- private String room;
- private KurentoClient defaultKurento;
-
- private Map pipelines = new ConcurrentHashMap();
-
- private Map participants = new HashMap();
-
- public FakeSession(String serviceUrl, String room, KurentoClient kurento) {
- this.serviceUrl = serviceUrl;
- this.room = room;
- this.defaultKurento = kurento;
- this.pipelines.put(kurento, new TestPipeline(kurento, room));
- }
-
- @Override
- public void close() throws IOException {
- log.debug("Closing Session '{}'", room);
- for (FakeParticipant p : participants.values()) {
- p.close();
- }
- for (TestPipeline pipeline : this.pipelines.values()) {
- pipeline.closePipeline();
- }
- }
-
- public void newParticipant(String name, String playerUri, boolean autoMedia, boolean loopMedia) {
- newParticipant(name, playerUri, autoMedia, loopMedia, defaultKurento);
- }
-
- public void newParticipant(String name, String playerUri, boolean autoMedia, boolean loopMedia,
- KurentoClient kurento) {
- TestPipeline pipeline = getOrCreatePipeline(kurento);
- pipeline.createPipeline();
- FakeParticipant participant = new FakeParticipant(serviceUrl, name, room, playerUri,
- pipeline.getPipeline(), autoMedia, loopMedia);
- participants.put(name, participant);
- participant.joinRoom();
- }
-
- public FakeParticipant getParticipant(String name) {
- return participants.get(name);
- }
-
- public void waitForActiveLive(CountDownLatch waitForLatch) {
- for (FakeParticipant p : participants.values()) {
- p.waitForActiveLive(waitForLatch);
- }
- }
-
- private TestPipeline getOrCreatePipeline(KurentoClient kurento) {
- TestPipeline pipeline = this.pipelines.get(kurento);
- if (pipeline == null) {
- String desc = kurento.getServerManager().getId();
- pipeline = this.pipelines.putIfAbsent(kurento, new TestPipeline(kurento, room, desc));
- if (pipeline != null) {
- log.debug("Pipeline already created for room '{}' and kurento '{}'", room, desc);
- }
- pipeline = this.pipelines.get(kurento);
- }
- return pipeline;
- }
-}
diff --git a/openvidu-test/src/main/java/io/openvidu/test/fake/util/TestPipeline.java b/openvidu-test/src/main/java/io/openvidu/test/fake/util/TestPipeline.java
deleted file mode 100644
index fda6739d..00000000
--- a/openvidu-test/src/main/java/io/openvidu/test/fake/util/TestPipeline.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.openvidu.test.fake.util;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.kurento.client.ErrorEvent;
-import org.kurento.client.EventListener;
-import org.kurento.client.KurentoClient;
-import org.kurento.client.MediaPipeline;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Wraps a pipeline used to execute fake participants in a test session (room).
- *
- * @author Radu Tom Vlad
- */
-public class TestPipeline {
- private static Logger log = LoggerFactory.getLogger(TestPipeline.class);
-
- private KurentoClient kurento;
- private MediaPipeline pipeline;
- private CountDownLatch pipelineLatch = new CountDownLatch(1);
- private Object pipelineCreateLock = new Object();
- private Object pipelineReleaseLock = new Object();
- private volatile boolean pipelineReleased = false;
- private String description = "default";
- private String room = "room";
-
- public TestPipeline(KurentoClient kurento, String room, String pipeDescription) {
- this.kurento = kurento;
- if (room != null) {
- this.room = room;
- }
- if (pipeDescription != null) {
- this.description = pipeDescription;
- }
- }
-
- public TestPipeline(KurentoClient kurento, String room) {
- this(kurento, room, null);
- }
-
- public MediaPipeline getPipeline() {
- try {
- pipelineLatch.await(60, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- return this.pipeline;
- }
-
- public void createPipeline() {
- synchronized (pipelineCreateLock) {
- if (pipeline != null) {
- return;
- }
- log.info("Session '{}': Creating MediaPipeline-{}", room, description);
- try {
- pipeline = kurento.createMediaPipeline();
- pipelineLatch.countDown();
- log.debug("Session '{}': Created MediaPipeline-{}", room, description);
- } catch (Exception e) {
- log.error("Unable to create MediaPipeline-{} for Session '{}'", description, room, e);
- pipelineLatch.countDown();
- }
- if (getPipeline() == null) {
- throw new RuntimeException(
- "Unable to create MediaPipeline-" + description + " for session '" + room + "'");
- }
-
- pipeline.addErrorListener(new EventListener() {
- @Override
- public void onEvent(ErrorEvent event) {
- String desc = event.getType() + ": " + event.getDescription() + "(errCode="
- + event.getErrorCode() + ")";
- log.warn("Session '{}': Pipeline error encountered for MediaPipeline-{}: {}", room,
- description, desc);
- }
- });
- }
- }
-
- public void closePipeline() {
- synchronized (pipelineReleaseLock) {
- if (pipeline == null || pipelineReleased) {
- return;
- }
- getPipeline().release();
- }
- }
-}
diff --git a/pom.xml b/pom.xml
index 2b82f3c2..4de8bf8b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,6 @@
2.12.1
1.1.0
- 1.1.0
1.1.0
3.0.0-M3
@@ -219,7 +218,6 @@
openvidu-server
openvidu-client
- openvidu-test
openvidu-test-e2e
openvidu-test-browsers
openvidu-java-client
@@ -288,10 +286,6 @@
io.openvidu
openvidu-client
-
- io.openvidu
- openvidu-test
-
io.openvidu
openvidu-test-e2e