public void UnicastMessage_PurgeReceiveBuffer() { var mock = new Mock <IStreamResource>(MockBehavior.Strict); IStreamResource serialResource = mock.Object; var factory = new ModbusFactory(); var transport = new ModbusRtuTransport(serialResource, factory, NullModbusLogger.Instance); mock.Setup(s => s.DiscardInBuffer()); mock.Setup(s => s.Write(It.IsAny <byte[]>(), 0, 0)); serialResource.DiscardInBuffer(); serialResource.Write(null, 0, 0); // mangled response mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 4), 0, 4)).Returns(4); serialResource.DiscardInBuffer(); serialResource.Write(null, 0, 0); // normal response var response = new ReadCoilsInputsResponse(ModbusFunctionCodes.ReadCoils, 2, 1, new DiscreteCollection(true, false, true, false, false, false, false, false)); // write request mock.Setup(s => s.Write(It.Is <byte[]>(x => x.Length == 8), 0, 8)); // read header mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 4), 0, 4)) .Returns((byte[] buf, int offset, int count) => { Array.Copy(response.MessageFrame, 0, buf, 0, 4); return(4); }); // read remainder mock.Setup(s => s.Read(It.Is <byte[]>(x => x.Length == 2), 0, 2)) .Returns((byte[] buf, int offset, int count) => { Array.Copy(ModbusUtility.CalculateCrc(response.MessageFrame), 0, buf, 0, 2); return(2); }); var request = new ReadCoilsInputsRequest(ModbusFunctionCodes.ReadCoils, 2, 3, 4); ReadCoilsInputsResponse actualResponse = transport.UnicastMessage <ReadCoilsInputsResponse>(request); ModbusMessageFixture.AssertModbusMessagePropertiesAreEqual(response, actualResponse); mock.VerifyAll(); }
public void UnicastMessage_PurgeReceiveBuffer() { MockRepository mocks = new MockRepository(); IStreamResource serialResource = mocks.StrictMock <IStreamResource>(); ModbusSerialTransport transport = new ModbusRtuTransport(serialResource); serialResource.DiscardInBuffer(); serialResource.Write(null, 0, 0); LastCall.IgnoreArguments(); // mangled response Expect.Call(serialResource.Read(new byte[] { 0, 0, 0, 0 }, 0, 4)).Return(4); serialResource.DiscardInBuffer(); serialResource.Write(null, 0, 0); LastCall.IgnoreArguments(); // normal response ReadCoilsInputsResponse response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 2, 1, new DiscreteCollection(true, false, true, false, false, false, false, false)); // read header Expect.Call(serialResource.Read(new byte[] { 0, 0, 0, 0 }, 0, 4)) .Do(((Func <byte[], int, int, int>) delegate(byte[] buf, int offset, int count) { Array.Copy(response.MessageFrame, 0, buf, 0, 4); return(4); })); // read remainder Expect.Call(serialResource.Read(new byte[] { 0, 0 }, 0, 2)) .Do(((Func <byte[], int, int, int>) delegate(byte[] buf, int offset, int count) { Array.Copy(ModbusUtility.CalculateCrc(response.MessageFrame), 0, buf, 0, 2); return(2); })); mocks.ReplayAll(); ReadCoilsInputsRequest request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 2, 3, 4); transport.UnicastMessage <ReadCoilsInputsResponse>(request); mocks.VerifyAll(); }
public void UnicastMessage_PurgeReceiveBuffer() { MockRepository mocks = new MockRepository(); IStreamResource serialResource = mocks.StrictMock<IStreamResource>(); ModbusSerialTransport transport = new ModbusRtuTransport(serialResource); serialResource.DiscardInBuffer(); serialResource.Write(null, 0, 0); LastCall.IgnoreArguments(); // mangled response Expect.Call(serialResource.Read(new byte[] { 0, 0, 0, 0 }, 0, 4)).Return(4); serialResource.DiscardInBuffer(); serialResource.Write(null, 0, 0); LastCall.IgnoreArguments(); // normal response ReadCoilsInputsResponse response = new ReadCoilsInputsResponse(Modbus.ReadCoils, 2, 1, new DiscreteCollection(true, false, true, false, false, false, false, false)); // read header Expect.Call(serialResource.Read(new byte[] { 0, 0, 0, 0 }, 0, 4)).Do(((Func<byte[], int, int, int>) delegate(byte[] buf, int offset, int count) { Array.Copy(response.MessageFrame, 0, buf, 0, 4); return 4; })); // read remainder Expect.Call(serialResource.Read(new byte[] { 0, 0 }, 0, 2)).Do(((Func<byte[], int, int, int>) delegate(byte[] buf, int offset, int count) { Array.Copy(ModbusUtility.CalculateCrc(response.MessageFrame), 0, buf, 0, 2); return 2; })); mocks.ReplayAll(); ReadCoilsInputsRequest request = new ReadCoilsInputsRequest(Modbus.ReadCoils, 2, 3, 4); transport.UnicastMessage<ReadCoilsInputsResponse>(request); mocks.VerifyAll(); }