public void Test_NT_TS_CalculateThreadHealth()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            DateTime healthDate = DateTime.Now;

            threadStatus.ThreadHealthDate = healthDate;
            double threadHealth = threadStatus.CalculateThreadHealth();

            Assert.Greater(threadHealth, 0, "Thread Health should be greater than 0");
            Assert.LessOrEqual(threadHealth, 0.1, "Thread Health should be less than 0.1");
        }
        public void Test_NT_TS_AddElectiveProperty()
        {
            string requestor = "TestRequestor";
            string testEPKey = "TestElectivePropertyKey";
            string testEPValue = "TestElectivePropertyValue";

            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //add elective property
            threadStatus.AddElectiveProperty(testEPKey, testEPValue);

            //raise status report
            threadStatus.RaiseStatusReport(requestor);

            //assertions
            Assert.AreEqual("StatusReport", evtRaiser.MessageType, "Message Type is incorrect");
            Assert.True(evtRaiser.MessageDetail.ContainsKey("str:" + testEPKey), "Message Detail does not contain expected key");
            Assert.AreEqual(testEPValue, evtRaiser.MessageDetail["str:" + testEPKey], "Message Detail does not contain expected value");
        }
        public void Test_NT_TS_CalculateThreadHealthFailed_False()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            DateTime healthDate = DateTime.Now;

            threadStatus.ThreadHealthDate = healthDate;
            bool threadHealth = threadStatus.CalculateThreadHealthFailed();

            Assert.False(threadHealth, "ThreadHealth should be false");
            Assert.False(threadStatus.IsThreadHealthFailed, "IsThreadhealthFailed should be false");
            Assert.AreEqual(healthDate, threadStatus.ThreadHealthDate, "Thread Health Date value does not match");
        }
        public void Test_NT_TS_RaiseThreadHealth()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //raise status report
            threadStatus.RaiseThreadHealth();

            //assertions
            Assert.AreEqual("ThreadHealth", evtRaiser.MessageType, "Message Type is incorrect");
            Assert.AreEqual("Thread Health", evtRaiser.Message, "Message is incorrect");
            Assert.True(evtRaiser.MessageDetail.ContainsKey("str:ThreadHealth"), "Message Detail does not contain ThreadHealth key");
            Assert.True(evtRaiser.MessageDetail.ContainsKey("str:ThreadHealthFailed"), "Message Detail does not contain ThreadHealthFailed key");
        }
        public void Test_NT_TS_RaiseStatusReport()
        {
            string requestor = "TestRequestor";

            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //raise status report
            threadStatus.RaiseStatusReport(requestor);

            //assertions
            Assert.AreEqual("StatusReport", evtRaiser.MessageType, "Message Type is incorrect");
            Assert.AreEqual(Niawa.Threading.ThreadStatus.STATUS_UNKNOWN, evtRaiser.Message, "Message is incorrect");
            Assert.True(evtRaiser.MessageDetail.ContainsKey("str:Requestor"), "Message Detail does not contain Requestor key");
            Assert.AreEqual(requestor, evtRaiser.MessageDetail["str:Requestor"], "Message Detail does not contain Requestor value");
        }
        public void Test_NT_TS_Prop_Status_DidNotChange()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //change status
            threadStatus.Status = Niawa.Threading.ThreadStatus.STATUS_STARTED;

            //clear event raiser
            evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //change status (same value)
            threadStatus.Status = Niawa.Threading.ThreadStatus.STATUS_STARTED;

            //assertions
            Assert.AreEqual(Niawa.Threading.ThreadStatus.STATUS_STARTED, threadStatus.Status, "Thread Status is incorrect");
            Assert.AreNotEqual("Status", evtRaiser.MessageType, "Message Type is incorrect");
            Assert.AreNotEqual(Niawa.Threading.ThreadStatus.STATUS_STARTED, evtRaiser.Message, "Message is incorrect");
        }
        public void Test_NT_TS_Prop_StatusDate()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            DateTime beforeDate = DateTime.Now;

            //change status
            threadStatus.Status = Niawa.Threading.ThreadStatus.STATUS_STARTED;

            //assertions
            Assert.GreaterOrEqual(threadStatus.StatusDate, beforeDate, "Thread Status Date value is incorrect");
        }
        public void Test_NT_TS_Prop_ParentNodeID()
        {
            int serialIDRoot1 = 123;
            int serialIDSession1 = 456;
            int serialIDSerial1 = 789;

            int serialIDRoot2 = 1123;
            int serialIDSession2 = 1456;
            int serialIDSerial2 = 1789;

            Utilities.SerialId serialID1 = new Utilities.SerialId(serialIDRoot1, serialIDSession1, serialIDSerial1);
            Utilities.SerialId serialID2 = new Utilities.SerialId(serialIDRoot2, serialIDSession2, serialIDSerial2);

            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, serialID1.ToString(), serialID2.ToString(), evtRaiser);

            //assertion
            Assert.AreEqual(serialID2.ToString(), threadStatus.ParentNodeID, "Thread Status ParentNodeID value is incorrect");
        }
        public void Test_NT_TS_Prop_MessageErrorCount()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //set property
            threadStatus.MessageErrorCount = 5;

            //assertion
            Assert.AreEqual(5, threadStatus.MessageErrorCount, "Thread Status MessageErrorCount value is incorrect");
        }
        public void Test_NT_TS_Prop_LastMessageErrorDate()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            DateTime beforeDate = DateTime.Now;
            //set property
            threadStatus.MessageErrorCount = 5;

            //assertion
            Assert.GreaterOrEqual(threadStatus.LastMessageErrorDate, beforeDate, "Thread Status LastMessageErrorDate value is incorrect");
        }
        public void Test_NT_TS_Prop_IsThreadEnabled_True()
        {
            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //set property
            threadStatus.IsThreadEnabled = true;

            //assertion
            Assert.True(threadStatus.IsThreadEnabled, "Thread Status IsThreadEnabled value is incorrect");
        }
        public void Test_NT_TS_Prop_IsEvtRaiserSet_False()
        {
            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, null);

            //assertion
            Assert.False(threadStatus.IsEvtRaiserSet(), "Thread Status IsEvtRaiserSet value is incorrect");
        }
        public void Test_NT_TS_Instantiate()
        {
            DateTime beforeDate = DateTime.Now;

            //create mock event raiser
            MockedObjects.MockedEventRaiser evtRaiser = new MockedObjects.MockedEventRaiser("TestAppGroup", "TestAppName", "TestAppInstance", null);

            //create thread status
            Threading.ThreadStatus threadStatus = new Threading.ThreadStatus("TestThreadStatus", 60, _testSerialID.ToString(), string.Empty, evtRaiser);

            //assertions
            Assert.GreaterOrEqual(threadStatus.InitializedDate, beforeDate, "Initialized Date is incorrect");
            Assert.AreEqual(Niawa.Threading.ThreadStatus.STATUS_UNKNOWN, threadStatus.Status, "Status is incorrect");
        }