From 985e1276322ee1916071d4e9aee37fb4912c36f4 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:11:01 +0100 Subject: [PATCH] refactor(#603): Add default console logger --- .../DockerEndpointAuthenticationProvider.cs | 7 +- .../Clients/DockerImageOperations.cs | 4 +- .../Configurations/TestcontainersSettings.cs | 3 +- .../Containers/TestcontainersContainer.cs | 2 +- src/Testcontainers/Logger.cs | 116 ++++++++++++++++++ src/Testcontainers/Logging.cs | 12 +- .../Networks/NonExistingDockerNetwork.cs | 2 - .../CustomSerilogLoggerFactory.cs | 19 --- tests/Testcontainers.Tests/Initialization.cs | 28 ----- tests/Testcontainers.Tests/Initialized.cs | 39 ------ .../SkipOnLinuxEngineAttribute.cs | 8 +- ...ockerEndpointAuthenticationProviderTest.cs | 5 +- .../TestcontainersAccessInformationTest.cs | 1 - .../Databases/AzuriteTestcontainerTest.cs | 6 - .../Databases/CosmosDbTestcontainerTest.cs | 1 - .../Databases/CouchDbTestcontainerTest.cs | 1 - .../Databases/CouchbaseTestcontainerTest.cs | 1 - .../ElasticsearchTestcontainerTest.cs | 1 - .../Databases/MariaDbTestcontainerTest.cs | 1 - .../Databases/MongoDbTestcontainerTest.cs | 1 - .../Databases/MsSqlTestcontainerTest.cs | 1 - .../Databases/MySqlTestcontainerTest.cs | 2 - .../Databases/Neo4jTestcontainerTest.cs | 1 - .../Databases/OracleTestcontainerTest.cs | 1 - .../Databases/PostgreSqlTestcontainerTest.cs | 1 - .../Databases/RedisTestcontainerTest.cs | 1 - .../MessageBrokers/KafkaTestcontainerTest.cs | 1 - .../LocalStackTestcontainerTest.cs | 1 - .../RabbitMqTestcontainerTest.cs | 1 - ...TestcontainersContainerCancellationTest.cs | 1 - .../Unix/TestcontainersContainerTest.cs | 5 +- .../Windows/TestcontainersContainerTest.cs | 1 - .../Unit/Images/IgnoreFileTest.cs | 1 - .../Unit/Images/ImageFromDockerfileTest.cs | 1 - .../Networks/TestcontainersNetworkTest.cs | 1 - .../Unit/Volumes/TestcontainersVolumeTest.cs | 1 - 36 files changed, 143 insertions(+), 136 deletions(-) create mode 100644 src/Testcontainers/Logger.cs delete mode 100644 tests/Testcontainers.Tests/CustomSerilogLoggerFactory.cs delete mode 100644 tests/Testcontainers.Tests/Initialization.cs delete mode 100644 tests/Testcontainers.Tests/Initialized.cs diff --git a/src/Testcontainers/Builders/DockerEndpointAuthenticationProvider.cs b/src/Testcontainers/Builders/DockerEndpointAuthenticationProvider.cs index dcd516dd5..6493ef8f5 100644 --- a/src/Testcontainers/Builders/DockerEndpointAuthenticationProvider.cs +++ b/src/Testcontainers/Builders/DockerEndpointAuthenticationProvider.cs @@ -33,7 +33,12 @@ public virtual bool IsAvailable() { try { - TaskFactory.StartNew(() => dockerClient.System.PingAsync()).Unwrap().GetAwaiter().GetResult(); + TaskFactory.StartNew(() => dockerClient.System.PingAsync()) + .Unwrap() + .ConfigureAwait(false) + .GetAwaiter() + .GetResult(); + return true; } catch (Exception) diff --git a/src/Testcontainers/Clients/DockerImageOperations.cs b/src/Testcontainers/Clients/DockerImageOperations.cs index def74cfef..4b8b9d230 100644 --- a/src/Testcontainers/Clients/DockerImageOperations.cs +++ b/src/Testcontainers/Clients/DockerImageOperations.cs @@ -120,7 +120,9 @@ await this.DeleteAsync(image, ct) await this.Docker.Images.BuildImageFromDockerfileAsync(buildParameters, dockerfileStream, Array.Empty(), new Dictionary(), this.traceProgress, ct) .ConfigureAwait(false); - var imageHasBeenCreated = await this.ExistsWithNameAsync(image.FullName, ct).ConfigureAwait(false); + var imageHasBeenCreated = await this.ExistsWithNameAsync(image.FullName, ct) + .ConfigureAwait(false); + if (!imageHasBeenCreated) { throw new InvalidOperationException($"Docker image {image.FullName} has not been created."); diff --git a/src/Testcontainers/Configurations/TestcontainersSettings.cs b/src/Testcontainers/Configurations/TestcontainersSettings.cs index 9690ade22..59cac97aa 100644 --- a/src/Testcontainers/Configurations/TestcontainersSettings.cs +++ b/src/Testcontainers/Configurations/TestcontainersSettings.cs @@ -10,7 +10,6 @@ namespace DotNet.Testcontainers.Configurations using DotNet.Testcontainers.Images; using JetBrains.Annotations; using Microsoft.Extensions.Logging; - using Microsoft.Extensions.Logging.Abstractions; /// /// This class represents the Testcontainers settings. @@ -83,7 +82,7 @@ static TestcontainersSettings() [PublicAPI] [NotNull] public static ILogger Logger { get; set; } - = NullLogger.Instance; + = new Logger(); /// /// Gets or sets the host operating system. diff --git a/src/Testcontainers/Containers/TestcontainersContainer.cs b/src/Testcontainers/Containers/TestcontainersContainer.cs index 2b2a199d9..978779627 100644 --- a/src/Testcontainers/Containers/TestcontainersContainer.cs +++ b/src/Testcontainers/Containers/TestcontainersContainer.cs @@ -376,7 +376,7 @@ private void ThrowIfContainerHasNotBeenCreated() private string GetContainerGateway() { - const string localhost = "localhost"; + const string localhost = "127.0.0.1"; if (!ContainerHasBeenCreatedStates.HasFlag(this.State)) { diff --git a/src/Testcontainers/Logger.cs b/src/Testcontainers/Logger.cs new file mode 100644 index 000000000..a17197083 --- /dev/null +++ b/src/Testcontainers/Logger.cs @@ -0,0 +1,116 @@ +namespace DotNet.Testcontainers +{ + using System; + using System.Diagnostics; + using System.Globalization; + using System.IO; + using System.Runtime.InteropServices; + using Microsoft.Extensions.Logging; + + /// + /// An implementation that forwards messages to the console. + /// Not every test framework or environment supports this approach. + /// Developers may still need to configure their own logging implementation. + /// If VSTest.Console.exe loads the test adapter in a deterministic order, + /// we can write our own test adapter and intercept the IMessageLogger instance: + /// https://github.com/microsoft/vstest/issues/4125#issuecomment-1320880502. + /// To debug the test host and runner set the environment variables VSTEST_HOST_DEBUG and VSTEST_RUNNER_DEBUG to 1. + /// To enable VSTest logging set VSTEST_DIAG to 1 and VSTEST_DIAG_VERBOSITY to verbose. + /// The following example contains the ITestExecutor implementations. It is important that the assembly ends with TestAdapter.dll. + /// + /// + /// + /// [FileExtension(DllFileExtension)] + /// [FileExtension(ExeFileExtension)] + /// [DefaultExecutorUri(ExecutorUri)] + /// [ExtensionUri(ExecutorUri)] + /// [Category(Category)] + /// internal sealed class UssDiscovery : ITestDiscoverer, ITestExecutor + /// { + /// private const string DllFileExtension = ".dll"; + /// + /// private const string ExeFileExtension = ".exe"; + /// + /// private const string ExecutorUri = "executor://testcontainers.org/v1"; + /// + /// private const string Category = "managed"; + /// + /// public void DiscoverTests(IEnumerable<string> sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink) + /// { + /// } + /// + /// public void RunTests(IEnumerable<TestCase> tests, IRunContext runContext, IFrameworkHandle frameworkHandle) + /// { + /// SetLogger(frameworkHandle); + /// } + /// + /// public void RunTests(IEnumerable<string> sources, IRunContext runContext, IFrameworkHandle frameworkHandle) + /// { + /// SetLogger(frameworkHandle); + /// } + /// + /// public void Cancel() + /// { + /// } + /// + /// private static void SetLogger(IMessageLogger logger) + /// { + /// // Set the TestcontainersSettings.Logger. Use a semaphore to block the test execution until the logger is set. + /// } + /// } + /// + /// + internal sealed class Logger : ILogger, IDisposable + { + private readonly Stopwatch stopwatch = Stopwatch.StartNew(); + + public Logger() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && !Console.IsOutputRedirected && !Console.IsErrorRedirected) + { + Console.BufferWidth = short.MaxValue - 1; + } + } + + public void Dispose() + { + } + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) + { + TextWriter console; + + switch (logLevel) + { + case LogLevel.Information: + console = Console.Out; + break; + case LogLevel.Warning: + console = Console.Out; + break; + case LogLevel.Error: + console = Console.Error; + break; + case LogLevel.Critical: + console = Console.Error; + break; + default: + console = TextWriter.Null; + break; + } + + var message = string.Format(CultureInfo.CurrentCulture, "[testcontainers.org {0:hh\\:mm\\:ss\\.ff}] {1}", this.stopwatch.Elapsed, formatter.Invoke(state, exception)); + console.WriteLine(message); + } + + public bool IsEnabled(LogLevel logLevel) + { + return true; + } + + public IDisposable BeginScope(TState state) + { + return this; + } + } +} diff --git a/src/Testcontainers/Logging.cs b/src/Testcontainers/Logging.cs index 40b4252c6..6d4aa2a6b 100644 --- a/src/Testcontainers/Logging.cs +++ b/src/Testcontainers/Logging.cs @@ -33,16 +33,16 @@ internal static class Logging = LoggerMessage.Define(LogLevel.Information, default, "Delete Docker container {Id}"); private static readonly Action _ExtractArchiveToDockerContainer - = LoggerMessage.Define(LogLevel.Information, default, "Copy tar archive to {Path} at Docker container {Id}"); + = LoggerMessage.Define(LogLevel.Information, default, "Copy tar archive to \"{Path}\" at Docker container {Id}"); private static readonly Action _GetArchiveFromDockerContainer - = LoggerMessage.Define(LogLevel.Information, default, "Read {Path} from Docker container {Id}"); + = LoggerMessage.Define(LogLevel.Information, default, "Read \"{Path}\" from Docker container {Id}"); private static readonly Action _AttachToDockerContainer = LoggerMessage.Define(LogLevel.Information, default, "Attach {OutputConsumer} at Docker container {Id}"); - private static readonly Action, string, Exception> _ExecuteCommandInDockerContainer - = LoggerMessage.Define, string>(LogLevel.Information, default, "Execute {Command} at Docker container {Id}"); + private static readonly Action _ExecuteCommandInDockerContainer + = LoggerMessage.Define(LogLevel.Information, default, "Execute \"{Command}\" at Docker container {Id}"); private static readonly Action _DockerImageCreated = LoggerMessage.Define(LogLevel.Information, default, "Docker image {FullName} created"); @@ -75,7 +75,7 @@ internal static class Logging = LoggerMessage.Define(LogLevel.Debug, default, "Lost connection to resource reaper {Id} at {Endpoint}"); private static readonly Action _DockerConfigFileNotFound - = LoggerMessage.Define(LogLevel.Information, default, "Docker config {DockerConfigFilePath} not found"); + = LoggerMessage.Define(LogLevel.Information, default, "Docker config \"{DockerConfigFilePath}\" not found"); private static readonly Action _SearchingDockerRegistryCredential = LoggerMessage.Define(LogLevel.Information, default, "Searching Docker registry credential in {CredentialStore}"); @@ -144,7 +144,7 @@ public static void AttachToDockerContainer(this ILogger logger, string id, Type public static void ExecuteCommandInDockerContainer(this ILogger logger, string id, IEnumerable command) { - _ExecuteCommandInDockerContainer(logger, command, id, null); + _ExecuteCommandInDockerContainer(logger, string.Join(" ", command), id, null); } public static void DockerImageCreated(this ILogger logger, IDockerImage image) diff --git a/src/Testcontainers/Networks/NonExistingDockerNetwork.cs b/src/Testcontainers/Networks/NonExistingDockerNetwork.cs index e438e683a..f509f6800 100644 --- a/src/Testcontainers/Networks/NonExistingDockerNetwork.cs +++ b/src/Testcontainers/Networks/NonExistingDockerNetwork.cs @@ -1,8 +1,6 @@ namespace DotNet.Testcontainers.Networks { using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; using System.Threading; using System.Threading.Tasks; using Docker.DotNet.Models; diff --git a/tests/Testcontainers.Tests/CustomSerilogLoggerFactory.cs b/tests/Testcontainers.Tests/CustomSerilogLoggerFactory.cs deleted file mode 100644 index 77fda7aeb..000000000 --- a/tests/Testcontainers.Tests/CustomSerilogLoggerFactory.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace DotNet.Testcontainers.Tests -{ - using Microsoft.Extensions.Configuration; - using Serilog; - using Serilog.Extensions.Logging; - - internal sealed class CustomSerilogLoggerFactory : SerilogLoggerFactory - { - public CustomSerilogLoggerFactory(IConfiguration configuration) - : base( - new LoggerConfiguration() - .ReadFrom - .Configuration(configuration) - .CreateLogger(), - true) - { - } - } -} diff --git a/tests/Testcontainers.Tests/Initialization.cs b/tests/Testcontainers.Tests/Initialization.cs deleted file mode 100644 index f7a09f949..000000000 --- a/tests/Testcontainers.Tests/Initialization.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace DotNet.Testcontainers.Tests -{ - using System.Threading; - using System.Threading.Tasks; - using DotNet.Testcontainers.Configurations; - using Microsoft.Extensions.Hosting; - using Microsoft.Extensions.Logging; - using Xunit; - - public sealed class Initialization : IHostedService - { - public Initialization(ILogger logger, FactAttribute skipOnLinuxEngine) - { - TestcontainersSettings.ResourceReaperEnabled = skipOnLinuxEngine.Skip != null; - TestcontainersSettings.Logger = logger; - } - - public Task StartAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - - public Task StopAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - } -} diff --git a/tests/Testcontainers.Tests/Initialized.cs b/tests/Testcontainers.Tests/Initialized.cs deleted file mode 100644 index 961a4e444..000000000 --- a/tests/Testcontainers.Tests/Initialized.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace DotNet.Testcontainers.Tests -{ - using System; - using System.Threading.Tasks; - using Microsoft.Extensions.DependencyInjection; - using Microsoft.Extensions.Hosting; - using Microsoft.Extensions.Logging; - using Xunit; - - [CollectionDefinition(nameof(Testcontainers))] - public sealed class Initialized : ICollectionFixture, IAsyncLifetime, IDisposable - { - private readonly IHost host = Host - .CreateDefaultBuilder() - .ConfigureServices(serviceCollection => - { - serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(serviceProvider => serviceProvider.GetRequiredService>()); - serviceCollection.AddSingleton(); - serviceCollection.AddHostedService(); - }) - .Build(); - - public Task InitializeAsync() - { - return this.host.StartAsync(); - } - - public Task DisposeAsync() - { - return this.host.StopAsync(); - } - - public void Dispose() - { - this.host.Dispose(); - } - } -} diff --git a/tests/Testcontainers.Tests/SkipOnLinuxEngineAttribute.cs b/tests/Testcontainers.Tests/SkipOnLinuxEngineAttribute.cs index 695cf9751..0f8d99df2 100644 --- a/tests/Testcontainers.Tests/SkipOnLinuxEngineAttribute.cs +++ b/tests/Testcontainers.Tests/SkipOnLinuxEngineAttribute.cs @@ -2,15 +2,19 @@ namespace DotNet.Testcontainers.Tests { using System; using System.Diagnostics; + using DotNet.Testcontainers.Configurations; using Xunit; public sealed class SkipOnLinuxEngineAttribute : FactAttribute { - private static readonly bool IsLinuxEngineEnabled = GetIsLinuxEngineEnabled(); + static SkipOnLinuxEngineAttribute() + { + TestcontainersSettings.ResourceReaperEnabled = GetIsLinuxEngineEnabled(); + } public SkipOnLinuxEngineAttribute() { - if (IsLinuxEngineEnabled) + if (TestcontainersSettings.ResourceReaperEnabled) { this.Skip = "Windows Docker engine is not available."; } diff --git a/tests/Testcontainers.Tests/Unit/Configurations/DockerEndpointAuthenticationProviderTest.cs b/tests/Testcontainers.Tests/Unit/Configurations/DockerEndpointAuthenticationProviderTest.cs index ba9d9ad36..852451dcf 100644 --- a/tests/Testcontainers.Tests/Unit/Configurations/DockerEndpointAuthenticationProviderTest.cs +++ b/tests/Testcontainers.Tests/Unit/Configurations/DockerEndpointAuthenticationProviderTest.cs @@ -50,7 +50,6 @@ private sealed class AuthProviderTestData : List { public AuthProviderTestData() { - var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); var defaultConfiguration = new PropertiesFileConfiguration(Array.Empty()); var dockerTlsConfiguration = new PropertiesFileConfiguration("docker.tls=true", $"docker.cert.path={CertificatesDirectoryPath}"); var dockerMTlsConfiguration = new PropertiesFileConfiguration("docker.tls.verify=true", $"docker.cert.path={CertificatesDirectoryPath}"); @@ -66,8 +65,8 @@ public AuthProviderTestData() this.Add(new object[] { new EnvironmentEndpointAuthenticationProvider(DockerHostConfiguration), true }); this.Add(new object[] { new EnvironmentEndpointAuthenticationProvider(Array.Empty()), false }); this.Add(new object[] { new EnvironmentEndpointAuthenticationProvider(defaultConfiguration, DockerHostConfiguration), true }); - this.Add(new object[] { new NpipeEndpointAuthenticationProvider(), isWindows }); - this.Add(new object[] { new UnixEndpointAuthenticationProvider(), !isWindows }); + this.Add(new object[] { new NpipeEndpointAuthenticationProvider(), RuntimeInformation.IsOSPlatform(OSPlatform.Windows) }); + this.Add(new object[] { new UnixEndpointAuthenticationProvider(), !RuntimeInformation.IsOSPlatform(OSPlatform.Windows) }); } } diff --git a/tests/Testcontainers.Tests/Unit/Configurations/TestcontainersAccessInformationTest.cs b/tests/Testcontainers.Tests/Unit/Configurations/TestcontainersAccessInformationTest.cs index bfea3fc6c..b9025bbba 100644 --- a/tests/Testcontainers.Tests/Unit/Configurations/TestcontainersAccessInformationTest.cs +++ b/tests/Testcontainers.Tests/Unit/Configurations/TestcontainersAccessInformationTest.cs @@ -10,7 +10,6 @@ namespace DotNet.Testcontainers.Tests.Unit public static class TestcontainersAccessInformationTest { - [Collection(nameof(Testcontainers))] public sealed class AccessDockerInformation { private const string DoesNotExist = nameof(TestcontainersAccessInformationTest); diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/AzuriteTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/AzuriteTestcontainerTest.cs index bde4e354c..738b75e5a 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/AzuriteTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/AzuriteTestcontainerTest.cs @@ -91,7 +91,6 @@ private static async Task EstablishConnection(AzuriteFixture.AzuriteDefaultFixtu Assert.Contains(TableServiceDataFileName, execResult.Stdout); } - [Collection(nameof(Testcontainers))] public sealed class CommonContainerPorts : IClassFixture { private readonly AzuriteFixture.AzuriteDefaultFixture commonContainerPorts; @@ -109,7 +108,6 @@ public async Task ConnectionEstablished() } } - [Collection(nameof(Testcontainers))] public sealed class CustomContainerPorts : IClassFixture { private readonly AzuriteFixture.AzuriteDefaultFixture customContainerPorts; @@ -128,7 +126,6 @@ public async Task ConnectionEstablished() } } - [Collection(nameof(Testcontainers))] public sealed class BlobServiceEnabled : IClassFixture { private readonly AzuriteFixture.AzuriteDefaultFixture azurite; @@ -171,7 +168,6 @@ await Assert.ThrowsAsync(() => tableServiceClient.GetPro } } - [Collection(nameof(Testcontainers))] public sealed class QueueServiceEnabled : IClassFixture { private readonly AzuriteFixture.AzuriteDefaultFixture azurite; @@ -214,7 +210,6 @@ await Assert.ThrowsAsync(() => tableServiceClient.GetPro } } - [Collection(nameof(Testcontainers))] public sealed class TableServiceEnabled : IClassFixture { private readonly AzuriteFixture.AzuriteDefaultFixture azurite; @@ -257,7 +252,6 @@ await Assert.ThrowsAsync(() => queueServiceClient.GetPro } } - [Collection(nameof(Testcontainers))] public sealed class CustomLocation : IClassFixture { private readonly IEnumerable dataFiles; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CosmosDbTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CosmosDbTestcontainerTest.cs index e6697eccd..75bdb8028 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CosmosDbTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CosmosDbTestcontainerTest.cs @@ -11,7 +11,6 @@ namespace DotNet.Testcontainers.Tests.Unit public static class CosmosDbTestcontainerTest { - [Collection(nameof(Testcontainers))] public sealed class ConnectionTests : IClassFixture, IDisposable { private const string SkipReason = "The Cosmos DB Linux Emulator Docker image does not run on every CI environment."; // https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/45. diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchDbTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchDbTestcontainerTest.cs index 0c716f405..7a0775bb7 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchDbTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchDbTestcontainerTest.cs @@ -7,7 +7,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class CouchDbTestcontainerTest : IClassFixture { private readonly CouchDbFixture couchDbFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchbaseTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchbaseTestcontainerTest.cs index 534239a23..0e2d5bfbc 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchbaseTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/CouchbaseTestcontainerTest.cs @@ -7,7 +7,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class CouchbaseTestcontainerTest : IClassFixture { private readonly CouchbaseFixture couchbaseFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/ElasticsearchTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/ElasticsearchTestcontainerTest.cs index e818267bf..d3d1ac2b1 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/ElasticsearchTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/ElasticsearchTestcontainerTest.cs @@ -6,7 +6,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class ElasticsearchTestcontainerTest : IClassFixture { private readonly ElasticsearchFixture elasticsearchFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MariaDbTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MariaDbTestcontainerTest.cs index f45fbf76d..5973ef1e7 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MariaDbTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MariaDbTestcontainerTest.cs @@ -5,7 +5,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class MariaDbTestcontainerTest : IClassFixture { private readonly MariaDbFixture mariaDbFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MongoDbTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MongoDbTestcontainerTest.cs index 1377b99a7..21298c44b 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MongoDbTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MongoDbTestcontainerTest.cs @@ -6,7 +6,6 @@ using MongoDB.Bson; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class MongoDbTestcontainerTest : IClassFixture, IClassFixture { private const string MongoDbScheme = "mongodb"; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MsSqlTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MsSqlTestcontainerTest.cs index 1f0a55bf8..32cc5f466 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MsSqlTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MsSqlTestcontainerTest.cs @@ -7,7 +7,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class MsSqlTestcontainerTest : IClassFixture { private readonly MsSqlFixture msSqlFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MySqlTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MySqlTestcontainerTest.cs index 9fc0d49d8..9a1eb8b87 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MySqlTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/MySqlTestcontainerTest.cs @@ -7,7 +7,6 @@ namespace DotNet.Testcontainers.Tests.Unit public static class MySqlTestcontainerTest { - [Collection(nameof(Testcontainers))] public sealed class MySqlCustomUsernameTest : IClassFixture { private readonly MySqlFixture mySqlFixture; @@ -69,7 +68,6 @@ public async Task ThrowErrorInRunningContainerWithInvalidScript() } } - [Collection(nameof(Testcontainers))] public sealed class MySqlRootUsernameTest : IClassFixture { private readonly MySqlFixture mySqlFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/Neo4jTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/Neo4jTestcontainerTest.cs index 5ccdf5a4d..ffb8f49e3 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/Neo4jTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/Neo4jTestcontainerTest.cs @@ -6,7 +6,6 @@ using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class Neo4jTestcontainerTest : IClassFixture { private readonly Neo4jFixture neo4jFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/OracleTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/OracleTestcontainerTest.cs index 68a0636f0..a23bd27dc 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/OracleTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/OracleTestcontainerTest.cs @@ -7,7 +7,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class OracleTestcontainerTest : IClassFixture { private readonly OracleFixture oracleFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/PostgreSqlTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/PostgreSqlTestcontainerTest.cs index 39eb61c5f..92767aec7 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/PostgreSqlTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/PostgreSqlTestcontainerTest.cs @@ -5,7 +5,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class PostgreSqlTestcontainerTest : IClassFixture { private readonly PostgreSqlFixture postgreSqlFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/RedisTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/RedisTestcontainerTest.cs index dae96859d..6e67b7146 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/RedisTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/Databases/RedisTestcontainerTest.cs @@ -6,7 +6,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class RedisTestcontainerTest : IClassFixture { private readonly RedisFixture redisFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/KafkaTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/KafkaTestcontainerTest.cs index c656562c9..c8e36d5bb 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/KafkaTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/KafkaTestcontainerTest.cs @@ -8,7 +8,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class KafkaTestcontainerTest : IClassFixture { private readonly KafkaFixture kafkaFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/LocalStackTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/LocalStackTestcontainerTest.cs index 800fe6d6d..fea4b2f9b 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/LocalStackTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/LocalStackTestcontainerTest.cs @@ -4,7 +4,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class LocalStackTestcontainerTest : IClassFixture { private readonly LocalStackFixture localStackFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/RabbitMqTestcontainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/RabbitMqTestcontainerTest.cs index 3f6b8418e..0c9699458 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/RabbitMqTestcontainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/Modules/MessageBrokers/RabbitMqTestcontainerTest.cs @@ -3,7 +3,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class RabbitMqTestcontainerTest : IClassFixture { private readonly RabbitMqFixture rabbitMqFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerCancellationTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerCancellationTest.cs index f7a8fc378..f2219c804 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerCancellationTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerCancellationTest.cs @@ -9,7 +9,6 @@ namespace DotNet.Testcontainers.Tests.Unit.Containers.Unix public static class TestcontainersContainerCancellationTest { - [Collection(nameof(Testcontainers))] public sealed class Cancel : IClassFixture { private readonly AlpineFixture alpineFixture; diff --git a/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerTest.cs index 479509b2f..9c773d1a9 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Unix/TestcontainersContainerTest.cs @@ -24,7 +24,6 @@ static TestcontainersContainerTest() _ = Directory.CreateDirectory(TempPath); } - [Collection(nameof(Testcontainers))] public sealed class WithConfiguration { [Fact] @@ -291,8 +290,8 @@ await using (ITestcontainersContainer testcontainer = testcontainersBuilder.Buil } [Theory] - [InlineData("localhost", "npipe://./pipe/docker_engine")] - [InlineData("localhost", "unix:/var/run/docker.sock")] + [InlineData("127.0.0.1", "npipe://./pipe/docker_engine")] + [InlineData("127.0.0.1", "unix:/var/run/docker.sock")] [InlineData("docker", "http://docker")] [InlineData("docker", "https://docker")] [InlineData("docker", "tcp://docker")] diff --git a/tests/Testcontainers.Tests/Unit/Containers/Windows/TestcontainersContainerTest.cs b/tests/Testcontainers.Tests/Unit/Containers/Windows/TestcontainersContainerTest.cs index 071cd82c3..443bfbbf8 100644 --- a/tests/Testcontainers.Tests/Unit/Containers/Windows/TestcontainersContainerTest.cs +++ b/tests/Testcontainers.Tests/Unit/Containers/Windows/TestcontainersContainerTest.cs @@ -8,7 +8,6 @@ namespace DotNet.Testcontainers.Tests.Unit.Containers.Windows public static class TestcontainersContainerTest { - [Collection(nameof(Testcontainers))] public sealed class WithConfiguration { [SkipOnLinuxEngine] diff --git a/tests/Testcontainers.Tests/Unit/Images/IgnoreFileTest.cs b/tests/Testcontainers.Tests/Unit/Images/IgnoreFileTest.cs index 76886c865..a1c738046 100644 --- a/tests/Testcontainers.Tests/Unit/Images/IgnoreFileTest.cs +++ b/tests/Testcontainers.Tests/Unit/Images/IgnoreFileTest.cs @@ -4,7 +4,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class IgnoreFileTest { [Theory] diff --git a/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs b/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs index b8ce3fa55..019d698f3 100644 --- a/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs +++ b/tests/Testcontainers.Tests/Unit/Images/ImageFromDockerfileTest.cs @@ -11,7 +11,6 @@ namespace DotNet.Testcontainers.Tests.Unit using ICSharpCode.SharpZipLib.Tar; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class ImageFromDockerfileTest { [Fact] diff --git a/tests/Testcontainers.Tests/Unit/Networks/TestcontainersNetworkTest.cs b/tests/Testcontainers.Tests/Unit/Networks/TestcontainersNetworkTest.cs index 4a4888441..16e483aa9 100644 --- a/tests/Testcontainers.Tests/Unit/Networks/TestcontainersNetworkTest.cs +++ b/tests/Testcontainers.Tests/Unit/Networks/TestcontainersNetworkTest.cs @@ -6,7 +6,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class TestcontainersNetworkTest : IClassFixture, IAsyncLifetime { private const string AliasSuffix = "-alias"; diff --git a/tests/Testcontainers.Tests/Unit/Volumes/TestcontainersVolumeTest.cs b/tests/Testcontainers.Tests/Unit/Volumes/TestcontainersVolumeTest.cs index 86b418882..c13376e1a 100644 --- a/tests/Testcontainers.Tests/Unit/Volumes/TestcontainersVolumeTest.cs +++ b/tests/Testcontainers.Tests/Unit/Volumes/TestcontainersVolumeTest.cs @@ -7,7 +7,6 @@ namespace DotNet.Testcontainers.Tests.Unit using DotNet.Testcontainers.Tests.Fixtures; using Xunit; - [Collection(nameof(Testcontainers))] public sealed class TestcontainersVolumeTest : IClassFixture, IAsyncLifetime { private const string Destination = "/tmp/";