/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package uk.ac.imperial.lsds.seep.infrastructure.monitor.slave; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import org.apache.commons.lang3.mutable.MutableBoolean; import org.junit.After; import org.junit.AfterClass; import static org.junit.Assert.*; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.mockito.Mockito.*; import static org.hamcrest.Matchers.equalTo; /** * * @author mrouaux */ public class MonitorSlaveTest { public MonitorSlaveTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } @Test public void testSlaveConnectToMaster() throws IOException, InterruptedException { System.out.println("testSlaveConnectToMaster"); final int operatorId = 1; final int masterPort = 64000; final MutableBoolean connected = new MutableBoolean(false); MonitorSlave slave = spy(new MonitorSlave(operatorId, "localhost", masterPort, 1)); MonitorSlaveProcessor mockProcessor = mock(MonitorSlaveProcessor.class); doReturn(mockProcessor).when(slave) .createSlaveProcessor(any(OutputStream.class)); doNothing().when(mockProcessor).process(); // Start a mock server (in a different thread) new Thread(new Runnable() { @Override public void run() { try { ServerSocket mockServer = new ServerSocket(masterPort); Socket slaveSocket = mockServer.accept(); System.out.println("Accepted connection from " + slaveSocket.getRemoteSocketAddress().toString()); connected.setValue(true); } catch (IOException ex) { fail("Unexpected exception while waiting for slave to connect"); } } }).start(); new Thread(slave).start(); Thread.sleep(1500); slave.stop(); verify(mockProcessor, atLeast(1)).process(); assertThat("Slave should have connecetd to master",connected.getValue(), equalTo(true)); } }