Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/LogExpert.Core/Classes/Log/LogfileReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ private LogfileReader (

ILogFileInfo fileInfo = null;

IsMultiFile = multiFile || fileNames.Length == 1;
IsMultiFile = multiFile;
_fileName = fileNames[0];

IEnumerable<string> names = IsMultiFile
Expand Down Expand Up @@ -1964,4 +1964,4 @@ PinHandle IBufferPinning.PinRange (int startLine, int endLine)
}

#endregion
}
}
14 changes: 10 additions & 4 deletions src/LogExpert.Tests/LogExpert.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,16 @@
<Content Include="TestData\tab.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\comma.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Update="TestData\organizations-1000.csv">
<Content Include="TestData\comma.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\app.log">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="TestData\app.log.1">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Update="TestData\organizations-1000.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="TestData\organizations-10000.csv">
Expand Down
Comment thread
Hirogen marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
using System.Text;

using LogExpert.Core.Classes.Log;
using LogExpert.Core.Classes.Log.ProgressReporters;
using LogExpert.Core.Entities;
using LogExpert.Core.Enums;

using NUnit.Framework;

namespace LogExpert.Tests.StreamReaderTests;

[TestFixture]
internal sealed class LogfileReaderMultiFileFlagTests
{
private static readonly string _testDataDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData");

private string _testDirectory = null!;
private string _logFile = null!;

[SetUp]
public void SetUp ()
{
_testDirectory = Path.Combine(Path.GetTempPath(), "LogExpertTests", Guid.NewGuid().ToString());
_ = Directory.CreateDirectory(_testDirectory);
_logFile = Path.Combine(_testDirectory, "app.log");

File.Copy(Path.Combine(_testDataDirectory, "app.log"), _logFile);
File.Copy(Path.Combine(_testDataDirectory, "app.log.1"), _logFile + ".1");

_ = PluginRegistry.PluginRegistry.Create(_testDirectory, 500);
}

[TearDown]
public void TearDown ()
{
if (Directory.Exists(_testDirectory))
{
Directory.Delete(_testDirectory, recursive: true);
}
}

[Test]
public void SingleFileCtor_MultiFileFalse_DoesNotExpandRollover ()
{
using var reader = CreateSingleFileReader(multiFile: false);

reader.ReadFiles();

Assert.Multiple(() =>
{
Assert.That(reader.IsMultiFile, Is.False);
Assert.That(reader.GetLogFileInfoList(), Has.Count.EqualTo(1));
Assert.That(reader.LineCount, Is.EqualTo(1));
});
}

[Test]
public void SingleFileCtor_MultiFileTrue_ExpandsRollover ()
{
using var reader = CreateSingleFileReader(multiFile: true);

reader.ReadFiles();

Assert.Multiple(() =>
{
Assert.That(reader.IsMultiFile, Is.True);
Assert.That(reader.GetLogFileInfoList(), Has.Count.EqualTo(2));
});
}

[Test]
public void MultiFileCtor_AlwaysMultiFile ()
{
using var reader = new LogfileReader(
[_logFile],
new EncodingOptions { Encoding = Encoding.UTF8 },
bufferCount: 40,
linesPerBuffer: 50,
new MultiFileOptions(),
ReaderType.System,
PluginRegistry.PluginRegistry.Instance,
maximumLineLength: 500,
progressReporter: NullProgressReporter.Instance);

reader.ReadFiles();

Assert.Multiple(() =>
{
Assert.That(reader.IsMultiFile, Is.True);
Assert.That(reader.GetLogFileInfoList(), Has.Count.EqualTo(2));
});
}

private LogfileReader CreateSingleFileReader (bool multiFile)
{
return new LogfileReader(
_logFile,
new EncodingOptions { Encoding = Encoding.UTF8 },
multiFile,
bufferCount: 40,
linesPerBuffer: 50,
new MultiFileOptions(),
ReaderType.System,
PluginRegistry.PluginRegistry.Instance,
maximumLineLength: 500,
progressReporter: NullProgressReporter.Instance);
}

}
Comment thread
Pr0metheus2 marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System.Text;

using LogExpert.Core.Classes.Log;
using LogExpert.Core.Entities;
using LogExpert.Core.Enums;
using LogExpert.Core.Interfaces;

using Moq;

using NUnit.Framework;

namespace LogExpert.Tests.StreamReaderTests;

[TestFixture]
internal sealed class LogfileReaderSingleFileMonitoringTests
{
private string _testDirectory = null!;
private string _logFile = null!;

[SetUp]
public void SetUp ()
{
_testDirectory = Path.Combine(Path.GetTempPath(), "LogExpertTests", Guid.NewGuid().ToString());
_ = Directory.CreateDirectory(_testDirectory);
_logFile = Path.Combine(_testDirectory, "app.log");
File.WriteAllLines(_logFile, Enumerable.Range(1, 100).Select(index => $"Line {index}"), Encoding.UTF8);

_ = PluginRegistry.PluginRegistry.Create(_testDirectory, 500);
}

[TearDown]
public void TearDown ()
{
if (Directory.Exists(_testDirectory))
{
Directory.Delete(_testDirectory, recursive: true);
}
}

[Test]
public void SingleFileReader_OnTruncation_ReportsNewFileNotRollover ()
{
using var loadingFinished = new ManualResetEventSlim(false);
using var newFileReported = new ManualResetEventSlim(false);
var progressReporterMock = new Mock<ILoadProgressReporter>();
progressReporterMock
.Setup(reporter => reporter.ReportLoadingFinished())
.Callback(() => loadingFinished.Set());
progressReporterMock
.Setup(reporter => reporter.ReportNewFile(It.IsAny<string>(), It.IsAny<long>(), It.IsAny<long>()))
.Callback(() => newFileReported.Set());

using var reader = new LogfileReader(
_logFile,
new EncodingOptions { Encoding = Encoding.UTF8 },
multiFile: false,
bufferCount: 40,
linesPerBuffer: 50,
new MultiFileOptions(),
ReaderType.System,
PluginRegistry.PluginRegistry.Instance,
maximumLineLength: 500,
progressReporter: progressReporterMock.Object);

var rolloverReported = false;
reader.FileSizeChanged += (_, args) => rolloverReported |= args.IsRollover;

reader.StartMonitoring();
Assert.That(loadingFinished.Wait(TimeSpan.FromSeconds(5)), Is.True, "Initial load did not finish");

File.WriteAllText(_logFile, "replacement\n", Encoding.UTF8);

Assert.That(newFileReported.Wait(TimeSpan.FromSeconds(5)), Is.True, "Truncation did not report a new file");
Assert.That(rolloverReported, Is.False);
}
}
1 change: 1 addition & 0 deletions src/LogExpert.Tests/TestData/app.log
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
app.log
1 change: 1 addition & 0 deletions src/LogExpert.Tests/TestData/app.log.1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
app.log.1
Loading