From 3d4f5e66cc25986cd24bff3d6ed53d4adb767337 Mon Sep 17 00:00:00 2001 From: Alexey <248997@gmail.com> Date: Wed, 27 Nov 2024 09:15:31 +0500 Subject: [PATCH] fix: tests --- src/Asv.Cfg.Test/ConfigurationBaseTest.cs | 12 ++++++++---- .../InMemory/InMemoryConfigurationTest.cs | 5 ++--- src/Asv.Cfg.Test/Json/JsonConfigurationTest.cs | 6 +++--- .../Json/JsonOneFileConfigurationTest.cs | 5 +++-- .../Json/ZipJsonConfigurationTest.cs | 4 ++-- .../Json/ZipJsonVersionedFileTest.cs | 9 +++++++-- src/Asv.Cfg/IConfiguration.cs | 1 + src/Asv.Cfg/InMemory/InMemoryConfiguration.cs | 1 + src/Asv.Cfg/Json/JsonConfiguration.cs | 4 +++- src/Asv.Cfg/Json/JsonOneFileConfiguration.cs | 1 + src/Asv.Cfg/Json/ZipJsonConfiguration.cs | 1 + src/Asv.Cfg/Json/ZipJsonVersionedFile.cs | 17 ++++++++++++++--- src/Asv.IO.Test/Streams/TelnetStreamTest.cs | 2 +- 13 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/Asv.Cfg.Test/ConfigurationBaseTest.cs b/src/Asv.Cfg.Test/ConfigurationBaseTest.cs index 1510d1d..2ccb697 100644 --- a/src/Asv.Cfg.Test/ConfigurationBaseTest.cs +++ b/src/Asv.Cfg.Test/ConfigurationBaseTest.cs @@ -2,16 +2,19 @@ using System.Linq; using System.Threading; using Xunit; +using Xunit.Abstractions; namespace Asv.Cfg.Test; -public abstract class ConfigurationBaseTest - where T:IConfiguration +public abstract class ConfigurationBaseTest(ITestOutputHelper log) + where T : IConfiguration { protected abstract IDisposable CreateForTest(out T configuration); - + + public TestLoggerFactory LogFactory { get; set; } = new(log, TimeProvider.System, "Test"); + [Fact] public void Check_If_Saved_Setting_Exists() { @@ -65,7 +68,8 @@ public void Check_Available_Parts_Value() Thread.Sleep(50); var expectedResult = new string[] { "test1", "test2", "test3", "test4" }; - var actualResult = cfg.AvailableParts.OrderBy(x=>x).ToArray(); // items can be reordered in any way, so we need to sort them + var exclude = cfg.ReservedParts.ToHashSet(); + var actualResult = cfg.AvailableParts.OrderBy(x=>x).Where(x=>exclude.Contains(x) == false).ToArray(); // items can be reordered in any way, so we need to sort them Assert.Equal(expectedResult, actualResult); } diff --git a/src/Asv.Cfg.Test/InMemory/InMemoryConfigurationTest.cs b/src/Asv.Cfg.Test/InMemory/InMemoryConfigurationTest.cs index 6ad0bcf..c15fb4e 100644 --- a/src/Asv.Cfg.Test/InMemory/InMemoryConfigurationTest.cs +++ b/src/Asv.Cfg.Test/InMemory/InMemoryConfigurationTest.cs @@ -6,13 +6,12 @@ namespace Asv.Cfg.Test { [TestSubject(typeof(InMemoryConfiguration))] - public class InMemoryConfigurationTest(ITestOutputHelper log) : ConfigurationBaseTest + public class InMemoryConfigurationTest(ITestOutputHelper log) : ConfigurationBaseTest(log) { - private readonly ITestOutputHelper _log = log; protected override IDisposable CreateForTest(out InMemoryConfiguration configuration) { - configuration = new InMemoryConfiguration(new TestLogger(_log,TimeProvider.System, "IM_MEMORY")); + configuration = new InMemoryConfiguration(LogFactory.CreateLogger("IM_MEMORY")); var cfg = configuration; return Disposable.Create(() => {cfg.Dispose(); }); } diff --git a/src/Asv.Cfg.Test/Json/JsonConfigurationTest.cs b/src/Asv.Cfg.Test/Json/JsonConfigurationTest.cs index a2cd122..43bccde 100644 --- a/src/Asv.Cfg.Test/Json/JsonConfigurationTest.cs +++ b/src/Asv.Cfg.Test/Json/JsonConfigurationTest.cs @@ -58,7 +58,8 @@ public class TestMultiThreadClassFour [TestSubject(typeof(JsonConfiguration))] - public class JsonConfigurationTest(ITestOutputHelper log) : ConfigurationBaseTest + public class JsonConfigurationTest(ITestOutputHelper log) + : ConfigurationBaseTest(log) { private readonly IFileSystem _fileSystem = new MockFileSystem(); @@ -75,8 +76,7 @@ protected override IDisposable CreateForTest(out JsonConfiguration configuration _fileSystem.Directory.Delete(workingDir); } - log.WriteLine($"Working directory: {workingDir}"); - configuration = new JsonConfiguration(workingDir, logger:new TestLogger(log,TimeProvider.System, "JSON"), fileSystem: _fileSystem); + configuration = new JsonConfiguration(workingDir, logger:LogFactory.CreateLogger("JSON_CONFIG"), fileSystem: _fileSystem); var cfg = configuration; return Disposable.Create(() => { diff --git a/src/Asv.Cfg.Test/Json/JsonOneFileConfigurationTest.cs b/src/Asv.Cfg.Test/Json/JsonOneFileConfigurationTest.cs index 0fad9c2..95d3b20 100644 --- a/src/Asv.Cfg.Test/Json/JsonOneFileConfigurationTest.cs +++ b/src/Asv.Cfg.Test/Json/JsonOneFileConfigurationTest.cs @@ -13,7 +13,8 @@ namespace Asv.Cfg.Test { [TestSubject(typeof(JsonOneFileConfiguration))] - public class JsonOneFileConfigurationTest(ITestOutputHelper log) : ConfigurationBaseTest + public class JsonOneFileConfigurationTest(ITestOutputHelper log) + : ConfigurationBaseTest(log) { private readonly IFileSystem _fileSystem = new MockFileSystem(); @@ -24,7 +25,7 @@ protected override IDisposable CreateForTest(out JsonOneFileConfiguration config filePath, true, null, - logger:new TestLogger(log,TimeProvider.System, "JSON_ONE_FILE"), + logger:LogFactory.CreateLogger("JSON_ONE_FILE"), fileSystem: _fileSystem ); diff --git a/src/Asv.Cfg.Test/Json/ZipJsonConfigurationTest.cs b/src/Asv.Cfg.Test/Json/ZipJsonConfigurationTest.cs index 91fdbed..249bb18 100644 --- a/src/Asv.Cfg.Test/Json/ZipJsonConfigurationTest.cs +++ b/src/Asv.Cfg.Test/Json/ZipJsonConfigurationTest.cs @@ -11,7 +11,7 @@ namespace Asv.Cfg.Test { [TestSubject(typeof(ZipJsonConfiguration))] public class ZipJsonConfigurationTest(ITestOutputHelper log) - : ConfigurationBaseTest + : ConfigurationBaseTest(log) { private readonly IFileSystem _fileSystem = new MockFileSystem(); @@ -33,7 +33,7 @@ protected override IDisposable CreateForTest(out ZipJsonConfiguration configurat _fileSystem.Directory.CreateDirectory(dir ?? throw new InvalidOperationException()); } var file = _fileSystem.File.Open(filePath, FileMode.OpenOrCreate); - configuration = new ZipJsonConfiguration(file, true, new TestLogger(log,TimeProvider.System, "ZIP_JSON")); + configuration = new ZipJsonConfiguration(file, true, logger:LogFactory.CreateLogger("ZIP_JSON")); var cfg = configuration; return Disposable.Create(() => { diff --git a/src/Asv.Cfg.Test/Json/ZipJsonVersionedFileTest.cs b/src/Asv.Cfg.Test/Json/ZipJsonVersionedFileTest.cs index e683208..8983885 100644 --- a/src/Asv.Cfg.Test/Json/ZipJsonVersionedFileTest.cs +++ b/src/Asv.Cfg.Test/Json/ZipJsonVersionedFileTest.cs @@ -1,15 +1,20 @@ using System; +using System.IO; +using Asv.Common; using JetBrains.Annotations; +using R3; +using Xunit.Abstractions; namespace Asv.Cfg.Test; [TestSubject(typeof(ZipJsonVersionedFile))] -public class ZipJsonVersionedFileTest:ConfigurationBaseTest +public class ZipJsonVersionedFileTest(ITestOutputHelper log):ConfigurationBaseTest(log) { protected override IDisposable CreateForTest(out ZipJsonVersionedFile configuration) { - throw new NotImplementedException(); + configuration = new ZipJsonVersionedFile(new MemoryStream(), new SemVersion(1,0),"test",true, false, LogFactory.CreateLogger("ZIP_VERSION_JSON_CONFIG")); + return Disposable.Empty; } } \ No newline at end of file diff --git a/src/Asv.Cfg/IConfiguration.cs b/src/Asv.Cfg/IConfiguration.cs index c5b9d54..6f3c13e 100644 --- a/src/Asv.Cfg/IConfiguration.cs +++ b/src/Asv.Cfg/IConfiguration.cs @@ -62,6 +62,7 @@ public static void Remove(this IConfiguration src) public interface IConfiguration:IDisposable { + IEnumerable ReservedParts { get; } IEnumerable AvailableParts { get; } bool Exist(string key); TPocoType Get(string key, Lazy defaultValue); diff --git a/src/Asv.Cfg/InMemory/InMemoryConfiguration.cs b/src/Asv.Cfg/InMemory/InMemoryConfiguration.cs index b4aea3c..e4381df 100644 --- a/src/Asv.Cfg/InMemory/InMemoryConfiguration.cs +++ b/src/Asv.Cfg/InMemory/InMemoryConfiguration.cs @@ -27,6 +27,7 @@ public void Dispose() _onError.Dispose(); } + public IEnumerable ReservedParts => Array.Empty(); public IEnumerable AvailableParts => GetParts(); private IEnumerable GetParts() diff --git a/src/Asv.Cfg/Json/JsonConfiguration.cs b/src/Asv.Cfg/Json/JsonConfiguration.cs index 516c705..b9f33c3 100644 --- a/src/Asv.Cfg/Json/JsonConfiguration.cs +++ b/src/Asv.Cfg/Json/JsonConfiguration.cs @@ -46,7 +46,9 @@ private string GetFilePath(string key) { return _fileSystem.Path.Combine(_folderPath, $"{key}.json"); } - + + public IEnumerable ReservedParts => Array.Empty(); + public IEnumerable AvailableParts { get diff --git a/src/Asv.Cfg/Json/JsonOneFileConfiguration.cs b/src/Asv.Cfg/Json/JsonOneFileConfiguration.cs index c103751..25ad958 100644 --- a/src/Asv.Cfg/Json/JsonOneFileConfiguration.cs +++ b/src/Asv.Cfg/Json/JsonOneFileConfiguration.cs @@ -142,6 +142,7 @@ private void InternalSaveChanges(Unit unit) } } + public IEnumerable ReservedParts => Array.Empty(); public IEnumerable AvailableParts => _values.Keys; public bool Exist(string key) diff --git a/src/Asv.Cfg/Json/ZipJsonConfiguration.cs b/src/Asv.Cfg/Json/ZipJsonConfiguration.cs index 2e55887..58e561b 100644 --- a/src/Asv.Cfg/Json/ZipJsonConfiguration.cs +++ b/src/Asv.Cfg/Json/ZipJsonConfiguration.cs @@ -67,6 +67,7 @@ public IEnumerable AvailableParts } } + public virtual IEnumerable ReservedParts => Array.Empty(); public bool Exist(string key) { diff --git a/src/Asv.Cfg/Json/ZipJsonVersionedFile.cs b/src/Asv.Cfg/Json/ZipJsonVersionedFile.cs index cf0a009..83bb213 100644 --- a/src/Asv.Cfg/Json/ZipJsonVersionedFile.cs +++ b/src/Asv.Cfg/Json/ZipJsonVersionedFile.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.IO; using Asv.Common; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Asv.Cfg @@ -43,11 +45,19 @@ public interface IVersionedFile:IConfiguration SemVersion FileVersion { get; } } - public abstract class ZipJsonVersionedFile: ZipJsonConfiguration,IVersionedFile + public class ZipJsonVersionedFile: ZipJsonConfiguration,IVersionedFile { private readonly SemVersion _version; private const string InfoKey = "FileInfo"; - protected ZipJsonVersionedFile(Stream zipStream,SemVersion lastVersion, string fileType, bool createIfNotExist):base(zipStream) + + public ZipJsonVersionedFile( + Stream zipStream, + SemVersion lastVersion, + string fileType, + bool createIfNotExist, + bool leaveOpen = false, + ILogger? logger = null ) + :base(zipStream, leaveOpen,logger) { var info = Get(InfoKey, new Lazy(ZipJsonFileInfo.Empty)); string type; @@ -82,7 +92,8 @@ protected ZipJsonVersionedFile(Stream zipStream,SemVersion lastVersion, string f throw new Exception($"Unsupported file type. (Want '{fileType}', got '{type}')"); } } - + + public override IEnumerable ReservedParts => [InfoKey]; public SemVersion FileVersion => _version; } } diff --git a/src/Asv.IO.Test/Streams/TelnetStreamTest.cs b/src/Asv.IO.Test/Streams/TelnetStreamTest.cs index 70f1add..5c9aa95 100644 --- a/src/Asv.IO.Test/Streams/TelnetStreamTest.cs +++ b/src/Asv.IO.Test/Streams/TelnetStreamTest.cs @@ -17,7 +17,7 @@ public TelnetStreamTest(ITestOutputHelper output) { _output = output; } - [Fact] + [Fact(Skip = "Manual test")] public async Task ReadWriteMessageTest() { var message1 = "Ping";