From 5aef5382362462812414042cc367391aa146835c Mon Sep 17 00:00:00 2001 From: Mikael Koskinen Date: Wed, 30 Dec 2020 11:01:51 +0200 Subject: [PATCH] Updated tests to make sure that tests related to configuring default options doesn't cause side effects on other tests --- .../NotThreadSafeResourceCollection.cs | 7 + .../NugetFeedPluginCatalogTests.cs | 49 ++++-- .../NugetPackagePluginCatalogTests.cs | 52 +++--- .../AssemblyPluginCatalogTests.cs | 162 +++++++++--------- .../FolderCatalogTests.cs | 88 ++++++---- .../NotThreadSafeResourceCollection.cs | 4 +- 6 files changed, 206 insertions(+), 156 deletions(-) create mode 100644 tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NotThreadSafeResourceCollection.cs diff --git a/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NotThreadSafeResourceCollection.cs b/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NotThreadSafeResourceCollection.cs new file mode 100644 index 0000000..cbfe829 --- /dev/null +++ b/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NotThreadSafeResourceCollection.cs @@ -0,0 +1,7 @@ +using Xunit; + +namespace PluginFramework.Catalogs.NuGet.Tests +{ + [CollectionDefinition(nameof(NotThreadSafeResourceCollection), DisableParallelization = true)] + public class NotThreadSafeResourceCollection { } +} diff --git a/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetFeedPluginCatalogTests.cs b/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetFeedPluginCatalogTests.cs index 006649d..8ee99a1 100644 --- a/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetFeedPluginCatalogTests.cs +++ b/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetFeedPluginCatalogTests.cs @@ -94,28 +94,41 @@ public async Task CanConfigureNamingOptions() // Assert Assert.EndsWith("Modified", plugin.Name); } - - [Fact] - public async Task CanConfigureDefaultNamingOptions() + + [Collection(nameof(NotThreadSafeResourceCollection))] + public class DefaultOptions : IDisposable { - NugetFeedPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() + public DefaultOptions() { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" - }; - - // Arrange - var feed = new NuGetFeed("nuget.org", "https://api.nuget.org/v3/index.json"); - var catalog = new NugetFeedPluginCatalog(feed, searchTerm: "tags:mocking", maxPackages: 1, configureFinder: configure => + NugetFeedPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() + { + PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" + }; + } + + [Fact] + public async Task CanConfigureDefaultNamingOptions() { - configure.HasName("Moq.Range"); - }); - - // Act - await catalog.Initialize(); - var plugin = catalog.Single(); - // Assert - Assert.EndsWith("Modified", plugin.Name); + // Arrange + var feed = new NuGetFeed("nuget.org", "https://api.nuget.org/v3/index.json"); + var catalog = new NugetFeedPluginCatalog(feed, searchTerm: "tags:mocking", maxPackages: 1, configureFinder: configure => + { + configure.HasName("Moq.Range"); + }); + + // Act + await catalog.Initialize(); + var plugin = catalog.Single(); + + // Assert + Assert.EndsWith("Modified", plugin.Name); + } + + public void Dispose() + { + NugetFeedPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions(); + } } } } diff --git a/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetPackagePluginCatalogTests.cs b/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetPackagePluginCatalogTests.cs index 39ee329..7f806e3 100644 --- a/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetPackagePluginCatalogTests.cs +++ b/tests/integration/Weikio.PluginFramework.Catalogs.NuGet.Tests/NugetPackagePluginCatalogTests.cs @@ -92,26 +92,6 @@ public async Task CanConfigureNamingOptions() Assert.EndsWith("Modified", plugin.Name); } - [Fact] - public async Task CanConfigureDefaultNamingOptions() - { - NugetPluginCatalogOptions.Defaults.PluginNameOptions = - new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" }; - - // Arrange - var catalog = new NugetPackagePluginCatalog("Serilog", "2.9.0", configureFinder: configure => - { - configure.HasName("Serilog.Core.Logger"); - }); - - // Act - await catalog.Initialize(); - var plugin = catalog.Single(); - - // Assert - Assert.EndsWith("Modified", plugin.Name); - } - [Fact] public async Task InstallPackageWithDepencencies() { @@ -207,5 +187,37 @@ public async Task InstallPackageFromFeedUsingCustomNuGetConfig() // Assert Assert.NotEmpty(plugins); } + + [Collection(nameof(NotThreadSafeResourceCollection))] + public class DefaultOptions : IDisposable + { + public DefaultOptions() + { + NugetPluginCatalogOptions.Defaults.PluginNameOptions = + new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" }; + } + + [Fact] + public async Task CanConfigureDefaultNamingOptions() + { + // Arrange + var catalog = new NugetPackagePluginCatalog("Serilog", "2.9.0", configureFinder: configure => + { + configure.HasName("Serilog.Core.Logger"); + }); + + // Act + await catalog.Initialize(); + var plugin = catalog.Single(); + + // Assert + Assert.EndsWith("Modified", plugin.Name); + } + + public void Dispose() + { + NugetPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions(); + } + } } } diff --git a/tests/unit/Weikio.PluginFramework.Tests/AssemblyPluginCatalogTests.cs b/tests/unit/Weikio.PluginFramework.Tests/AssemblyPluginCatalogTests.cs index 689f772..9a04fbd 100644 --- a/tests/unit/Weikio.PluginFramework.Tests/AssemblyPluginCatalogTests.cs +++ b/tests/unit/Weikio.PluginFramework.Tests/AssemblyPluginCatalogTests.cs @@ -31,7 +31,7 @@ public async Task CanInitialize() Assert.NotEmpty(allPlugins); } - + [Fact] public async Task CanInitializeWithCriteria() { @@ -39,47 +39,24 @@ public async Task CanInitializeWithCriteria() { configure.HasName("*Plugin"); }); - + await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); Assert.Single(allPlugins); } - + [Fact] public async Task CanConfigureNamingOptions() { var options = new AssemblyPluginCatalogOptions() { - PluginNameOptions = new PluginNameOptions() - { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" - } + PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" } }; - - var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", options); - - await catalog.Initialize(); - var allPlugins = catalog.GetPlugins(); + var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", options); - foreach (var plugin in allPlugins) - { - Assert.EndsWith("Modified", plugin.Name); - } - } - - [Fact] - public async Task CanConfigureDefaultNamingOptions() - { - AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() - { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" - }; - - var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); - await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); @@ -89,44 +66,7 @@ public async Task CanConfigureDefaultNamingOptions() Assert.EndsWith("Modified", plugin.Name); } } - - [Fact] - public async Task CanOverrideDefaultNamingOptions() - { - AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() - { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" - }; - - var options = new AssemblyPluginCatalogOptions() - { - PluginNameOptions = new PluginNameOptions() - { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Overridden" - } - }; - - var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); - var catalog2 = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly2.dll", options); - - await catalog.Initialize(); - await catalog2.Initialize(); - var catalog1Plugins = catalog.GetPlugins(); - - foreach (var plugin in catalog1Plugins) - { - Assert.EndsWith("Modified", plugin.Name); - } - - var catalog2Plugins = catalog2.GetPlugins(); - - foreach (var plugin in catalog2Plugins) - { - Assert.EndsWith("Overridden", plugin.Name); - } - } - [Fact] public async Task ByDefaultOnlyContainsPublicNonAbstractClasses() { @@ -139,7 +79,7 @@ public async Task ByDefaultOnlyContainsPublicNonAbstractClasses() Assert.False(plugin.Type.IsAbstract); Assert.False(plugin.Type.IsInterface); } - + [Fact] public async Task CanIncludeAbstractClassesUsingCriteria() { @@ -147,7 +87,7 @@ public async Task CanIncludeAbstractClassesUsingCriteria() { builder.IsAbstract(true); }); - + await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); @@ -224,14 +164,13 @@ public async Task CanUseHostsDependencies() var newPlugin = folder1Catalog.Single(); var oldPlugin = folder2Catalog.Single(); - - + dynamic newPluginJsonResolver = Activator.CreateInstance(newPlugin); var newPluginVersion = newPluginJsonResolver.GetVersion(); - + dynamic oldPluginJsonResolver = Activator.CreateInstance(oldPlugin); var oldPluginVersion = oldPluginJsonResolver.GetVersion(); - + Assert.Equal("12.0.0.0", newPluginVersion); Assert.Equal("12.0.0.0", oldPluginVersion); } @@ -241,30 +180,91 @@ public async Task CanUseSelectedHoststDependencies() { // Make sure that the referenced version of JSON.NET is loaded into memory var json = Newtonsoft.Json.JsonConvert.SerializeObject(1); + // Make sure that the referenced version of Microsoft.Extensions.Logging is loaded into memory var logging = new Microsoft.Extensions.Logging.LoggerFactory(); - - var options = new AssemblyPluginCatalogOptions();; + + var options = new AssemblyPluginCatalogOptions(); + ; + options.PluginLoadContextOptions = new PluginLoadContextOptions() { UseHostApplicationAssemblies = UseHostApplicationAssembliesEnum.Selected, - HostApplicationAssemblies = new List() - { - typeof(Microsoft.Extensions.Logging.LoggerFactory).Assembly.GetName() - } + HostApplicationAssemblies = new List() { typeof(Microsoft.Extensions.Logging.LoggerFactory).Assembly.GetName() } }; - + var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\JsonOld\netstandard2.0\JsonNetOld.dll", options); await catalog.Initialize(); - + var oldPlugin = catalog.Single(); - + dynamic oldPluginJsonResolver = Activator.CreateInstance(oldPlugin); var oldPluginVersion = oldPluginJsonResolver.GetVersion(); var loggerVersion = oldPluginJsonResolver.GetLoggingVersion(); - + Assert.Equal("3.1.2.0", loggerVersion); Assert.Equal("9.0.0.0", oldPluginVersion); } + + [Collection(nameof(NotThreadSafeResourceCollection))] + public class DefaultOptions : IDisposable + { + public DefaultOptions() + { + AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() + { + PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" + }; + } + + [Fact] + public async Task CanConfigureDefaultNamingOptions() + { + var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); + + await catalog.Initialize(); + + var allPlugins = catalog.GetPlugins(); + + foreach (var plugin in allPlugins) + { + Assert.EndsWith("Modified", plugin.Name); + } + } + + [Fact] + public async Task CanOverrideDefaultNamingOptions() + { + var options = new AssemblyPluginCatalogOptions() + { + PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Overridden" } + }; + + var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); + var catalog2 = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly2.dll", options); + + await catalog.Initialize(); + await catalog2.Initialize(); + + var catalog1Plugins = catalog.GetPlugins(); + + foreach (var plugin in catalog1Plugins) + { + Assert.EndsWith("Modified", plugin.Name); + } + + var catalog2Plugins = catalog2.GetPlugins(); + + foreach (var plugin in catalog2Plugins) + { + Assert.EndsWith("Overridden", plugin.Name); + } + } + + public void Dispose() + { + AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions(); + } + } } } diff --git a/tests/unit/Weikio.PluginFramework.Tests/FolderCatalogTests.cs b/tests/unit/Weikio.PluginFramework.Tests/FolderCatalogTests.cs index 0f97eac..af61bab 100644 --- a/tests/unit/Weikio.PluginFramework.Tests/FolderCatalogTests.cs +++ b/tests/unit/Weikio.PluginFramework.Tests/FolderCatalogTests.cs @@ -61,43 +61,8 @@ public async Task CanConfigureNamingOptions() } } - [Fact] - public async Task CanConfigureDefaultNamingOptions() - { - FolderPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() - { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" - }; - - var catalog = new FolderPluginCatalog(_pluginFolder); - await catalog.Initialize(); - - var plugins = catalog.GetPlugins(); - - foreach (var plugin in plugins) - { - Assert.EndsWith("Modified", plugin.Name); - } - } - - [Fact] - public async Task DefaultAssemblyNamingOptionsDoesntAffectFolderCatalogs() - { - AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() - { - PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" - }; - var catalog = new FolderPluginCatalog(_pluginFolder); - await catalog.Initialize(); - - var plugins = catalog.GetPlugins(); - - foreach (var plugin in plugins) - { - Assert.False(plugin.Name.EndsWith("Modified")); - } - } + [Fact] public async Task CanUseReferencedDependencies() @@ -159,5 +124,56 @@ public async Task CanUseSelectedHoststDependencies() Assert.Equal("3.1.2.0", loggerVersion); Assert.Equal("9.0.0.0", oldPluginVersion); } + + [Collection(nameof(NotThreadSafeResourceCollection))] + public class DefaultOptions : IDisposable + { + public DefaultOptions() + { + FolderPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() + { + PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" + }; + } + + [Fact] + public async Task CanConfigureDefaultNamingOptions() + { + var catalog = new FolderPluginCatalog(_pluginFolder); + await catalog.Initialize(); + + var plugins = catalog.GetPlugins(); + + foreach (var plugin in plugins) + { + Assert.EndsWith("Modified", plugin.Name); + } + } + + [Fact] + public async Task DefaultAssemblyNamingOptionsDoesntAffectFolderCatalogs() + { + AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions() + { + PluginNameGenerator = (nameOptions, type) => type.FullName + "ModifiedAssembly" + }; + + var catalog = new FolderPluginCatalog(_pluginFolder); + await catalog.Initialize(); + + var plugins = catalog.GetPlugins(); + + foreach (var plugin in plugins) + { + Assert.False(plugin.Name.EndsWith("ModifiedAssembly")); + } + } + + public void Dispose() + { + AssemblyPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions(); + FolderPluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions(); + } + } } } diff --git a/tests/unit/Weikio.PluginFramework.Tests/NotThreadSafeResourceCollection.cs b/tests/unit/Weikio.PluginFramework.Tests/NotThreadSafeResourceCollection.cs index 9dcf8bd..c16c366 100644 --- a/tests/unit/Weikio.PluginFramework.Tests/NotThreadSafeResourceCollection.cs +++ b/tests/unit/Weikio.PluginFramework.Tests/NotThreadSafeResourceCollection.cs @@ -3,5 +3,7 @@ namespace Weikio.PluginFramework.Tests { [CollectionDefinition(nameof(NotThreadSafeResourceCollection), DisableParallelization = true)] - public class NotThreadSafeResourceCollection { } + public class NotThreadSafeResourceCollection + { + } }