Пример #1
0
        public void TestCtor()
        {
            _streamWriter.Write("Foo");
            _streamWriter.Flush();

            var info = new FileInfo(_fname);

            _scheduler.RunOnce();

            _file.GetValue(LogFileProperties.LastModified).Should().Be(info.LastWriteTime);
            _file.GetValue(LogFileProperties.Created).Should().Be(info.CreationTime);
        }
Пример #2
0
        public void TestExclusiveAccess()
        {
            _streamWriter?.Dispose();
            _stream?.Dispose();

            using (var stream = new FileStream(_fname, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
            {
                _file = new TextLogFile(_scheduler, _fname);
                _scheduler.RunOnce();

                _file.GetValue(LogFileProperties.EmptyReason).Should().Be(ErrorFlags.SourceCannotBeAccessed);
                _file.GetValue(LogFileProperties.Created).Should().NotBe(DateTime.MinValue);
                _file.GetValue(LogFileProperties.Created).Should().Be(new FileInfo(_fname).CreationTime);
            }
        }
Пример #3
0
        public void TestDoesNotExist()
        {
            _file = new TextLogFile(_scheduler, _fname);
            _scheduler.RunOnce();
            _file.GetValue(LogFileProperties.EmptyReason).Should().Be(ErrorFlags.None);
            _file.GetValue(LogFileProperties.Created).Should().NotBe(DateTime.MinValue);

            _streamWriter?.Dispose();
            _stream?.Dispose();
            File.Delete(_fname);
            _scheduler.RunOnce();

            _file.GetValue(LogFileProperties.EmptyReason).Should().Be(ErrorFlags.SourceDoesNotExist);
            _file.GetValue(LogFileProperties.Created).Should().BeNull();
        }
        public void TestGetSection1()
        {
            using (var file = new TextLogFile(_scheduler, File20Mb))
            {
                file.Property(x => x.EndOfSourceReached).ShouldAfter(TimeSpan.FromSeconds(5)).BeTrue("because we should be able to read the entire file in a few seconds");
                file.Count.Should().Be(165342);
                file.GetValue(LogFileProperties.StartTimestamp).Should().Be(new DateTime(2015, 10, 7, 19, 50, 58, 982));

                LogLine[] section = file.GetSection(new LogFileSection(0, 10));
                section.Should().Equal(new[]
                {
                    new LogLine(0,
                                "2015-10-07 19:50:58,982 [8092, 1] INFO  SharpRemote.Hosting.OutOfProcessSiloServer (null) - Silo Server starting, args (1): \"14056\", without custom type resolver",
                                LevelFlags.Info,
                                new DateTime(2015, 10, 7, 19, 50, 58, 982)),
                    new LogLine(1,
                                "2015-10-07 19:50:58,998 [8092, 1] DEBUG SharpRemote.Hosting.OutOfProcessSiloServer (null) - Args.Length: 1",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 58, 998)),
                    new LogLine(2,
                                "2015-10-07 19:50:59,013 [8092, 1] DEBUG SharpRemote.AbstractSocketRemotingEndPoint (null) - Creating new servant (#18446744073709551613) 'SharpRemote.Heartbeat' implementing 'SharpRemote.IHeartbeat'",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 59, 013)),
                    new LogLine(3,
                                "2015-10-07 19:50:59,062 [8092, 1] DEBUG SharpRemote.AbstractSocketRemotingEndPoint (null) - Creating new servant (#18446744073709551614) 'SharpRemote.Latency' implementing 'SharpRemote.ILatency'",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 59, 062)),
                    new LogLine(4,
                                "2015-10-07 19:50:59,067 [8092, 1] DEBUG SharpRemote.AbstractSocketRemotingEndPoint (null) - Creating new servant (#18446744073709551615) 'SharpRemote.Hosting.SubjectHost' implementing 'SharpRemote.Hosting.ISubjectHost'",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 59, 067)),
                    new LogLine(5,
                                "2015-10-07 19:50:59,081 [8092, 1] INFO  SharpRemote.SocketRemotingEndPointServer (null) - EndPoint '<Unnamed>' listening on 0.0.0.0:49152",
                                LevelFlags.Info,
                                new DateTime(2015, 10, 7, 19, 50, 59, 081)),
                    new LogLine(6,
                                "2015-10-07 19:50:59,141 [8092, 6] DEBUG SharpRemote.SocketRemotingEndPointServer (null) - Incoming connection from '127.0.0.1:10348', starting handshake...",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 59, 141)),
                    new LogLine(7,
                                "2015-10-07 19:50:59,171 [8092, 6] INFO  SharpRemote.AbstractIPSocketRemotingEndPoint (null) - <Unnamed>: Connected to 127.0.0.1:10348",
                                LevelFlags.Info,
                                new DateTime(2015, 10, 7, 19, 50, 59, 171)),
                    new LogLine(8,
                                "2015-10-07 19:50:59,181 [8092, 10] DEBUG SharpRemote.AbstractSocketRemotingEndPoint (null) - 0.0.0.0:49152 to 127.0.0.1:10348: sending RPC #1 to 18446744073709551611.Beat",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 59, 181)),
                    new LogLine(9,
                                "2015-10-07 19:50:59,182 [8092, 11] DEBUG SharpRemote.AbstractSocketRemotingEndPoint (null) - 0.0.0.0:49152 to 127.0.0.1:10348: sending RPC #2 to 18446744073709551612.Roundtrip",
                                LevelFlags.Debug,
                                new DateTime(2015, 10, 7, 19, 50, 59, 182))
                });
            }
        }
