Moved some more settings to the connection interface

This commit is contained in:
2024-04-02 17:43:45 +02:00
parent 21b0540e81
commit ca95298390
7 changed files with 161 additions and 154 deletions

View File

@@ -1,5 +1,4 @@
using AMWD.Protocols.Modbus.Common.Contracts;
using AMWD.Protocols.Modbus.Tcp;
using AMWD.Protocols.Modbus.Tcp;
using Moq;
namespace AMWD.Protocols.Modbus.Tests.Tcp
@@ -14,13 +13,20 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
public void Initialize()
{
_genericConnectionMock = new Mock<IModbusConnection>();
_genericConnectionMock.Setup(c => c.IdleTimeout).Returns(TimeSpan.FromSeconds(40));
_genericConnectionMock.Setup(c => c.ConnectTimeout).Returns(TimeSpan.FromSeconds(30));
_genericConnectionMock.Setup(c => c.ReadTimeout).Returns(TimeSpan.FromSeconds(20));
_genericConnectionMock.Setup(c => c.WriteTimeout).Returns(TimeSpan.FromSeconds(10));
_tcpConnectionMock = new Mock<ModbusTcpConnection>();
_tcpConnectionMock.Setup(c => c.IdleTimeout).Returns(TimeSpan.FromSeconds(10));
_tcpConnectionMock.Setup(c => c.ConnectTimeout).Returns(TimeSpan.FromSeconds(20));
_tcpConnectionMock.Setup(c => c.ReadTimeout).Returns(TimeSpan.FromSeconds(30));
_tcpConnectionMock.Setup(c => c.WriteTimeout).Returns(TimeSpan.FromSeconds(40));
_tcpConnectionMock.Setup(c => c.Hostname).Returns("127.0.0.1");
_tcpConnectionMock.Setup(c => c.Port).Returns(502);
_tcpConnectionMock.Setup(c => c.ReadTimeout).Returns(TimeSpan.FromSeconds(10));
_tcpConnectionMock.Setup(c => c.WriteTimeout).Returns(TimeSpan.FromSeconds(20));
_tcpConnectionMock.Setup(c => c.ConnectTimeout).Returns(TimeSpan.FromSeconds(30));
_tcpConnectionMock.Setup(c => c.IdleTimeout).Returns(TimeSpan.FromSeconds(40));
}
[TestMethod]
@@ -32,18 +38,10 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
// Act
string hostname = client.Hostname;
int port = client.Port;
TimeSpan readTimeout = client.ReadTimeout;
TimeSpan writeTimeout = client.WriteTimeout;
TimeSpan reconnectTimeout = client.ReconnectTimeout;
TimeSpan idleTimeout = client.IdleTimeout;
// Assert
Assert.IsNull(hostname);
Assert.AreEqual(0, port);
Assert.AreEqual(TimeSpan.Zero, readTimeout);
Assert.AreEqual(TimeSpan.Zero, writeTimeout);
Assert.AreEqual(TimeSpan.Zero, reconnectTimeout);
Assert.AreEqual(TimeSpan.Zero, idleTimeout);
_genericConnectionMock.VerifyNoOtherCalls();
}
@@ -57,17 +55,59 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
// Act
client.Hostname = "localhost";
client.Port = 205;
client.ReadTimeout = TimeSpan.FromSeconds(123);
client.WriteTimeout = TimeSpan.FromSeconds(456);
client.ReconnectTimeout = TimeSpan.FromSeconds(789);
client.IdleTimeout = TimeSpan.FromSeconds(321);
// Assert
_genericConnectionMock.VerifyNoOtherCalls();
}
[TestMethod]
public void ShouldReturnValuesForTcpConnection()
public void ShouldReturnValuesForGenericConnection()
{
// Arrange
var client = new ModbusTcpClient(_genericConnectionMock.Object);
// Act
var idleTimeout = client.IdleTimeout;
var connectTimeout = client.ConnectTimeout;
var readTimeout = client.ReadTimeout;
var writeTimeout = client.WriteTimeout;
// Assert
Assert.AreEqual(TimeSpan.FromSeconds(40), idleTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(30), connectTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(20), readTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(10), writeTimeout);
_genericConnectionMock.VerifyGet(c => c.IdleTimeout, Times.Once);
_genericConnectionMock.VerifyGet(c => c.ConnectTimeout, Times.Once);
_genericConnectionMock.VerifyGet(c => c.ReadTimeout, Times.Once);
_genericConnectionMock.VerifyGet(c => c.WriteTimeout, Times.Once);
_genericConnectionMock.VerifyNoOtherCalls();
}
[TestMethod]
public void ShouldSetValuesForGenericConnection()
{
// Arrange
var client = new ModbusTcpClient(_genericConnectionMock.Object);
// Act
client.IdleTimeout = TimeSpan.FromSeconds(10);
client.ConnectTimeout = TimeSpan.FromSeconds(20);
client.ReadTimeout = TimeSpan.FromSeconds(30);
client.WriteTimeout = TimeSpan.FromSeconds(40);
// Assert
_genericConnectionMock.VerifySet(c => c.IdleTimeout = TimeSpan.FromSeconds(10), Times.Once);
_genericConnectionMock.VerifySet(c => c.ConnectTimeout = TimeSpan.FromSeconds(20), Times.Once);
_genericConnectionMock.VerifySet(c => c.ReadTimeout = TimeSpan.FromSeconds(30), Times.Once);
_genericConnectionMock.VerifySet(c => c.WriteTimeout = TimeSpan.FromSeconds(40), Times.Once);
_genericConnectionMock.VerifyNoOtherCalls();
}
[TestMethod]
public void ShouldGetValuesForTcpConnection()
{
// Arrange
var client = new ModbusTcpClient(_tcpConnectionMock.Object);
@@ -75,25 +115,26 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
// Act
string hostname = client.Hostname;
int port = client.Port;
TimeSpan readTimeout = client.ReadTimeout;
TimeSpan writeTimeout = client.WriteTimeout;
TimeSpan reconnectTimeout = client.ReconnectTimeout;
TimeSpan keepAliveInterval = client.IdleTimeout;
var idleTimeout = client.IdleTimeout;
var connectTimeout = client.ConnectTimeout;
var readTimeout = client.ReadTimeout;
var writeTimeout = client.WriteTimeout;
// Assert
Assert.AreEqual("127.0.0.1", hostname);
Assert.AreEqual(502, port);
Assert.AreEqual(10, readTimeout.TotalSeconds);
Assert.AreEqual(20, writeTimeout.TotalSeconds);
Assert.AreEqual(30, reconnectTimeout.TotalSeconds);
Assert.AreEqual(40, keepAliveInterval.TotalSeconds);
Assert.AreEqual(TimeSpan.FromSeconds(10), idleTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(20), connectTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(30), readTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(40), writeTimeout);
_tcpConnectionMock.VerifyGet(c => c.Hostname, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.Port, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.IdleTimeout, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.ConnectTimeout, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.ReadTimeout, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.WriteTimeout, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.ConnectTimeout, Times.Once);
_tcpConnectionMock.VerifyGet(c => c.IdleTimeout, Times.Once);
_tcpConnectionMock.VerifyNoOtherCalls();
}
@@ -106,18 +147,19 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
// Act
client.Hostname = "localhost";
client.Port = 205;
client.ReadTimeout = TimeSpan.FromSeconds(123);
client.WriteTimeout = TimeSpan.FromSeconds(456);
client.ReconnectTimeout = TimeSpan.FromSeconds(789);
client.IdleTimeout = TimeSpan.FromSeconds(321);
client.IdleTimeout = TimeSpan.FromSeconds(40);
client.ConnectTimeout = TimeSpan.FromSeconds(30);
client.ReadTimeout = TimeSpan.FromSeconds(20);
client.WriteTimeout = TimeSpan.FromSeconds(10);
// Assert
_tcpConnectionMock.VerifySet(c => c.Hostname = "localhost", Times.Once);
_tcpConnectionMock.VerifySet(c => c.Port = 205, Times.Once);
_tcpConnectionMock.VerifySet(c => c.ReadTimeout = TimeSpan.FromSeconds(123), Times.Once);
_tcpConnectionMock.VerifySet(c => c.WriteTimeout = TimeSpan.FromSeconds(456), Times.Once);
_tcpConnectionMock.VerifySet(c => c.ConnectTimeout = TimeSpan.FromSeconds(789), Times.Once);
_tcpConnectionMock.VerifySet(c => c.IdleTimeout = TimeSpan.FromSeconds(321), Times.Once);
_tcpConnectionMock.VerifySet(c => c.IdleTimeout = TimeSpan.FromSeconds(40), Times.Once);
_tcpConnectionMock.VerifySet(c => c.ConnectTimeout = TimeSpan.FromSeconds(30), Times.Once);
_tcpConnectionMock.VerifySet(c => c.ReadTimeout = TimeSpan.FromSeconds(20), Times.Once);
_tcpConnectionMock.VerifySet(c => c.WriteTimeout = TimeSpan.FromSeconds(10), Times.Once);
_tcpConnectionMock.VerifyNoOtherCalls();
}
}

View File

@@ -4,7 +4,6 @@ using System.Net;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using AMWD.Protocols.Modbus.Common.Contracts;
using AMWD.Protocols.Modbus.Tcp;
using AMWD.Protocols.Modbus.Tcp.Utils;
using Moq;
@@ -528,18 +527,12 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
Port = 502
};
// Replace real TCP client with mock
var clientField = connection.GetType().GetField("_client", BindingFlags.NonPublic | BindingFlags.Instance);
(clientField.GetValue(connection) as TcpClientWrapper)?.Dispose();
clientField.SetValue(connection, _tcpClientMock.Object);
// Replace real connection with mock
var connectionField = connection.GetType().GetField("_tcpClient", BindingFlags.NonPublic | BindingFlags.Instance);
(connectionField.GetValue(connection) as TcpClientWrapper)?.Dispose();
connectionField.SetValue(connection, _tcpClientMock.Object);
return connection;
}
private void ClearInvocations()
{
_networkStreamMock.Invocations.Clear();
_tcpClientMock.Invocations.Clear();
}
}
}