예제 #1
0
        public void ActivityNotClosed_Duration_FromThreadClock()
        {
            //-- Arrange

            var log = CreateThreadLog();
            ActivityLogNode activity;

            log.AppendNode(new FormattedLogNode(LogLevel.Info, "One"));
            log.AppendNode(activity = new FormattedActivityLogNode("Two"));

            //-- Act

            Clock.ElapsedMilliseconds = 123;

            var rootDuration1 = log.RootActivity.MillisecondsDuration;
            var childDuration1 = activity.MillisecondsDuration;

            Clock.ElapsedMilliseconds = 456;

            var rootDuration2 = log.RootActivity.MillisecondsDuration;
            var childDuration2 = activity.MillisecondsDuration;

            //-- Assert

            Assert.That(rootDuration1, Is.EqualTo(123));
            Assert.That(childDuration1, Is.EqualTo(123));

            Assert.That(rootDuration2, Is.EqualTo(456));
            Assert.That(childDuration2, Is.EqualTo(456));
        }
        public void SetUp()
        {
            Framework.NodeConfiguration.ApplicationName = "A1";
            Framework.NodeConfiguration.NodeName = "N1";
            Framework.NodeConfiguration.InstanceId = "I1";
            Framework.NodeConfiguration.EnvironmentName = "E1";
            Framework.PresetUtcNow = new DateTime(2015, 1, 30, 15, 22, 54, 345);

            _rootActivity = new FormattedActivityLogNode("root");

            Framework.PresetGuids.Enqueue(new Guid(TestLogId));
            _threadLog = new ThreadLog(Framework, Clock, Registry, Anchor, ThreadTaskType.Unspecified, _rootActivity);
        }
예제 #3
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------
        public void AppendLogNode(LogNode node)
        {
            var currentLog = _anchor.CurrentThreadLog;

            if ( currentLog != null )
            {
                currentLog.AppendNode(node);
            }
            else
            {
                using ( var unknownThreadActivity = new FormattedActivityLogNode(UnknownThreadMessageId, "???") )
                {
                    StartThreadLogNoCheck(ThreadTaskType.Unspecified, unknownThreadActivity);
                    _anchor.CurrentThreadLog.AppendNode(node);
                }
            }

            _plainLog.LogNode(node);

            //if ( node.Level >= LogLevel.Warning )
            //{
            //    PlainLog.LogNode(node);
            //}
        }
예제 #4
0
        public void GenerateExampleThreadLogs(ThreadTaskType taskType, string rootActivityText, bool includeWarning, bool includeError)
        {
            var realThreadRegistry = new ThreadRegistry(@"D:\ThreadLogExamples");
            var rootActivity = new FormattedActivityLogNode(rootActivityText);
            var log = new ThreadLog(Framework, _clock, realThreadRegistry, taskType, rootActivity);

            log.AppendNode(new FormattedLogNode(LogLevel.Info, "One"));
            log.AppendNode(new FormattedActivityLogNode("Two"));
            log.AppendNode(new FormattedLogNode(LogLevel.Verbose, "Two-1"));
            log.AppendNode(new FormattedLogNode(LogLevel.Verbose, "Two-2"));
            log.AppendNode(new FormattedLogNode(LogLevel.Info, "Three"));
            log.AppendNode(new FormattedActivityLogNode("Four"));

            if ( includeError )
            {
                try
                {
                    throw new Exception("This is a generated exception");
                }
                catch ( Exception e )
                {
                    log.AppendNode(new FormattedLogNode(LogLevel.Error, "Five", exception: e, fullDetailsText: e.ToString()));
                }
            }

            log.CurrentActivity.Close();

            if ( includeWarning )
            {
                log.AppendNode(new FormattedLogNode(LogLevel.Warning, "Six"));
            }

            log.AppendNode(new FormattedLogNode(LogLevel.Debug, "Two-3"));
            log.AppendNode(new FormattedLogNode(LogLevel.Debug, "Two-4"));

            Thread.Sleep(5000);
        }
예제 #5
0
 //-----------------------------------------------------------------------------------------------------------------------------------------------------
 private ThreadLog CreateThreadLog(string rootActivityText = "Root", ThreadTaskType taskType = ThreadTaskType.Unspecified)
 {
     var rootActivity = new FormattedActivityLogNode(rootActivityText);
     return new ThreadLog(Framework, Clock, Registry, Anchor, ThreadTaskType.Unspecified, rootActivity);
 }