Пример #5
0
        public void Test20Mb()
        {
            using (var source = new TextLogFile(_scheduler, TextLogFileAcceptanceTest.File20Mb))
                using (var merged = new MergedLogFile(_scheduler, TimeSpan.FromMilliseconds(1), source))
                {
                    source.Property(x => x.EndOfSourceReached).ShouldEventually().BeTrue();

                    merged.Property(x => x.EndOfSourceReached).ShouldEventually().BeTrue();

                    merged.Count.Should().Be(source.Count);
                    merged.GetValue(LogFileProperties.Size).Should().Be(source.GetValue(LogFileProperties.Size));
                    merged.GetValue(LogFileProperties.StartTimestamp).Should().Be(source.GetValue(LogFileProperties.StartTimestamp));

                    LogLine[] sourceLines = source.GetSection(new LogFileSection(0, source.Count));
                    LogLine[] mergedLines = merged.GetSection(new LogFileSection(0, merged.Count));
                    for (int i = 0; i < source.Count; ++i)
                    {
                        LogLine mergedLine = mergedLines[i];
                        LogLine sourceLine = sourceLines[i];
                        mergedLine.Should().Be(sourceLine);
                    }
                }
        }
        public void TestRead2LogEntries()
        {
            using (var file = new TextLogFile(_scheduler, File2Entries))
            {
                var listener = new Mock <ILogFileListener>();
                var changes  = new List <LogFileSection>();
                listener.Setup(x => x.OnLogFileModified(It.IsAny <ILogFile>(), It.IsAny <LogFileSection>()))
                .Callback((ILogFile logFile, LogFileSection section) => changes.Add(section));

                file.AddListener(listener.Object, TimeSpan.Zero, 1);

                changes.Property(x => x.Count).ShouldAfter(TimeSpan.FromSeconds(5)).Be(7);

                changes.Should().Equal(new[]
                {
                    LogFileSection.Reset,
                    new LogFileSection(0, 1),
                    new LogFileSection(1, 1),
                    new LogFileSection(2, 1),
                    new LogFileSection(3, 1),
                    new LogFileSection(4, 1),
                    new LogFileSection(5, 1)
                });

                file.GetValue(LogFileProperties.StartTimestamp).Should().Be(new DateTime(2015, 10, 7, 19, 50, 58, 982));

                LogLine[] lines = file.GetSection(new LogFileSection(0, 6));
                lines.Should().Equal(new[]
                {
                    new LogLine(0, 0,
                                "2015-10-07 19:50:58,982 [8092, 1] INFO  SharpRemote.Hosting.OutOfProcessSiloServer (null) - Silo Server starting, args (1): \"14056\", without custom type resolver",
                                LevelFlags.Info, new DateTime(2015, 10, 7, 19, 50, 58, 982)),
                    new LogLine(1, 1, "Foobar", LevelFlags.Other, null),
                    new LogLine(2, 2, "Some more info", LevelFlags.Other, null),
                    new LogLine(3, 3,
                                "2015-10-07 19:50:58,998 [8092, 1] DEBUG SharpRemote.Hosting.OutOfProcessSiloServer (null) - Args.Length: 1",
                                LevelFlags.Debug, new DateTime(2015, 10, 7, 19, 50, 58, 998)),
                    new LogLine(4, 4, "Hey look at me", LevelFlags.Other, null),
                    new LogLine(5, 5, "dwadawdadw", LevelFlags.Other, null)
                });
            }
        }
        public void TestReadAll1()
        {
            using (var file = new TextLogFile(_scheduler, File20Mb))
            {
                file.Property(x => x.EndOfSourceReached).ShouldAfter(TimeSpan.FromSeconds(20)).BeTrue();

                file.Dispose();

                file.GetValue(LogFileProperties.StartTimestamp).Should().Be(new DateTime(2015, 10, 7, 19, 50, 58, 982));

                List <LogLine> entries = file.Entries.ToList();
                entries.Count.Should().Be(165342);
                entries[0].Should()
                .Be(new LogLine(0,
                                "2015-10-07 19:50:58,982 [8092, 1] INFO  SharpRemote.Hosting.OutOfProcessSiloServer (null) - Silo Server starting, args (1): \"14056\", without custom type resolver",
                                LevelFlags.Info, new DateTime(2015, 10, 7, 19, 50, 58, 982)));
                entries[entries.Count - 1].Should()
                .Be(new LogLine(165341,
                                "2015-10-07 19:51:42,483 [8092, 6] INFO  SharpRemote.Hosting.OutOfProcessSiloServer (null) - Parent process terminated unexpectedly (exit code: -1), shutting down...",
                                LevelFlags.Info, new DateTime(2015, 10, 7, 19, 51, 42, 483)));
            }
        }
