Home | History | Annotate | Download | only in remote
      1 package test.remote;
      2 
      3 import org.testng.Assert;
      4 import org.testng.annotations.Test;
      5 import org.testng.collections.Lists;
      6 import org.testng.remote.RemoteTestNG;
      7 import org.testng.remote.strprotocol.IMessage;
      8 import org.testng.remote.strprotocol.IMessageSender;
      9 import org.testng.remote.strprotocol.MessageHub;
     10 import org.testng.remote.strprotocol.SerializedMessageSender;
     11 import org.testng.remote.strprotocol.StringMessageSender;
     12 
     13 import test.SimpleBaseTest;
     14 
     15 import java.net.SocketTimeoutException;
     16 import java.util.ArrayList;
     17 import java.util.List;
     18 
     19 /**
     20  * A simple client that launches RemoteTestNG and then talks to it via the
     21  * two supported protocols, String and Serialized.
     22  *
     23  * @author Cedric Beust <cedric (at) beust.com>
     24  */
     25 public class RemoteTest extends SimpleBaseTest {
     26   // Note: don't use the ports used by the plug-in or the RemoteTestNG processes
     27   // launched in this test will interfere with the plug-in.
     28   private static final int PORT1 = 1243;
     29   private static final int PORT2 = 1242;
     30   private static final List<String> EXPECTED_MESSAGES = new ArrayList<String>() {{
     31     add("GenericMessage"); // method and test counts
     32     add("SuiteMessage");  // suite started
     33     add("TestMessage");  // test started
     34     add("TestResultMessage"); // status: started
     35     add("TestResultMessage"); // status: success
     36     add("TestResultMessage"); // status: started
     37     add("TestResultMessage"); // status: success
     38     add("TestMessage"); // test finished
     39     add("SuiteMessage"); // suite finished
     40   }};
     41 
     42   @Test
     43   public void testSerialized() {
     44     runTest("-serport", PORT1, new SerializedMessageSender("localhost", PORT1));
     45   }
     46 
     47   @Test
     48   public void testString() {
     49     runTest("-port", PORT2, new StringMessageSender("localhost", PORT2));
     50   }
     51 
     52   private void launchRemoteTestNG(final String portArg, final int portValue) {
     53     new Thread(new Runnable() {
     54       @Override
     55       public void run() {
     56         RemoteTestNG.main(new String[] {
     57             portArg, Integer.toString(portValue), "-dontexit",
     58             getPathToResource("testng-remote.xml")
     59           });
     60         }
     61       }).start();
     62   }
     63 
     64   private void runTest(String arg, int portValue, IMessageSender sms) {
     65     p("Launching RemoteTestNG on port " + portValue);
     66     launchRemoteTestNG(arg, portValue);
     67     MessageHub mh = new MessageHub(sms);
     68     List<String> received = Lists.newArrayList();
     69     try {
     70       mh.initReceiver();
     71       IMessage message = mh.receiveMessage();
     72       while (message != null) {
     73         received.add(message.getClass().getSimpleName());
     74         message = mh.receiveMessage();
     75       }
     76 
     77       Assert.assertEquals(received, EXPECTED_MESSAGES);
     78     }
     79     catch(SocketTimeoutException ex) {
     80       Assert.fail("Time out");
     81     }
     82   }
     83 
     84   private static void p(String s) {
     85     if (false) {
     86       System.out.println("[RemoteTest] " + s);
     87     }
     88   }
     89 }
     90