/* * Copyright 2012 Steven Swor. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cameljamod.net; import cameljamod.net.TCPMasterConnectionWrapper; import cameljamod.test.TestUtilities; import java.net.InetAddress; import net.wimpi.modbus.Modbus; import net.wimpi.modbus.io.ModbusTCPTransaction; import net.wimpi.modbus.io.ModbusTCPTransport; import net.wimpi.modbus.io.ModbusTransaction; import net.wimpi.modbus.io.ModbusTransport; import net.wimpi.modbus.net.ModbusTCPListener; import net.wimpi.modbus.net.TCPMasterConnection; import org.junit.AfterClass; import static org.junit.Assert.*; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mockito; import static org.mockito.Mockito.*; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; /** * Unit tests for {@link TCPMasterConnectionWrapper}. * * @author Steven Swor */ public class TCPMasterConnectionWrapperTest { /** * The Modbus listener. */ private static ModbusTCPListener listener = null; /** * The modbus port. */ private static int port = Modbus.DEFAULT_PORT; public TCPMasterConnectionWrapperTest() { } /** * Sets up the Modbus listener. * * @throws Exception if the listener cannot be set up */ @BeforeClass public static void setUpClass() throws Exception { listener = new ModbusTCPListener(1, InetAddress.getLocalHost()); port = Integer.parseInt(TestUtilities.getTestProperty("tcp.port", String.valueOf(Modbus.DEFAULT_PORT))); listener.setPort(port); listener.start(); } /** * Stops the modbus listener. * * @throws Exception if the listener cannot be stopped */ @AfterClass public static void tearDownClass() throws Exception { listener.stop(); listener = null; } /** * Tests {@link TCPMasterConnection#connect()} and {@link TCPMasterConnection#close()}. */ @Test public void testConnectAndClose() throws Exception { final TCPMasterConnection mockConnection = mock(TCPMasterConnection.class); doAnswer(new Answer() { public Object answer(InvocationOnMock invocation) throws Throwable { Mockito.when(mockConnection.isConnected()).thenReturn(Boolean.TRUE); return null; } }).when(mockConnection).connect(); doAnswer(new Answer(){ public Object answer(InvocationOnMock invocation) throws Throwable { Mockito.when(mockConnection.isConnected()).thenReturn(Boolean.FALSE); return null; } }).when(mockConnection).close(); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(mockConnection); assertFalse(instance.isConnected()); instance.connect(); assertTrue(instance.isConnected()); instance.close(); assertFalse(instance.isConnected()); } @Test public void testIsConnected() { TCPMasterConnection mockConnection = mock(TCPMasterConnection.class); when(mockConnection.isConnected()).thenReturn(Boolean.TRUE, Boolean.FALSE); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(mockConnection); assertTrue(instance.isConnected()); assertFalse(instance.isConnected()); } @Test public void testGetAddressAndSetAddress() throws Exception { TCPMasterConnection conn = new TCPMasterConnection(null); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(conn); assertNull(instance.getAddress()); instance.setAddress(InetAddress.getLocalHost()); assertEquals(InetAddress.getLocalHost(), instance.getAddress()); } @Test public void testCreateTransaction() throws Exception { TCPMasterConnection conn = new TCPMasterConnection(null); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(conn); ModbusTransaction transaction = instance.createTransaction(); assertNotNull(transaction); assertTrue(transaction instanceof ModbusTCPTransaction); } @Test public void testGetModbusTransport() { TCPMasterConnection conn = new TCPMasterConnection(null); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(conn); ModbusTransport transport = instance.getModbusTransport(); /* * TODO jamod's API will return null until a successful connection is * established, so eventually we need to run a simulator during the test * phase so we can test this properly. */ assertNull(transport); } @Test public void testGetPort() { TCPMasterConnection conn = new TCPMasterConnection(null); conn.setPort(1234); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(conn); assertEquals(1234, instance.getPort()); } @Test public void testGetTimeout() { TCPMasterConnection conn = new TCPMasterConnection(null); conn.setTimeout(5678); TCPMasterConnectionWrapper instance = new TCPMasterConnectionWrapper(conn); assertEquals(5678, instance.getTimeout()); } }