diff --git a/Covid19Radar/Covid19Radar/Repository/EventLogRepository.cs b/Covid19Radar/Covid19Radar/Repository/EventLogRepository.cs index a899e2627..8a723e38f 100644 --- a/Covid19Radar/Covid19Radar/Repository/EventLogRepository.cs +++ b/Covid19Radar/Covid19Radar/Repository/EventLogRepository.cs @@ -145,6 +145,12 @@ private async Task> GetLogsAsyncInternal(long maxSize) long currentSize = 0; var resultList = new List(); + if (!Directory.Exists(_basePath)) + { + _loggerService.Info("Event log directory not found."); + return resultList; + } + string[] files = Directory.GetFiles(_basePath) .Where(file => file.EndsWith(LOG_EXTENSION)) .ToArray(); diff --git a/Covid19Radar/Tests/Covid19Radar.UnitTests/Repository/EventLogRepositoryTests.cs b/Covid19Radar/Tests/Covid19Radar.UnitTests/Repository/EventLogRepositoryTests.cs index 8dffc5521..a1029b764 100644 --- a/Covid19Radar/Tests/Covid19Radar.UnitTests/Repository/EventLogRepositoryTests.cs +++ b/Covid19Radar/Tests/Covid19Radar.UnitTests/Repository/EventLogRepositoryTests.cs @@ -3,6 +3,7 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. using System; +using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Covid19Radar.Common; @@ -46,6 +47,86 @@ private EventLogRepository CreateRepository() _mockBackupAttributeService.Object); } + [Fact] + public async Task GetLogsAsyncTest_NoDir() + { + string eventLogsTempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString(), "test_eventlogs"); + + _mockLocalPathService.SetupGet(x => x.EventLogDirPath).Returns(eventLogsTempPath); + + EventLogRepository unitUnderTest = CreateRepository(); + List result = await unitUnderTest.GetLogsAsync(long.MaxValue); + + Assert.Empty(result); + } + + [Fact] + public async Task GetLogsAsyncTest_Empty() + { + string eventLogsTempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString(), "test_eventlogs"); + Directory.CreateDirectory(eventLogsTempPath); + + _mockLocalPathService.SetupGet(x => x.EventLogDirPath).Returns(eventLogsTempPath); + + EventLogRepository unitUnderTest = CreateRepository(); + List result = await unitUnderTest.GetLogsAsync(long.MaxValue); + + Assert.Empty(result); + + Directory.Delete(eventLogsTempPath, true); + } + + [Fact] + public async Task GetLogsAsyncTest_Success() + { + string eventLogsTempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString(), "test_eventlogs"); + Directory.CreateDirectory(eventLogsTempPath); + + DateTime now = DateTime.UtcNow; + await WriteEventLog( + eventLogsTempPath, + "test-01.log", + true, + now.ToUnixEpoch(), + "test-type-01", + "test-subtype-01", + "{\"test-key\":1234}"); + + _mockLocalPathService.SetupGet(x => x.EventLogDirPath).Returns(eventLogsTempPath); + + EventLogRepository unitUnderTest = CreateRepository(); + List result = await unitUnderTest.GetLogsAsync(long.MaxValue); + + Assert.Single(result); + Assert.True(result[0].HasConsent); + Assert.Equal(now.ToUnixEpoch(), result[0].Epoch); + Assert.Equal("test-type-01", result[0].Type); + Assert.Equal("test-subtype-01", result[0].Subtype); + Assert.Equal(1234, result[0].Content["test-key"]); + Assert.True(File.Exists(Path.Combine(eventLogsTempPath, "test-01.log"))); + + Directory.Delete(eventLogsTempPath, true); + } + + [Fact] + public async Task GetLogsAsyncTest_Expection() + { + string eventLogsTempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString(), "test_eventlogs"); + Directory.CreateDirectory(eventLogsTempPath); + + await File.WriteAllTextAsync(Path.Combine(eventLogsTempPath, "test-error.log"), "json-parse-error-content"); + + _mockLocalPathService.SetupGet(x => x.EventLogDirPath).Returns(eventLogsTempPath); + + EventLogRepository unitUnderTest = CreateRepository(); + List result = await unitUnderTest.GetLogsAsync(long.MaxValue); + + Assert.Empty(result); + Assert.False(File.Exists(Path.Combine(eventLogsTempPath, "test-error.log"))); + + Directory.Delete(eventLogsTempPath, true); + } + [Fact] public async Task RotateAsyncTest_NoDir() {