def testUdpClientProtocolExecute(self): ''' Test the udp client protocol execute method ''' protocol = ModbusUdpClientProtocol() protocol.transport = Mock() protocol.transport.write = Mock() request = ReadCoilsRequest(1, 1) d = protocol.execute(request) tid = request.transaction_id self.assertEqual(d, protocol.transaction.getTransaction(tid))
def testBaseClientExecute(self, mock_iostream, mock_ioloop): """ Test the BaseTornado client execute method """ client = AsyncModbusTCPClient(port=5020) client.connect() client.stream = Mock() client.stream.write = Mock() request = ReadCoilsRequest(1, 1) d = client.execute(request) tid = request.transaction_id self.assertEqual(d, client.transaction.getTransaction(tid))
def testClientProtocolExecute(self): ''' Test the client protocol execute method ''' framer = ModbusSocketFramer(None) protocol = ModbusClientProtocol(framer=framer) protocol.connectionMade() protocol.transport = Mock() protocol.transport.write = Mock() request = ReadCoilsRequest(1, 1) d = protocol.execute(request) tid = request.transaction_id self.assertEqual(d, protocol.transaction.getTransaction(tid))
def testClientProtocolExecute(self, protocol): ''' Test the client protocol execute method ''' framer = ModbusSocketFramer(None) protocol = protocol(framer=framer) transport = mock.MagicMock() protocol.connection_made(transport) protocol.transport.write = mock.Mock() request = ReadCoilsRequest(1, 1) d = protocol.execute(request) tid = request.transaction_id assert d == protocol.transaction.getTransaction(tid)
def testSerialClientExecute(self, mock_serial, mock_seriostream, mock_ioloop): """ Test the tornado serial client client execute method """ client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP, framer=ModbusRtuFramer( ClientDecoder()), port=SERIAL_PORT) client.connect() client.stream = Mock() client.stream.write = Mock() request = ReadCoilsRequest(1, 1) d = client.execute(request) tid = request.transaction_id self.assertEqual(d, client.transaction.getTransaction(tid))
def testUdpClientProtocolHandleResponse(self): ''' Test the udp client protocol handles responses ''' protocol = ModbusUdpClientProtocol() out = [] reply = ReadCoilsRequest(1, 1) reply.transaction_id = 0x00 # handle skipped cases protocol._handleResponse(None) protocol._handleResponse(reply) # handle existing cases d = protocol._buildResponse(0x00) d.addCallback(lambda v: out.append(v)) protocol._handleResponse(reply) self.assertEqual(out[0], reply)
def testBaseClientHandleResponse(self, mock_iostream, mock_ioloop): """ Test the BaseTornado client handles responses """ client = AsyncModbusTCPClient(port=5020) client.connect() out = [] reply = ReadCoilsRequest(1, 1) reply.transaction_id = 0x00 # handle skipped cases client._handle_response(None) client._handle_response(reply) # handle existing cases d = client._build_response(0x00) d.add_done_callback(lambda v: out.append(v)) client._handle_response(reply) self.assertEqual(out[0].result(), reply)
def testClientProtocolHandleResponse(self, protocol): ''' Test the client protocol handles responses ''' protocol = protocol() transport = mock.MagicMock() protocol.connection_made(transport=transport) reply = ReadCoilsRequest(1, 1) reply.transaction_id = 0x00 # handle skipped cases protocol._handleResponse(None) protocol._handleResponse(reply) # handle existing cases d = protocol._buildResponse(0x00) protocol._handleResponse(reply) result = d.result() assert result == reply
async def testClientProtocolExecute(self, protocol): ''' Test the client protocol execute method ''' import asyncio framer = ModbusSocketFramer(None) protocol = protocol(framer=framer) protocol.create_future = mock.MagicMock() fut = asyncio.Future() fut.set_result(fut) protocol.create_future.return_value = fut transport = mock.MagicMock() protocol.connection_made(transport) protocol.transport.write = mock.Mock() request = ReadCoilsRequest(1, 1) d = await protocol.execute(request) tid = request.transaction_id f = protocol.transaction.getTransaction(tid) assert d == f
def testClientProtocolConnectionLost(self, protocol): ''' Test the client protocol connection lost''' framer = ModbusSocketFramer(None) protocol = protocol(framer=framer) transport = mock.MagicMock() factory = mock.MagicMock() if isinstance(protocol, ModbusUdpClientProtocol): protocol.factory = factory protocol.connection_made(transport) protocol.transport.write = mock.Mock() request = ReadCoilsRequest(1, 1) d = protocol.execute(request) protocol.connection_lost("REASON") excp = d.exception() assert (isinstance(excp, ConnectionException)) if isinstance(protocol, ModbusUdpClientProtocol): assert protocol.factory.protocol_lost_connection.call_count == 1
def testBaseHandlerMethods(self): ''' Test the base class for all the clients ''' request = ReadCoilsRequest(1, 1) address = ('server', 12345) server = MockServer() with patch.object(ModbusBaseRequestHandler, 'handle') as mock_handle: with patch.object(ModbusBaseRequestHandler, 'send') as mock_send: mock_handle.return_value = True mock_send.return_value = True handler = ModbusBaseRequestHandler(request, address, server) self.assertEqual(handler.running, True) self.assertEqual(handler.framer, 'framer') handler.execute(request) self.assertEqual(mock_send.call_count, 1) server.context[0x00] = object() handler.execute(request) self.assertEqual(mock_send.call_count, 2)
def testClientProtocolHandleResponse(self, protocol): ''' Test the client protocol handles responses ''' protocol = protocol() transport = mock.MagicMock() protocol.connection_made(transport=transport) reply = ReadCoilsRequest(1, 1) reply.transaction_id = 0x00 # if isinstance(protocol.create_future, mock.MagicMock): # import asyncio # protocol.create_future.return_value = asyncio.Future() # handle skipped cases protocol._handleResponse(None) protocol._handleResponse(reply) # handle existing cases d = protocol._buildResponse(0x00) protocol._handleResponse(reply) result = d.result() assert result == reply
def testSerialClientHandleResponse(self, mock_serial, mock_seriostream, mock_ioloop): """ Test the tornado serial client client handles responses """ client = AsyncModbusSerialClient(ioloop=schedulers.IO_LOOP, framer=ModbusRtuFramer( ClientDecoder()), port=SERIAL_PORT) client.connect() out = [] reply = ReadCoilsRequest(1, 1) reply.transaction_id = 0x00 # handle skipped cases client._handle_response(None) client._handle_response(reply) # handle existing cases d = client._build_response(0x00) d.add_done_callback(lambda v: out.append(v)) client._handle_response(reply) self.assertEqual(d.result(), reply)
def testClientProtocolConnectionLost(self, protocol): ''' Test the client protocol connection lost''' framer = ModbusSocketFramer(None) protocol = protocol(framer=framer, timeout=0) protocol.execute = mock.MagicMock() # future = asyncio.Future() # future.set_result(ReadCoilsResponse([1])) # protocol._execute = mock.MagicMock(side_effect=future) transport = mock.MagicMock() factory = mock.MagicMock() if isinstance(protocol, ModbusUdpClientProtocol): protocol.factory = factory protocol.connection_made(transport) protocol.transport.write = mock.Mock() request = ReadCoilsRequest(1, 1) d = protocol.execute(request) # d = await d protocol.connection_lost("REASON") excp = d.exception() assert (isinstance(excp, ConnectionException)) if isinstance(protocol, ModbusUdpClientProtocol): assert protocol.factory.protocol_lost_connection.call_count == 1
def test_build_packet(rtu_framer): message = ReadCoilsRequest(1, 10) assert rtu_framer.buildPacket(message) == b'\x00\x01\x00\x01\x00\n\xec\x1c'