From 17272e73a1cf3842c5efd6b79f2edfad99a1dba1 Mon Sep 17 00:00:00 2001 From: Dion Date: Wed, 17 Jan 2024 17:11:40 +0100 Subject: [PATCH] some fixes --- .../Query/Query.cs | 16 +++++-- .../Extensions/MemoryCacheExtensions.cs | 2 + .../EntityFrameworkExtensionsTest.cs | 33 ++++++-------- .../DataProtection/SqlXmlRepositoryTest.cs | 33 ++++++-------- .../Helpers/RunMigrationsTest.cs | 35 ++++++--------- .../NotificationQueryErrorTest.cs | 6 +-- .../QueryTest/QueryGetAllRecursiveTest.cs | 39 +++++++--------- .../QueryTest/QueryTest.cs | 2 + .../QueryTest/QueryUpdateItem_Error.cs | 45 ++++++++----------- .../Thumbnails/ThumbnailQueryErrorTest.cs | 39 +++++++--------- .../Helpers/MacOsTrashBindingHelperTest.cs | 3 +- 11 files changed, 111 insertions(+), 142 deletions(-) diff --git a/starsky/starsky.foundation.database/Query/Query.cs b/starsky/starsky.foundation.database/Query/Query.cs index 63dde37c52..a382022737 100644 --- a/starsky/starsky.foundation.database/Query/Query.cs +++ b/starsky/starsky.foundation.database/Query/Query.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; @@ -278,7 +279,10 @@ async Task LocalQuery(ApplicationDbContext context, FileIndexItem fileIndexItem) /// same item public async Task> UpdateItemAsync(List updateStatusContentList) { - if ( !updateStatusContentList.Any() ) return new List(); + if ( updateStatusContentList.Count == 0 ) + { + return new List(); + } async Task> LocalQuery(DbContext context, List fileIndexItems) { @@ -430,7 +434,8 @@ internal void AddCacheItem(FileIndexItem updateStatusContent) if (!_cache.TryGetValue(queryCacheName, out var objectFileFolders)) return; - var displayFileFolders = (List?) objectFileFolders; + objectFileFolders ??= new List(); + var displayFileFolders = (List) objectFileFolders; if ( updateStatusContent.FilePath == "/" ) { @@ -471,7 +476,8 @@ public void CacheUpdateItem(List updateStatusContent) skippedCacheItems.Add(item.ParentDirectory!); continue; } - + + objectFileFolders ??= new List(); var displayFileFolders = (List) objectFileFolders; // make it a list to avoid enum errors @@ -499,7 +505,7 @@ public void CacheUpdateItem(List updateStatusContent) _cache.Set(queryCacheName, displayFileFolders, new TimeSpan(1,0,0)); } - if ( skippedCacheItems.Any() && _appSettings.Verbose == true ) + if ( skippedCacheItems.Count >= 1 && _appSettings.Verbose == true ) { _logger.LogInformation($"[CacheUpdateItem] skipped: {string.Join(", ", skippedCacheItems)}"); } @@ -536,7 +542,9 @@ public void RemoveCacheItem(FileIndexItem updateStatusContent) if (!_cache.TryGetValue(queryCacheName, out var objectFileFolders)) return; + objectFileFolders ??= new List(); var displayFileFolders = (List) objectFileFolders; + // Order by filename displayFileFolders = displayFileFolders .Where(p => p.FilePath != updateStatusContent.FilePath) diff --git a/starsky/starsky.foundation.platform/Extensions/MemoryCacheExtensions.cs b/starsky/starsky.foundation.platform/Extensions/MemoryCacheExtensions.cs index cdacf391b0..5abfde895f 100644 --- a/starsky/starsky.foundation.platform/Extensions/MemoryCacheExtensions.cs +++ b/starsky/starsky.foundation.platform/Extensions/MemoryCacheExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Reflection.Emit; @@ -11,6 +12,7 @@ namespace starsky.foundation.platform.Extensions /// /// @see: https://stackoverflow.com/a/64291008 /// + [SuppressMessage("Usage", "S3011:Make sure that this accessibility bypass is safe here", Justification = "Safe")] public static class MemoryCacheExtensions { private static readonly Lazy> GetCoherentState = diff --git a/starsky/starskytest/Extensions/EntityFrameworkExtensionsTest.cs b/starsky/starskytest/Extensions/EntityFrameworkExtensionsTest.cs index 84ef6c44f7..f42d010ce3 100644 --- a/starsky/starskytest/Extensions/EntityFrameworkExtensionsTest.cs +++ b/starsky/starskytest/Extensions/EntityFrameworkExtensionsTest.cs @@ -92,29 +92,22 @@ public AppDbMySqlException(DbContextOptions options) : base(options) private static MySqlException CreateMySqlException(string message) { - var info = new SerializationInfo(typeof(Exception), - new FormatterConverter()); - info.AddValue("Number", 1); - info.AddValue("SqlState", "SqlState"); - info.AddValue("Message", message); - info.AddValue("InnerException", new Exception()); - info.AddValue("HelpURL", ""); - info.AddValue("StackTraceString", ""); - info.AddValue("RemoteStackTraceString", ""); - info.AddValue("RemoteStackIndex", 1); - info.AddValue("HResult", 1); - info.AddValue("Source", ""); - info.AddValue("WatsonBuckets", Array.Empty() ); - - // private MySqlException(SerializationInfo info, StreamingContext context) - var ctor = - typeof(MySqlException).GetConstructors(BindingFlags.Instance | - BindingFlags.NonPublic | BindingFlags.InvokeMethod).FirstOrDefault(); + // MySqlErrorCode errorCode, string? sqlState, string message, Exception? innerException + + var ctorLIst = + typeof(MySqlException).GetConstructors( + BindingFlags.Instance | + BindingFlags.NonPublic | BindingFlags.InvokeMethod); + var ctor = ctorLIst.FirstOrDefault(p => + p.ToString() == "Void .ctor(MySqlConnector.MySqlErrorCode, System.String, System.String, System.Exception)" ); + var instance = ( MySqlException ) ctor?.Invoke(new object[] { - info, - new StreamingContext(StreamingContextStates.All) + MySqlErrorCode.AccessDenied, + "test", + message, + new Exception() }); return instance; } diff --git a/starsky/starskytest/starsky.foundation.database/DataProtection/SqlXmlRepositoryTest.cs b/starsky/starskytest/starsky.foundation.database/DataProtection/SqlXmlRepositoryTest.cs index 588979d6a9..32651457e3 100644 --- a/starsky/starskytest/starsky.foundation.database/DataProtection/SqlXmlRepositoryTest.cs +++ b/starsky/starskytest/starsky.foundation.database/DataProtection/SqlXmlRepositoryTest.cs @@ -65,29 +65,22 @@ public void SqlXmlRepositoryTest_ExpectedException_NullReferenceException() private static MySqlException CreateMySqlException(string message) { - var info = new SerializationInfo(typeof(Exception), - new FormatterConverter()); - info.AddValue("Number", 1); - info.AddValue("SqlState", "SqlState"); - info.AddValue("Message", message); - info.AddValue("InnerException", new Exception()); - info.AddValue("HelpURL", ""); - info.AddValue("StackTraceString", ""); - info.AddValue("RemoteStackTraceString", ""); - info.AddValue("RemoteStackIndex", 1); - info.AddValue("HResult", 1); - info.AddValue("Source", ""); - info.AddValue("WatsonBuckets", Array.Empty() ); - - // private MySqlException(SerializationInfo info, StreamingContext context) - var ctor = - typeof(MySqlException).GetConstructors(BindingFlags.Instance | - BindingFlags.NonPublic | BindingFlags.InvokeMethod).FirstOrDefault(); + // MySqlErrorCode errorCode, string? sqlState, string message, Exception? innerException + + var ctorLIst = + typeof(MySqlException).GetConstructors( + BindingFlags.Instance | + BindingFlags.NonPublic | BindingFlags.InvokeMethod); + var ctor = ctorLIst.FirstOrDefault(p => + p.ToString() == "Void .ctor(MySqlConnector.MySqlErrorCode, System.String, System.String, System.Exception)" ); + var instance = ( MySqlException ) ctor?.Invoke(new object[] { - info, - new StreamingContext(StreamingContextStates.All) + MySqlErrorCode.AccessDenied, + "test", + message, + new Exception() }); return instance; } diff --git a/starsky/starskytest/starsky.foundation.database/Helpers/RunMigrationsTest.cs b/starsky/starskytest/starsky.foundation.database/Helpers/RunMigrationsTest.cs index 7cd754de06..7d9be63e9e 100644 --- a/starsky/starskytest/starsky.foundation.database/Helpers/RunMigrationsTest.cs +++ b/starsky/starskytest/starsky.foundation.database/Helpers/RunMigrationsTest.cs @@ -49,29 +49,22 @@ public async Task Test() private static MySqlException CreateMySqlException(string message) { - var info = new SerializationInfo(typeof(Exception), - new FormatterConverter()); - info.AddValue("Number", 1); - info.AddValue("SqlState", "SqlState"); - info.AddValue("Message", message); - info.AddValue("InnerException", new Exception()); - info.AddValue("HelpURL", ""); - info.AddValue("StackTraceString", ""); - info.AddValue("RemoteStackTraceString", ""); - info.AddValue("RemoteStackIndex", 1); - info.AddValue("HResult", 1); - info.AddValue("Source", ""); - info.AddValue("WatsonBuckets", Array.Empty() ); - - // private MySqlException(SerializationInfo info, StreamingContext context) - var ctor = - typeof(MySqlException).GetConstructors(BindingFlags.Instance | - BindingFlags.NonPublic | BindingFlags.InvokeMethod).FirstOrDefault(); + // MySqlErrorCode errorCode, string? sqlState, string message, Exception? innerException + + var ctorLIst = + typeof(MySqlException).GetConstructors( + BindingFlags.Instance | + BindingFlags.NonPublic | BindingFlags.InvokeMethod); + var ctor = ctorLIst.FirstOrDefault(p => + p.ToString() == "Void .ctor(MySqlConnector.MySqlErrorCode, System.String, System.String, System.Exception)" ); + var instance = - ( MySqlException ) ctor.Invoke(new object[] + ( MySqlException ) ctor?.Invoke(new object[] { - info, - new StreamingContext(StreamingContextStates.All) + MySqlErrorCode.AccessDenied, + "test", + message, + new Exception() }); return instance; } diff --git a/starsky/starskytest/starsky.foundation.database/NotificationsTest/NotificationQueryErrorTest.cs b/starsky/starskytest/starsky.foundation.database/NotificationsTest/NotificationQueryErrorTest.cs index b6649a3376..3fc4245676 100644 --- a/starsky/starskytest/starsky.foundation.database/NotificationsTest/NotificationQueryErrorTest.cs +++ b/starsky/starskytest/starsky.foundation.database/NotificationsTest/NotificationQueryErrorTest.cs @@ -100,14 +100,14 @@ public bool IsConceptualNull(IProperty property) throw new NotImplementedException(); } +#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. public DbContext Context { get; } -#pragma warning disable 8618 // ReSharper disable once UnassignedGetOnlyAutoProperty public IEntityType EntityType { get; } -#pragma warning restore 8618 + public EntityState EntityState { get; set; } -#pragma warning disable 8618 + // ReSharper disable once UnassignedGetOnlyAutoProperty public IUpdateEntry SharedIdentityEntry { get; } #pragma warning restore 8618 diff --git a/starsky/starskytest/starsky.foundation.database/QueryTest/QueryGetAllRecursiveTest.cs b/starsky/starskytest/starsky.foundation.database/QueryTest/QueryGetAllRecursiveTest.cs index b7216e8b9f..767d04c250 100644 --- a/starsky/starskytest/starsky.foundation.database/QueryTest/QueryGetAllRecursiveTest.cs +++ b/starsky/starskytest/starsky.foundation.database/QueryTest/QueryGetAllRecursiveTest.cs @@ -77,31 +77,24 @@ await _query.AddItemAsync( private static MySqlException CreateMySqlException(string message) { - var info = new SerializationInfo(typeof(Exception), - new FormatterConverter()); - info.AddValue("Number", 1); - info.AddValue("SqlState", "SqlState"); - info.AddValue("Message", message); - info.AddValue("InnerException", new Exception()); - info.AddValue("HelpURL", ""); - info.AddValue("StackTraceString", ""); - info.AddValue("RemoteStackTraceString", ""); - info.AddValue("RemoteStackIndex", 1); - info.AddValue("HResult", 1); - info.AddValue("Source", ""); - info.AddValue("WatsonBuckets", Array.Empty() ); - - // private MySqlException(SerializationInfo info, StreamingContext context) - var ctor = - typeof(MySqlException).GetConstructors(BindingFlags.Instance | - BindingFlags.NonPublic | BindingFlags.InvokeMethod).FirstOrDefault(); + // MySqlErrorCode errorCode, string? sqlState, string message, Exception? innerException + + var ctorLIst = + typeof(MySqlException).GetConstructors( + BindingFlags.Instance | + BindingFlags.NonPublic | BindingFlags.InvokeMethod); + var ctor = ctorLIst.FirstOrDefault(p => + p.ToString() == "Void .ctor(MySqlConnector.MySqlErrorCode, System.String, System.String, System.Exception)" ); + var instance = - ( MySqlException? ) ctor?.Invoke(new object[] + ( MySqlException ) ctor?.Invoke(new object[] { - info, - new StreamingContext(StreamingContextStates.All) - }); - return instance!; + MySqlErrorCode.AccessDenied, + "test", + message, + new Exception() + })!; + return instance; } private static bool IsCalledMySqlSaveDbExceptionContext { get; set; } diff --git a/starsky/starskytest/starsky.foundation.database/QueryTest/QueryTest.cs b/starsky/starskytest/starsky.foundation.database/QueryTest/QueryTest.cs index d4a19ea938..8364f825bd 100644 --- a/starsky/starskytest/starsky.foundation.database/QueryTest/QueryTest.cs +++ b/starsky/starskytest/starsky.foundation.database/QueryTest/QueryTest.cs @@ -1102,9 +1102,11 @@ public void QueryFolder_Add_And_UpdateFolderCache_UpdateCacheItemTest() public void CacheUpdateItem_Skip_ShouldSetItem() { var item1 = new FileIndexItem {Id = 400, Tags = "hi", FileName = "cache"}; + // already verbose _query.CacheUpdateItem(new List{item1}); + Assert.IsTrue(_logger.TrackedInformation.Any()); Assert.IsTrue(_logger.TrackedInformation.FirstOrDefault().Item2.Contains("[CacheUpdateItem]")); } diff --git a/starsky/starskytest/starsky.foundation.database/QueryTest/QueryUpdateItem_Error.cs b/starsky/starskytest/starsky.foundation.database/QueryTest/QueryUpdateItem_Error.cs index d2e75192b2..f2e66b66f1 100644 --- a/starsky/starskytest/starsky.foundation.database/QueryTest/QueryUpdateItem_Error.cs +++ b/starsky/starskytest/starsky.foundation.database/QueryTest/QueryUpdateItem_Error.cs @@ -121,14 +121,14 @@ public bool IsConceptualNull(IProperty property) throw new NotImplementedException(); } +#pragma warning disable 8618 public DbContext Context { get; } -#pragma warning disable 8618 // ReSharper disable once UnassignedGetOnlyAutoProperty public IEntityType EntityType { get; } -#pragma warning restore 8618 + public EntityState EntityState { get; set; } -#pragma warning disable 8618 + // ReSharper disable once UnassignedGetOnlyAutoProperty public IUpdateEntry SharedIdentityEntry { get; } #pragma warning restore 8618 @@ -310,31 +310,24 @@ public override Task SaveChangesAsync(CancellationToken cancellationToken = private static MySqlException CreateMySqlException(string message) { - var info = new SerializationInfo(typeof(Exception), - new FormatterConverter()); - info.AddValue("Number", 1); - info.AddValue("SqlState", "SqlState"); - info.AddValue("Message", message); - info.AddValue("InnerException", new Exception()); - info.AddValue("HelpURL", ""); - info.AddValue("StackTraceString", ""); - info.AddValue("RemoteStackTraceString", ""); - info.AddValue("RemoteStackIndex", 1); - info.AddValue("HResult", 1); - info.AddValue("Source", ""); - info.AddValue("WatsonBuckets", Array.Empty() ); - - // private MySqlException(SerializationInfo info, StreamingContext context) - var ctor = - typeof(MySqlException).GetConstructors(BindingFlags.Instance | - BindingFlags.NonPublic | BindingFlags.InvokeMethod).FirstOrDefault(); + // MySqlErrorCode errorCode, string? sqlState, string message, Exception? innerException + + var ctorLIst = + typeof(MySqlException).GetConstructors( + BindingFlags.Instance | + BindingFlags.NonPublic | BindingFlags.InvokeMethod); + var ctor = ctorLIst.FirstOrDefault(p => + p.ToString() == "Void .ctor(MySqlConnector.MySqlErrorCode, System.String, System.String, System.Exception)" ); + var instance = - ( MySqlException? ) ctor?.Invoke(new object[] + ( MySqlException ) ctor?.Invoke(new object[] { - info, - new StreamingContext(StreamingContextStates.All) - }); - return instance!; + MySqlErrorCode.AccessDenied, + "test", + message, + new Exception() + })!; + return instance; } [TestMethod] diff --git a/starsky/starskytest/starsky.foundation.database/Thumbnails/ThumbnailQueryErrorTest.cs b/starsky/starskytest/starsky.foundation.database/Thumbnails/ThumbnailQueryErrorTest.cs index d7b068b778..71d07e435c 100644 --- a/starsky/starskytest/starsky.foundation.database/Thumbnails/ThumbnailQueryErrorTest.cs +++ b/starsky/starskytest/starsky.foundation.database/Thumbnails/ThumbnailQueryErrorTest.cs @@ -208,31 +208,24 @@ public async Task ThumbnailQuery_3ConcurrencyException() private static MySqlException CreateMySqlException(string message) { - var info = new SerializationInfo(typeof(Exception), - new FormatterConverter()); - info.AddValue("Number", 1); - info.AddValue("SqlState", "SqlState"); - info.AddValue("Message", message); - info.AddValue("InnerException", new Exception()); - info.AddValue("HelpURL", ""); - info.AddValue("StackTraceString", ""); - info.AddValue("RemoteStackTraceString", ""); - info.AddValue("RemoteStackIndex", 1); - info.AddValue("HResult", 1); - info.AddValue("Source", ""); - info.AddValue("WatsonBuckets", Array.Empty() ); - - // private MySqlException(SerializationInfo info, StreamingContext context) - var ctor = - typeof(MySqlException).GetConstructors(BindingFlags.Instance | - BindingFlags.NonPublic | BindingFlags.InvokeMethod).FirstOrDefault(); + // MySqlErrorCode errorCode, string? sqlState, string message, Exception? innerException + + var ctorLIst = + typeof(MySqlException).GetConstructors( + BindingFlags.Instance | + BindingFlags.NonPublic | BindingFlags.InvokeMethod); + var ctor = ctorLIst.FirstOrDefault(p => + p.ToString() == "Void .ctor(MySqlConnector.MySqlErrorCode, System.String, System.String, System.Exception)" ); + var instance = - ( MySqlException? ) ctor?.Invoke(new object[] + ( MySqlException ) ctor?.Invoke(new object[] { - info, - new StreamingContext(StreamingContextStates.All) - }); - return instance!; + MySqlErrorCode.AccessDenied, + "test", + message, + new Exception() + })!; + return instance; } private static bool IsCalledMySqlSaveDbExceptionContext { get; set; } diff --git a/starsky/starskytest/starsky.foundation.native/Trash/Helpers/MacOsTrashBindingHelperTest.cs b/starsky/starskytest/starsky.foundation.native/Trash/Helpers/MacOsTrashBindingHelperTest.cs index 96acdadaad..c6b9c411ab 100644 --- a/starsky/starskytest/starsky.foundation.native/Trash/Helpers/MacOsTrashBindingHelperTest.cs +++ b/starsky/starskytest/starsky.foundation.native/Trash/Helpers/MacOsTrashBindingHelperTest.cs @@ -6,11 +6,10 @@ using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using starsky.foundation.native.Helpers; -using starsky.foundation.native.Trash; using starsky.foundation.native.Trash.Helpers; using starskytest.FakeCreateAn; -namespace starskytest.starsky.foundation.native.Trash; +namespace starskytest.starsky.foundation.native.Trash.Helpers; [TestClass] public class MacOsTrashBindingHelperTest