예제 #6
0
        public void NewInstance_CurrentActivity_IsRootActivity()
        {
            //-- Arrange

            var rootActivity = new FormattedActivityLogNode("Root");

            //-- Act

            var log = new ThreadLog(
                Framework, Clock, Registry, Anchor, ThreadTaskType.Unspecified, rootActivity);

            //-- Assert

            Assert.That(log.RootActivity, Is.SameAs(rootActivity));
            Assert.That(log.CurrentActivity, Is.SameAs(rootActivity));
        }
예제 #7
0
        public void CloseWarningActivity_BubbleUpToParent()
        {
            //-- Arrange

            var log = CreateThreadLog();
            ActivityLogNode activityTwo;
            ActivityLogNode activityFour;

            //-- Act

            log.AppendNode(new FormattedLogNode(LogLevel.Info, "One"));
            log.AppendNode(activityTwo = new FormattedActivityLogNode("Two"));
            log.AppendNode(new FormattedLogNode(LogLevel.Info, "Three"));
            log.AppendNode(activityFour = new FormattedActivityLogNode("Four"));
            log.AppendNode(new FormattedLogNode(LogLevel.Warning, "Five"));

            activityFour.Close();
            var afterFourClosed = ToTestString(log.RootActivity);

            activityTwo.Close();
            var afterTwoClosed = ToTestString(log.RootActivity);

            //-- Assert

            Assert.That(afterFourClosed, Is.EqualTo("AI:Root{LI:One;AW:Two{LI:Three;AW:Four{LW:Five}}}"));
            Assert.That(afterTwoClosed, Is.EqualTo("AW:Root{LI:One;AW:Two{LI:Three;AW:Four{LW:Five}}}"));
        }
예제 #8
0
        public void CloseFailedActivity_BubbleFailureToParent()
        {
            //-- Arrange

            var log = CreateThreadLog();
            ActivityLogNode activityFour;

            //-- Act

            log.AppendNode(new FormattedLogNode(LogLevel.Info, "One"));
            log.AppendNode(new FormattedActivityLogNode("Two"));
            log.AppendNode(new FormattedLogNode(LogLevel.Info, "Three"));
            log.AppendNode(activityFour = new FormattedActivityLogNode("Four"));
            log.AppendNode(new FormattedLogNode(LogLevel.Error, "Five", exception: new Exception()));

            activityFour.Close();

            //-- Assert

            Assert.That(ToTestString(log.RootActivity), Is.EqualTo("AI:Root{LI:One;AEX:Two{LI:Three;AEX:Four{LEX:Five}}}"));
        }
예제 #9
0
        public void CloseActivityNode_ParentBecomesCurrentActivity()
        {
            //-- Arrange

            var log = CreateThreadLog();
            ActivityLogNode activity;

            //-- Act

            log.AppendNode(new FormattedLogNode(LogLevel.Info, "One"));
            log.AppendNode(activity = new FormattedActivityLogNode("Two"));
            log.AppendNode(new FormattedLogNode(LogLevel.Info, "Three"));
            activity.Close();
            log.AppendNode(new FormattedLogNode(LogLevel.Info, "Four"));

            //-- Assert

            Assert.That(ToTestString(log.RootActivity), Is.EqualTo("AI:Root{LI:One;AI:Two{LI:Three};LI:Four}"));
            Assert.That(log.CurrentActivity, Is.SameAs(log.RootActivity));
        }
예제 #10
0
        public void AppendErrorNodeWithException_ClearFailure_FailureBubbledUpAsWarning()
        {
            //-- Arrange

            var log = CreateThreadLog();
            ActivityLogNode activityFour;

            //-- Act

            log.AppendNode(new FormattedLogNode(LogLevel.Info, "One"));
            log.AppendNode(new FormattedActivityLogNode("Two"));
            log.AppendNode(new FormattedLogNode(LogLevel.Info, "Three"));
            log.AppendNode(activityFour = new FormattedActivityLogNode("Four"));
            log.AppendNode(new FormattedLogNode(LogLevel.Error, "Five", exception: new Exception()), clearFailure: true);

            activityFour.Close();

            //-- Assert

            Assert.That(ToTestString(log.RootActivity), Is.EqualTo("AI:Root{LI:One;AW:Two{LI:Three;AW:Four{LEX:Five}}}"));
        }