All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kurento.test.grid.ParallelBrowsers Maven / Gradle / Ivy

Go to download

This project contains test cases for testing Kurento Java Client and Kurento Media Server.

There is a newer version: 6.18.0
Show newest version
/*
 * (C) Copyright 2015 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.
 *
 */

package org.kurento.test.grid;

import static org.kurento.commons.PropertiesManager.getProperty;
import static org.kurento.test.config.TestConfiguration.CLIENT_RATE_DEFAULT;
import static org.kurento.test.config.TestConfiguration.CLIENT_RATE_PROPERTY;
import static org.kurento.test.config.TestConfiguration.HOLD_TIME_DEFAULT;
import static org.kurento.test.config.TestConfiguration.HOLD_TIME_PROPERTY;

import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
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.kurento.test.browser.Browser;
import org.kurento.test.browser.BrowserRunner;
import org.kurento.test.monitor.SystemMonitorManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Utility for launch browsers in parallel.
 *
 * @author Boni Garcia ([email protected])
 * @since 5.1.1
 */
public class ParallelBrowsers {

  public static Logger log = LoggerFactory.getLogger(ParallelBrowsers.class);

  private static int clientRate = getProperty(CLIENT_RATE_PROPERTY, CLIENT_RATE_DEFAULT);

  private static int holdTime = getProperty(HOLD_TIME_PROPERTY, HOLD_TIME_DEFAULT);

  public static void ramp(final Map browserClientMap,
      final SystemMonitorManager monitor, final BrowserRunner browserRunner) {
    ExecutorService internalExec = Executors.newFixedThreadPool(browserClientMap.size());
    CompletionService exec = new ExecutorCompletionService<>(internalExec);

    int numBrowser = 0;
    for (final String key : browserClientMap.keySet()) {
      final int numBrowserFinal = numBrowser;
      exec.submit(new Callable() {
        @Override
        public Void call() throws Exception {
          try {
            Thread.currentThread().setName(key);
            Thread.sleep(clientRate * numBrowserFinal);
            log.debug("*** Starting node {} ***", key);
            if (monitor != null) {
              monitor.incrementNumClients();
            }
            Browser browser = browserClientMap.get(key);
            browserRunner.run(browser);
          } finally {
            if (monitor != null) {
              monitor.decrementNumClients();
            }
            log.debug("--- Ending client {} ---", key);
          }
          return null;
        }
      });
      numBrowser++;
    }

    for (final String key : browserClientMap.keySet()) {
      Future taskFuture = null;
      try {
        taskFuture = exec.take();
        taskFuture.get(browserClientMap.get(key).getTimeout(), TimeUnit.SECONDS);
      } catch (Throwable e) {
        log.error("$$$ {} $$$", e.getCause().getMessage());
        e.printStackTrace();
        if (taskFuture != null) {
          taskFuture.cancel(true);
        }
      } finally {
        log.debug("+++ Ending browser #{} +++", key);
      }
    }
  }

  public static int getRampPlaytime(int numClients) {
    return numClients * clientRate + holdTime;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy