Package org.ngrinder

Source Code of org.ngrinder.AbstractMultiGrinderTestBase$AgentShutDownSynchronizeListener

/*
* 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.ngrinder;

import java.io.IOException;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import net.grinder.AgentDaemon.AgentShutDownListener;
import net.grinder.common.processidentity.AgentIdentity;
import net.grinder.util.thread.Condition;

import org.hyperic.jni.ArchLoaderException;
import org.hyperic.jni.ArchNotSupportedException;
import org.junit.Before;
import org.junit.BeforeClass;
import org.ngrinder.common.util.ThreadUtils;
import org.ngrinder.infra.AgentConfig;
import org.ngrinder.infra.ArchLoaderInit;

abstract public class AbstractMultiGrinderTestBase {
  public AgentConfig.NullAgentConfig agentConfig1;
  public AgentConfig.NullAgentConfig agentConfig2;
  public AgentConfig.NullAgentConfig agentConfig3;


  @Before
  public void agentInit() throws ArchNotSupportedException, ArchLoaderException {
    agentConfig1 = new AgentConfig.NullAgentConfig(1);
    agentConfig1.init();
    ArchLoaderInit archLoaderInit = new ArchLoaderInit();
    archLoaderInit.init(agentConfig1.getHome().getNativeDirectory());
    agentConfig2 = new AgentConfig.NullAgentConfig(1);
    agentConfig2.init();
    archLoaderInit.init(agentConfig2.getHome().getNativeDirectory());
    agentConfig3 = new AgentConfig.NullAgentConfig(1);
    agentConfig3.init();
    archLoaderInit.init(agentConfig3.getHome().getNativeDirectory());
  }

  /**
   * Sleep quietly
   *
   * @param millisecond
   */
  public void sleep(long millisecond) {
    ThreadUtils.sleep(millisecond);
  }

  protected AgentIdentity getAgentIdentity(Set<AgentIdentity> agentSet, int index) {
    AgentIdentity agentIdentity = null;
    Iterator<AgentIdentity> iterator = agentSet.iterator();
    for (int i = 0; i <= index; i++) {
      agentIdentity = iterator.next();
    }
    return agentIdentity;
  }

  /**
   * Waiting condition
   */
  public Condition condition = new Condition();

  public final class AgentShutDownSynchronizeListener implements AgentShutDownListener {

    private final Condition condition;

    public AgentShutDownSynchronizeListener(Condition condition) {
      this.condition = condition;

    }

    public void shutdownAgent() {
      synchronized (condition) {
        condition.notifyAll();
      }
    }
  }

  public void waitOnCondition(Condition condition, int timeout) {
    synchronized (condition) {
      condition.waitNoInterrruptException(2100);
    }
  }

  /**
   * Returns a free port numbers on localhost, or less than give count entries if unable to find a
   * free port.
   *
   * @return a free port number on localhost, or less than give count entries if unable to find a
   *         free port
   */
  public List<Integer> getFreePorts(int count) {
    List<Integer> ports = new ArrayList<Integer>();
    for (int i = 0; i < count; i++) {
      ports.add(getFreePort());
    }
    return ports;
  }

  /**
   * Returns a free port number on localhost, or -1 if unable to find a free port.
   *
   * @return a free port number on localhost, or -1 if unable to find a free port
   */
  public int getFreePort() {
    ServerSocket socket = null;
    try {
      socket = new ServerSocket(0);
      return socket.getLocalPort();
    } catch (IOException e) {
    } finally {
      if (socket != null) {
        try {
          socket.close();
        } catch (IOException e) {
        }
      }
    }
    return -1;
  }

}
TOP

Related Classes of org.ngrinder.AbstractMultiGrinderTestBase$AgentShutDownSynchronizeListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.