Пример #8
0
        public void TestLive1And2()
        {
            using (var source0 = new TextLogFile(_scheduler, TextLogFileAcceptanceTest.FileTestLive1))
                using (var source1 = new TextLogFile(_scheduler, TextLogFileAcceptanceTest.FileTestLive2))
                    using (var merged = new MergedLogFile(_scheduler, TimeSpan.Zero, source0, source1))
                    {
                        merged.Property(x => x.Count).ShouldEventually().Be(19, TimeSpan.FromSeconds(5),
                                                                            "Because the merged file should've been finished");
                        merged.Property(x => x.GetValue(LogFileProperties.Size)).ShouldEventually().Be(source0.GetValue(LogFileProperties.Size) + source1.GetValue(LogFileProperties.Size));
                        merged.Property(x => x.GetValue(LogFileProperties.StartTimestamp)).ShouldEventually().Be(source0.GetValue(LogFileProperties.StartTimestamp));

                        LogLine[] mergedLines = merged.GetSection(new LogFileSection(0, merged.Count));

                        mergedLines[0].Should()
                        .Be(new LogLine(0, 0,
                                        "2016-02-17 22:57:51,449 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Test.BusinessLogic.LogFileTest - Test",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 51, 449)));
                        mergedLines[1].Should()
                        .Be(new LogLine(1, 1,
                                        "2016-02-17 22:57:51,559 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Test.BusinessLogic.LogFileTest - Hello",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 51, 559)));
                        mergedLines[2].Should()
                        .Be(new LogLine(2, 2, 2, new LogLineSourceId(1),
                                        "2016-02-17 22:57:51,560 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Test.BusinessLogic.LogFileTest - Hello",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 51, 560)));
                        mergedLines[3].Should()
                        .Be(new LogLine(3, 3,
                                        "2016-02-17 22:57:51,664 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Test.BusinessLogic.LogFileTest - world!",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 51, 664)));
                        mergedLines[4].Should()
                        .Be(new LogLine(4, 4, 4, new LogLineSourceId(1),
                                        "2016-02-17 22:57:51,665 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Test.BusinessLogic.LogFileTest - world!",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 51, 665)));
                        mergedLines[5].Should()
                        .Be(new LogLine(5, 5,
                                        "2016-02-17 22:57:59,284 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 284)));
                        mergedLines[6].Should()
                        .Be(new LogLine(6, 6, 6, new LogLineSourceId(1),
                                        "2016-02-17 22:57:59,285 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 285)));
                        mergedLines[7].Should()
                        .Be(new LogLine(7, 7,
                                        "2016-02-17 22:57:59,298 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 298)));
                        mergedLines[8].Should()
                        .Be(new LogLine(8, 8, 8, new LogLineSourceId(1),
                                        "2016-02-17 22:57:59,299 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 299)));
                        mergedLines[9].Should()
                        .Be(new LogLine(9, 9,
                                        @"2016-02-17 22:57:59,302 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Settings.DataSource - Data Source 'E:\Code\Tailviewer\bin\Debug\TestClear1.log' doesn't have an ID yet, setting it to: b62ea0a3-c495-4f3f-b7c7-d1a0a66e361e",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 59, 302)));
                        mergedLines[10].Should()
                        .Be(new LogLine(10, 10, 10, new LogLineSourceId(1),
                                        @"2016-02-17 22:57:59,303 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Settings.DataSource - Data Source 'E:\Code\Tailviewer\bin\Debug\TestClear1.log' doesn't have an ID yet, setting it to: b62ea0a3-c495-4f3f-b7c7-d1a0a66e361e",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 59, 303)));
                        mergedLines[11].Should()
                        .Be(new LogLine(11, 11,
                                        @"2016-02-17 22:57:59,304 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Settings.DataSource - Data Source 'E:\Code\Tailviewer\bin\Debug\TestClear2.log' doesn't have an ID yet, setting it to: 0ff1c032-0754-405f-8193-2fa4dbfb7d07",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 59, 304)));
                        mergedLines[12].Should()
                        .Be(new LogLine(12, 12, 12, new LogLineSourceId(1),
                                        @"2016-02-17 22:57:59,305 [CurrentAppDomainHost.ExecuteNodes] INFO  Tailviewer.Settings.DataSource - Data Source 'E:\Code\Tailviewer\bin\Debug\TestClear2.log' doesn't have an ID yet, setting it to: 0ff1c032-0754-405f-8193-2fa4dbfb7d07",
                                        LevelFlags.Info, new DateTime(2016, 2, 17, 22, 57, 59, 305)));
                        mergedLines[13].Should()
                        .Be(new LogLine(13, 13,
                                        "2016-02-17 22:57:59,306 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 306)));
                        mergedLines[14].Should()
                        .Be(new LogLine(14, 14, 14, new LogLineSourceId(1),
                                        "2016-02-17 22:57:59,307 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 307)));
                        mergedLines[15].Should()
                        .Be(new LogLine(15, 15, 15, new LogLineSourceId(1),
                                        "2016-02-17 22:57:59,310 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 310)));
                        mergedLines[16].Should()
                        .Be(new LogLine(16, 16,
                                        "2016-02-17 22:57:59,311 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.Settings.DataSources - Selected item '00000000-0000-0000-0000-000000000000' not found in data-sources, ignoring it...",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 311)));
                        mergedLines[17].Should()
                        .Be(new LogLine(17, 17,
                                        @"2016-02-17 22:57:59,863 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.BusinessLogic.DataSources - DataSource 'foo (ec976867-195b-4adf-a819-a1427f0d9aac)' is assigned a parent 'f671f235-7084-4e57-b06a-d253f750fae6' but we don't know that one",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 863)));
                        mergedLines[18].Should()
                        .Be(new LogLine(18, 18, 18, new LogLineSourceId(1),
                                        @"2016-02-17 22:57:59,864 [CurrentAppDomainHost.ExecuteNodes] WARN  Tailviewer.BusinessLogic.DataSources - DataSource 'foo (ec976867-195b-4adf-a819-a1427f0d9aac)' is assigned a parent 'f671f235-7084-4e57-b06a-d253f750fae6' but we don't know that one",
                                        LevelFlags.Warning, new DateTime(2016, 2, 17, 22, 57, 59, 864)));
                    }
        }
Пример #9
0
        public void Test2SmallSources()
        {
            using (var source0 = new TextLogFile(_scheduler, TextLogFileAcceptanceTest.File2Entries))
                using (var source1 = new TextLogFile(_scheduler, TextLogFileAcceptanceTest.File2Lines))
                    using (var multi0 = new MultiLineLogFile(_scheduler, source0, TimeSpan.Zero))
                        using (var multi1 = new MultiLineLogFile(_scheduler, source1, TimeSpan.Zero))
                            using (var merged = new MergedLogFile(_scheduler, TimeSpan.Zero, multi0, multi1))
                            {
                                source0.Property(x => x.EndOfSourceReached).ShouldEventually().BeTrue();
                                source1.Property(x => x.EndOfSourceReached).ShouldEventually().BeTrue();

                                multi0.Property(x => x.EndOfSourceReached).ShouldEventually().BeTrue();
                                multi1.Property(x => x.EndOfSourceReached).ShouldEventually().BeTrue();

                                merged.Property(x => x.Count).ShouldEventually().Be(8, TimeSpan.FromSeconds(5),
                                                                                    "Because the merged file should've been finished");
                                merged.Property(x => x.GetValue(LogFileProperties.Size)).ShouldEventually().Be(source0.GetValue(LogFileProperties.Size) + source1.GetValue(LogFileProperties.Size));
                                merged.Property(x => x.GetValue(LogFileProperties.StartTimestamp)).ShouldEventually().Be(source1.GetValue(LogFileProperties.StartTimestamp));

                                LogLine[] source0Lines = multi0.GetSection(new LogFileSection(0, source0.Count));
                                LogLine[] source1Lines = multi1.GetSection(new LogFileSection(0, source1.Count));
                                LogLine[] mergedLines  = merged.GetSection(new LogFileSection(0, merged.Count));

                                mergedLines[0].Should().Be(new LogLine(0, 0, new LogLineSourceId(1), source1Lines[0]));
                                mergedLines[1].Should().Be(new LogLine(1, 1, new LogLineSourceId(0), source0Lines[0]));
                                mergedLines[2].Should().Be(new LogLine(2, 1, new LogLineSourceId(0), source0Lines[1]));
                                mergedLines[3].Should().Be(new LogLine(3, 1, new LogLineSourceId(0), source0Lines[2]));
                                mergedLines[4].Should().Be(new LogLine(4, 2, new LogLineSourceId(1), source1Lines[1]));
                                mergedLines[5].Should().Be(new LogLine(5, 3, new LogLineSourceId(0), source0Lines[3]));
                                mergedLines[6].Should().Be(new LogLine(6, 3, new LogLineSourceId(0), source0Lines[4]));
                                mergedLines[7].Should().Be(new LogLine(7, 3, new LogLineSourceId(0), source0Lines[5]));
                            }
        }