public void ReadRequestResponse_ConnectionAbortedWhileReadingMBAPHeader() { var mock = new Mock <IStreamResource>(MockBehavior.Strict); mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 6), 0, 6)).Returns(3); mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 6), 3, 3)).Returns(0); Assert.Throws <IOException>(() => ModbusIpTransport.ReadRequestResponse(mock.Object, NullModbusLogger.Instance)); mock.VerifyAll(); }
public void BuildMessageFrame() { MockRepository mocks = new MockRepository(); ModbusIpTransport mockModbusTcpTransport = mocks.PartialMock <ModbusIpTransport>(MockRepository.GenerateStub <IStreamResource>()); ReadCoilsInputsRequest message = new ReadCoilsInputsRequest(Modbus.ReadCoils, 2, 10, 5); mocks.ReplayAll(); Assert.AreEqual(new byte[] { 0, 0, 0, 0, 0, 6, 2, 1, 0, 10, 0, 5 }, mockModbusTcpTransport.BuildMessageFrame(message)); mocks.VerifyAll(); }
public void GetNewTransactionId() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); Dictionary<int, string> transactionIds = new Dictionary<int, string>(); for (int i = 0; i < UInt16.MaxValue; i++) transactionIds.Add(transport.GetNewTransactionId(), String.Empty); Assert.AreEqual(1, transport.GetNewTransactionId()); Assert.AreEqual(2, transport.GetNewTransactionId()); }
public void ReadRequestResponse_ConnectionAbortedWhileReadingMBAPHeader() { MockRepository mocks = new MockRepository(); var mockTransport = mocks.StrictMock <IStreamResource>(null); Expect.Call(mockTransport.Read(new byte[6], 0, 6)).Return(0); mocks.ReplayAll(); Assert.Throws <IOException>(() => ModbusIpTransport.ReadRequestResponse(mockTransport)); mocks.VerifyAll(); }
public void ReadRequestResponse_ConnectionAbortedWhileReadingMessageFrame() { Mock <IStreamResource>?mock = new(MockBehavior.Strict); mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 6), 0, 6)).Returns(6); mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 6), 0, 6)).Returns(3); mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 6), 3, 3)).Returns(0); Assert.Throws <IOException>(() => ModbusIpTransport.ReadRequestResponse(mock.Object)); mock.VerifyAll(); }
public void OnShouldRetryResponse_ReturnsFalse_IfOutsideThreshold() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub <IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); request.TransactionId = 5; response.TransactionId = 2; transport.RetryOnOldResponseThreshold = 3; Assert.False(transport.OnShouldRetryResponse(request, response)); }
public void OnShouldRetryResponse_ReturnsFalse_IfOutsideThreshold() { var transport = new ModbusIpTransport(StreamResourceMock); var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); var response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); request.TransactionId = 5; response.TransactionId = 2; transport.RetryOnOldResponseThreshold = 3; Assert.False((bool)transport.OnShouldRetryResponse(request, response)); }
public void OnShouldRetryResponse_ReturnsFalse_IfThresholdDisabled() { var transport = new ModbusIpTransport(StreamResourceMock.Object); var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); var response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); request.TransactionId = 5; response.TransactionId = 4; transport.RetryOnOldResponseThreshold = 0; Assert.False(transport.OnShouldRetryResponse(request, response)); }
public void OnShouldRetryResponse_ReturnsFalse_IfOutsideThreshold() { var transport = new ModbusIpTransport(StreamResourceMock, new ModbusFactory(), NullModbusLogger.Instance); var request = new ReadCoilsInputsRequest(ModbusFunctionCodes.ReadCoils, 1, 1, 1); var response = new ReadCoilsInputsResponse(ModbusFunctionCodes.ReadCoils, 1, 1, null); request.TransactionId = 5; response.TransactionId = 2; transport.RetryOnOldResponseThreshold = 3; Assert.False(transport.OnShouldRetryResponse(request, response)); }
public void ValidateResponse_MismatchingTransactionIds() { var transport = new ModbusIpTransport(StreamResourceMock, new ModbusFactory(), NullModbusLogger.Instance); var request = new ReadCoilsInputsRequest(ModbusFunctionCodes.ReadCoils, 1, 1, 1); request.TransactionId = 5; var response = new ReadCoilsInputsResponse(ModbusFunctionCodes.ReadCoils, 1, 1, null); response.TransactionId = 6; Assert.Throws <IOException>(() => transport.ValidateResponse(request, response)); }
public void GetNewTransactionId() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub <IStreamResource>()); Dictionary <int, string> transactionIds = new Dictionary <int, string>(); for (int i = 0; i < UInt16.MaxValue; i++) { transactionIds.Add(transport.GetNewTransactionId(), String.Empty); } Assert.Equal(1, transport.GetNewTransactionId()); Assert.Equal(2, transport.GetNewTransactionId()); }
public void ValidateResponse_MismatchingTransactionIds() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub <IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 6; Assert.Throws <IOException>(() => transport.ValidateResponse(request, response)); }
public void ValidateResponse_RequestAheadOfResponse_RequestsReread() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub <IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 4; Assert.IsFalse(transport.ValidateResponse(request, response)); }
public void ValidateResponse_MismatchingTransactionIds() { var transport = new ModbusIpTransport(StreamResourceMock.Object); var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; var response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 6; Assert.Throws <IOException>(() => transport.ValidateResponse(request, response)); }
public void ValidateResponse_PassesWithMatchingTransactionDetails() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub <IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 5; // no exception is thrown, and return true Assert.IsTrue(transport.ValidateResponse(request, response)); }
public void ValidateResponse() { var transport = new ModbusIpTransport(StreamResourceMock); var request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; var response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 5; // no exception is thrown transport.ValidateResponse(request, response); }
public void ValidateResponse() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub <IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 5; // no exception is thrown transport.ValidateResponse(request, response); }
public void ValidateResponse() { var transport = new ModbusIpTransport(StreamResourceMock, new ModbusFactory(), NullModbusLogger.Instance); var request = new ReadCoilsInputsRequest(ModbusFunctionCodes.ReadCoils, 1, 1, 1); request.TransactionId = 5; var response = new ReadCoilsInputsResponse(ModbusFunctionCodes.ReadCoils, 1, 1, null); response.TransactionId = 5; // no exception is thrown transport.ValidateResponse(request, response); }
public void Write() { MockRepository mocks = new MockRepository(); var mockTcpStreamAdapter = mocks.StrictMock <IStreamResource>(); mockTcpStreamAdapter.Write(new byte[] { 255, 255, 0, 0, 0, 6, 1, 1, 0, 1, 0, 3 }, 0, 12); ModbusIpTransport mockModbusTcpTransport = mocks.PartialMock <ModbusIpTransport>(mockTcpStreamAdapter); Expect.Call(mockModbusTcpTransport.GetNewTransactionId()).Return(UInt16.MaxValue); mocks.ReplayAll(); ReadCoilsInputsRequest request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 3); mockModbusTcpTransport.Write(request); mocks.VerifyAll(); }
public void ReadRequestResponse_ConnectionAbortedWhileReadingMessageFrame() { MockRepository mocks = new MockRepository(); var mockTransport = mocks.StrictMock <IStreamResource>(null); byte[] mbapHeader = { 45, 63, 0, 0, 0, 6 }; Expect.Call(mockTransport.Read(new byte[6], 0, 6)).Do(((Func <byte[], int, int, int>) delegate(byte[] buf, int offset, int count) { Array.Copy(mbapHeader, buf, 6); return(6); })); Expect.Call(mockTransport.Read(new byte[6], 0, 6)).Return(0); mocks.ReplayAll(); ModbusIpTransport.ReadRequestResponse(mockTransport); mocks.VerifyAll(); }
public void ShouldRetryResponse_ReturnsFalse_IfDifferentMessage() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 2, 1, 1); IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); Assert.False(transport.ShouldRetryResponse(request, response)); }
public void ValidateResponse_MismatchingTransactionIds() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 6; Assert.Throws<IOException>(() => transport.ValidateResponse(request, response)); }
public void ValidateResponse_PassesWithMatchingTransactionDetails() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 5; // no exception is thrown, and return true Assert.IsTrue(transport.ValidateResponse(request, response)); }
public void ValidateResponse_RequestAheadOfResponse_RequestsReread() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 4; Assert.IsFalse(transport.ValidateResponse(request, response)); }
public void ValidateResponse() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); request.TransactionId = 5; IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); response.TransactionId = 5; // no exception is thrown transport.ValidateResponse(request, response); }
public IModbusMaster CreateIpMaster(IStreamResource streamResource) { var transport = new ModbusIpTransport(streamResource, this); return(new ModbusIpMaster(transport)); }
public void OnShouldRetryResponse_ReturnsFalse_IfOutsideThreshold() { ModbusIpTransport transport = new ModbusIpTransport(MockRepository.GenerateStub<IStreamResource>()); IModbusMessage request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 1, 1, 1); IModbusMessage response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 1, 1, null); request.TransactionId = 5; response.TransactionId = 2; transport.RetryOnOldResponseThreshold = 3; Assert.False(transport.OnShouldRetryResponse(request, response)); }