| package test.remote; |
| |
| import org.testng.Assert; |
| import org.testng.annotations.Test; |
| import org.testng.collections.Lists; |
| import org.testng.remote.RemoteTestNG; |
| import org.testng.remote.strprotocol.IMessage; |
| import org.testng.remote.strprotocol.IMessageSender; |
| import org.testng.remote.strprotocol.MessageHub; |
| import org.testng.remote.strprotocol.SerializedMessageSender; |
| import org.testng.remote.strprotocol.StringMessageSender; |
| |
| import test.SimpleBaseTest; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * A simple client that launches RemoteTestNG and then talks to it via the |
| * two supported protocols, String and Serialized. |
| * |
| * @author Cedric Beust <cedric@beust.com> |
| */ |
| public class RemoteTest extends SimpleBaseTest { |
| // Note: don't use the ports used by the plug-in or the RemoteTestNG processes |
| // launched in this test will interfere with the plug-in. |
| private static final int PORT1 = 1243; |
| private static final int PORT2 = 1242; |
| private static final List<String> EXPECTED_MESSAGES = new ArrayList<String>() {{ |
| add("GenericMessage"); // method and test counts |
| add("SuiteMessage"); // suite started |
| add("TestMessage"); // test started |
| add("TestResultMessage"); // status: started |
| add("TestResultMessage"); // status: succes/ |
| add("TestResultMessage"); // status: started |
| add("TestResultMessage"); // status: success |
| add("TestMessage"); // test finished |
| add("SuiteMessage"); // suite finished |
| }}; |
| |
| @Test |
| public void testSerialized() { |
| runTest("-serport", PORT1, new SerializedMessageSender("localhost", PORT1)); |
| } |
| |
| @Test |
| public void testString() { |
| runTest("-port", PORT2, new StringMessageSender("localhost", PORT2)); |
| } |
| |
| private void launchRemoteTestNG(final String portArg, final int portValue) { |
| new Thread(new Runnable() { |
| @Override |
| public void run() { |
| RemoteTestNG.main(new String[] { |
| portArg, Integer.toString(portValue), "-dontexit", |
| getPathToResource("testng-remote.xml") |
| }); |
| } |
| }).start(); |
| } |
| |
| private void runTest(String arg, int portValue, IMessageSender sms) { |
| p("Launching RemoteTestNG on port " + portValue); |
| launchRemoteTestNG(arg, portValue); |
| MessageHub mh = new MessageHub(sms); |
| List<String> received = Lists.newArrayList(); |
| mh.initReceiver(); |
| IMessage message = mh.receiveMessage(); |
| while (message != null) { |
| received.add(message.getClass().getSimpleName()); |
| message = mh.receiveMessage(); |
| } |
| |
| Assert.assertEquals(received, EXPECTED_MESSAGES); |
| } |
| |
| private static void p(String s) { |
| if (false) { |
| System.out.println("[RemoteTest] " + s); |
| } |
| } |
| } |