1 package org.testng.remote; 2 3 import java.util.List; 4 import java.util.Properties; 5 6 import org.testng.ISuite; 7 import org.testng.TestNG; 8 import org.testng.TestNGException; 9 import org.testng.collections.Lists; 10 import org.testng.internal.PropertiesFile; 11 import org.testng.internal.Utils; 12 import org.testng.remote.adapter.DefaultWorkerAdapter; 13 import org.testng.remote.adapter.IWorkerAdapter; 14 import org.testng.xml.XmlSuite; 15 16 /** 17 * Run test suits sent by the dispatcher. 18 * 19 * 20 * @author Guy Korland 21 * @since April 20, 2007 22 */ 23 public class SuiteSlave 24 { 25 26 /** 27 * Properties allowed in remote.properties 28 */ 29 public static final String VERBOSE = "testng.verbose"; 30 public static final String SLAVE_ADPATER = "testng.slave.adpter"; 31 32 33 final private int m_verbose; 34 final private IWorkerAdapter m_slaveAdpter; 35 final private TestNG m_testng; 36 37 /** 38 * Creates a new suite dispatcher. 39 */ SuiteSlave( String propertiesFile, TestNG testng)40 public SuiteSlave( String propertiesFile, TestNG testng) throws TestNGException 41 { 42 try 43 { 44 m_testng = testng; 45 46 PropertiesFile file = new PropertiesFile( propertiesFile); 47 Properties properties = file.getProperties(); 48 49 m_verbose = Integer.parseInt( properties.getProperty(VERBOSE, "1")); 50 51 String adapter = properties.getProperty(SLAVE_ADPATER); 52 if( adapter == null) 53 { 54 m_slaveAdpter = new DefaultWorkerAdapter(); 55 } 56 else 57 { 58 Class clazz = Class.forName(adapter); 59 m_slaveAdpter = (IWorkerAdapter)clazz.newInstance(); 60 } 61 m_slaveAdpter.init(properties); 62 } 63 catch( Exception e) 64 { 65 throw new TestNGException( "Fail to initialize slave mode", e); 66 } 67 } 68 69 /** 70 * Invoked in client mode. In this case, wait for a connection 71 * on the given port, run the XmlSuite we received and return the SuiteRunner 72 * created to run it. 73 */ waitForSuites()74 public void waitForSuites() { 75 try { 76 while (true) { 77 //TODO set timeout 78 XmlSuite s = m_slaveAdpter.getSuite(Long.MAX_VALUE); 79 if( s== null) { 80 continue; 81 } 82 log("Processing " + s.getName()); 83 List<XmlSuite> suites = Lists.newArrayList(); 84 suites.add(s); 85 m_testng.setXmlSuites(suites); 86 List<ISuite> suiteRunners = m_testng.runSuitesLocally(); 87 ISuite sr = suiteRunners.get(0); 88 log("Done processing " + s.getName()); 89 m_slaveAdpter.returnResult(sr); 90 } 91 } 92 catch(Exception ex) { 93 ex.printStackTrace(System.out); 94 } 95 } 96 log(String string)97 private static void log(String string) { 98 Utils.log("", 2, string); 99 } 100 101 } 102