From d7d74ee0a1341382579b78ede72587ef079bcdfb Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Wed, 24 May 2017 12:58:03 +0800 Subject: [PATCH] Add taskmanager test --- Tests/Modbus.Net.Tests/BaseTest.cs | 6 + Tests/Modbus.Net.Tests/MachineMethodTest.cs | 3 + .../Modbus.Net.Tests/Modbus.Net.Tests.csproj | 1 + Tests/Modbus.Net.Tests/ModbusTest.cs | 8 + Tests/Modbus.Net.Tests/OpcTest.cs | 6 + Tests/Modbus.Net.Tests/SiemensTest.cs | 6 + Tests/Modbus.Net.Tests/TaskManagerTest.cs | 161 ++++++++++++++++++ 7 files changed, 191 insertions(+) create mode 100644 Tests/Modbus.Net.Tests/TaskManagerTest.cs diff --git a/Tests/Modbus.Net.Tests/BaseTest.cs b/Tests/Modbus.Net.Tests/BaseTest.cs index 9a17f52..8809a9e 100644 --- a/Tests/Modbus.Net.Tests/BaseTest.cs +++ b/Tests/Modbus.Net.Tests/BaseTest.cs @@ -326,5 +326,11 @@ namespace Modbus.Net.Tests Assert.AreEqual(addressUnit.Area, "3X"); Assert.AreEqual(addressUnit.Address, 1); } + + [TestCleanup] + public void MachineClean() + { + _baseMachine2.Disconnect(); + } } } diff --git a/Tests/Modbus.Net.Tests/MachineMethodTest.cs b/Tests/Modbus.Net.Tests/MachineMethodTest.cs index 29dcea8..9ff7dc4 100644 --- a/Tests/Modbus.Net.Tests/MachineMethodTest.cs +++ b/Tests/Modbus.Net.Tests/MachineMethodTest.cs @@ -19,6 +19,7 @@ namespace Modbus.Net.Tests var methods = utility.GetType().GetRuntimeMethods(); Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "GetTimeAsync") != null, true); Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "SetTimeAsync") != null, true); + baseMachine.Disconnect(); } [TestMethod] @@ -29,6 +30,7 @@ namespace Modbus.Net.Tests Assert.AreEqual(success, true); var time = await baseMachine.BaseUtility.InvokeUtilityMethod>("GetTimeAsync"); Assert.AreEqual((time.ToUniversalTime() - DateTime.Now.ToUniversalTime()).Seconds < 10, true); + baseMachine.Disconnect(); } [TestMethod] @@ -66,6 +68,7 @@ namespace Modbus.Net.Tests } }); Assert.AreEqual(success, true); + baseMachine.Disconnect(); } } } diff --git a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj index 454edec..2942bdd 100644 --- a/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj +++ b/Tests/Modbus.Net.Tests/Modbus.Net.Tests.csproj @@ -59,6 +59,7 @@ + diff --git a/Tests/Modbus.Net.Tests/ModbusTest.cs b/Tests/Modbus.Net.Tests/ModbusTest.cs index 96557d4..c957dde 100644 --- a/Tests/Modbus.Net.Tests/ModbusTest.cs +++ b/Tests/Modbus.Net.Tests/ModbusTest.cs @@ -272,5 +272,13 @@ namespace Modbus.Net.Tests Assert.AreEqual(ans3["A5"].PlcValue, dic1["A5"]); Assert.AreEqual(ans3["A6"].PlcValue, dic1["A6"]); } + + [TestCleanup] + public void MachineClean() + { + _modbusAsciiMachine.Disconnect(); + _modbusRtuMachine.Disconnect(); + _modbusTcpMachine.Disconnect(); + } } } diff --git a/Tests/Modbus.Net.Tests/OpcTest.cs b/Tests/Modbus.Net.Tests/OpcTest.cs index d60c345..95608d1 100644 --- a/Tests/Modbus.Net.Tests/OpcTest.cs +++ b/Tests/Modbus.Net.Tests/OpcTest.cs @@ -96,5 +96,11 @@ namespace Modbus.Net.Tests var ans = await _opcMachine.GetDatasAsync(MachineGetDataType.Id); Assert.AreEqual(ans["1"].PlcValue, 525); } + + [TestCleanup] + public void MachineClean() + { + _opcMachine.Disconnect(); + } } } diff --git a/Tests/Modbus.Net.Tests/SiemensTest.cs b/Tests/Modbus.Net.Tests/SiemensTest.cs index 6d4b9af..b733dd0 100644 --- a/Tests/Modbus.Net.Tests/SiemensTest.cs +++ b/Tests/Modbus.Net.Tests/SiemensTest.cs @@ -263,5 +263,11 @@ namespace Modbus.Net.Tests Assert.AreEqual(ans["A5"].PlcValue, dic1["A5"]); Assert.AreEqual(ans["A6"].PlcValue, dic1["A6"]); } + + [TestCleanup] + public void MachineClean() + { + _siemensTcpMachine.Disconnect(); + } } } diff --git a/Tests/Modbus.Net.Tests/TaskManagerTest.cs b/Tests/Modbus.Net.Tests/TaskManagerTest.cs new file mode 100644 index 0000000..fe65059 --- /dev/null +++ b/Tests/Modbus.Net.Tests/TaskManagerTest.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Modbus.Net.Modbus; + +namespace Modbus.Net.Tests +{ + [TestClass] + public class TaskManagerTest + { + private TaskManager _taskManager; + + private Dictionary _valueDic = new Dictionary(); + + private Timer _timer; + + [TestInitialize] + public void TaskManagerInit() + { + _taskManager = new TaskManager(20, true); + + var addresses = new List + { + new AddressUnit + { + Id = "0", + Area = "4X", + Address = 2, + SubAddress = 0, + CommunicationTag = "A1", + DataType = typeof(ushort) + }, + new AddressUnit + { + Id = "1", + Area = "4X", + Address = 3, + SubAddress = 0, + CommunicationTag = "A2", + DataType = typeof(ushort) + }, + new AddressUnit + { + Id = "2", + Area = "4X", + Address = 4, + SubAddress = 0, + CommunicationTag = "A3", + DataType = typeof(ushort) + }, + new AddressUnit + { + Id = "3", + Area = "4X", + Address = 5, + SubAddress = 0, + CommunicationTag = "A4", + DataType = typeof(ushort) + }, + new AddressUnit + { + Id = "4", + Area = "4X", + Address = 6, + SubAddress = 0, + CommunicationTag = "A5", + DataType = typeof(uint) + }, + new AddressUnit + { + Id = "5", + Area = "4X", + Address = 8, + SubAddress = 0, + CommunicationTag = "A6", + DataType = typeof(uint) + } + }; + + BaseMachine machine = new ModbusMachine(ModbusType.Tcp, "192.168.3.10", addresses, true, 2, 0); + + _taskManager.AddMachine(machine); + + var r = new Random(); + + _timer = new Timer(state => + { + lock (_valueDic) + { + _valueDic = new Dictionary + { + { + "A1", r.Next(0, UInt16.MaxValue) + }, + { + "A2", r.Next(0, UInt16.MaxValue) + }, + { + "A3", r.Next(0, UInt16.MaxValue) + }, + { + "A4", r.Next(0, UInt16.MaxValue) + }, + { + "A5", r.Next() + }, + { + "A6", r.Next() + } + }; + } + }, null, 0, 1000); + + _taskManager.InvokeTimerAll(new TaskItemSetData(_valueDic, MachineSetDataType.CommunicationTag) + { + TimerTime = 2000, + TimeoutTime = 60000, + TimerDisconnectedTime = 10000 + }); + } + + [TestMethod] + public void TaskManagerValueReadWriteTest() + { + var dicans = new Dictionary(); + _taskManager.InvokeTimerAll(new TaskItemGetData( + def => + { + dicans = def.ReturnValues.ToDictionary(p => p.Key, p => p.Value.PlcValue); + }, MachineGetDataType.CommunicationTag, 2000, 10000, 60000)); + + var i = 5; + while (i > 0) + { + Thread.Sleep(10000); + lock (dicans) + { + lock (_valueDic) + { + Assert.AreEqual(dicans["A1"], _valueDic["A1"]); + Assert.AreEqual(dicans["A2"], _valueDic["A2"]); + Assert.AreEqual(dicans["A3"], _valueDic["A3"]); + Assert.AreEqual(dicans["A4"], _valueDic["A4"]); + Assert.AreEqual(dicans["A5"], _valueDic["A5"]); + Assert.AreEqual(dicans["A6"], _valueDic["A6"]); + } + } + i--; + } + } + + [TestCleanup] + public void TaskManagerFinilize() + { + _taskManager.StopTimerAll(); + _timer.Dispose(); + } + } +}