Package org.testng.remote

Source Code of org.testng.remote.SuiteSlave

package org.testng.remote;

import org.testng.ISuite;
import org.testng.TestNG;
import org.testng.TestNGException;
import org.testng.collections.Lists;
import org.testng.internal.PropertiesFile;
import org.testng.internal.Utils;
import org.testng.remote.adapter.DefaultWorkerAdapter;
import org.testng.remote.adapter.IWorkerApadter;
import org.testng.xml.XmlSuite;

import java.io.IOException;
import java.util.List;
import java.util.Properties;

/**
* Run test suits sent by the dispatcher.
*
* @author  Guy Korland
* @date   April 20, 2007
*/
public class SuiteSlave
{

  /**
   * Properties allowed in remote.properties
   */
  public static final String VERBOSE = "testng.verbose";
  public static final String SLAVE_ADPATER = "testng.slave.adpter";


  final private int m_verbose;
  final private IWorkerApadter m_slaveAdpter;
  final private TestNG m_testng;

  /**
   * Creates a new suite dispatcher.
   *
   * @param propertiesFile
   * @throws Exception
   */
  public SuiteSlave( String propertiesFile, TestNG testng) throws TestNGException
  {
    try
    {
      m_testng = testng;

      PropertiesFile file = new PropertiesFile( propertiesFile);
      Properties properties = file.getProperties();

      m_verbose = Integer.parseInt( properties.getProperty(VERBOSE, "1"));

      String adapter = properties.getProperty(SLAVE_ADPATER);
      if( adapter == null)
      {
        m_slaveAdpter = new DefaultWorkerAdapter();
      }
      else
      {
        Class clazz = Class.forName(adapter);
        m_slaveAdpter = (IWorkerApadter)clazz.newInstance();
      }
      m_slaveAdpter.init(properties);
    }
    catch( Exception e)
    {
      throw new TestNGException( "Fail to initialize slave mode", e);
    }
  }

  /**
   * Invoked in client mode.  In this case, wait for a connection
   * on the given port, run the XmlSuite we received and return the SuiteRunner
   * created to run it.
   * @throws IOException
   */
  public void waitForSuites() {
    try {
      while (true) {
        //TODO set timeout
        XmlSuite s = m_slaveAdpter.getSuite(Long.MAX_VALUE);
        if( s== null)
          continue;
        log("Processing " + s.getName());
        List<XmlSuite> suites = Lists.newArrayList();
        suites.add(s);
        m_testng.setXmlSuites(suites);
        List<ISuite> suiteRunners = m_testng.runSuitesLocally();
        ISuite sr = suiteRunners.get(0);
        log("Done processing " + s.getName());
        m_slaveAdpter.returnResult(sr);
      }
    }
    catch(Exception ex) {
      ex.printStackTrace(System.out);
    }
  }

  private static void log(String string) {
    Utils.log("", 2, string);
  }

}
TOP

Related Classes of org.testng.remote.SuiteSlave

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.