From 45a7cf027aa9ecdf8c3a07e354f3acf28ad12a3b Mon Sep 17 00:00:00 2001 From: Raphael Strotz Date: Fri, 1 Dec 2023 15:52:00 +0100 Subject: [PATCH 1/7] chore: bump to Azurite 3.28.0 --- src/Testcontainers.Azurite/AzuriteBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Testcontainers.Azurite/AzuriteBuilder.cs b/src/Testcontainers.Azurite/AzuriteBuilder.cs index ae1a1d162..3ba6dd843 100644 --- a/src/Testcontainers.Azurite/AzuriteBuilder.cs +++ b/src/Testcontainers.Azurite/AzuriteBuilder.cs @@ -4,7 +4,7 @@ namespace Testcontainers.Azurite; [PublicAPI] public sealed class AzuriteBuilder : ContainerBuilder { - public const string AzuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.24.0"; + public const string AzuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.28.0"; public const ushort BlobPort = 10000; From dbaab3334a93c4f5f2ed942def5ea72215d19594 Mon Sep 17 00:00:00 2001 From: Raphael Strotz Date: Fri, 1 Dec 2023 17:00:51 +0100 Subject: [PATCH 2/7] feat: support in-memory persistence --- src/Testcontainers.Azurite/AzuriteBuilder.cs | 34 ++++++++ .../AzuriteConfiguration.cs | 16 +++- .../AzuriteInMemoryContainerTest.cs | 80 +++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs diff --git a/src/Testcontainers.Azurite/AzuriteBuilder.cs b/src/Testcontainers.Azurite/AzuriteBuilder.cs index 3ba6dd843..1452440e2 100644 --- a/src/Testcontainers.Azurite/AzuriteBuilder.cs +++ b/src/Testcontainers.Azurite/AzuriteBuilder.cs @@ -40,6 +40,35 @@ private AzuriteBuilder(AzuriteConfiguration resourceConfiguration) /// protected override AzuriteConfiguration DockerResourceConfiguration { get; } + /// + /// Enables in-memory persistence. + /// + /// An optional memory limit in megabytes. + /// A configured instance of . + public AzuriteBuilder WithInMemoryPersistence(int? memoryLimit = null) + { + var command = new List + { + "azurite", + "--blobHost", + "0.0.0.0", + "--queueHost", + "0.0.0.0", + "--tableHost", + "0.0.0.0", + "--inMemoryPersistence" + }; + + if (memoryLimit.HasValue) + { + command.Add("--extentMemoryLimit"); + command.Add(memoryLimit.ToString()); + } + + return Merge(DockerResourceConfiguration, new AzuriteConfiguration(inMemoryPersistence: true, extentMemoryLimit: memoryLimit)) + .WithCommand(command.ToArray()); + } + /// public override AzuriteContainer Build() { @@ -47,6 +76,11 @@ public override AzuriteContainer Build() var waitStrategy = Wait.ForUnixContainer(); + if (DockerResourceConfiguration.InMemoryPersistence) + { + waitStrategy = waitStrategy.UntilMessageIsLogged("In-memory extent storage is enabled"); + } + if (_enabledServices.Contains(AzuriteService.Blob)) { waitStrategy = waitStrategy.UntilMessageIsLogged("Blob service is successfully listening"); diff --git a/src/Testcontainers.Azurite/AzuriteConfiguration.cs b/src/Testcontainers.Azurite/AzuriteConfiguration.cs index 168adde2c..ed5df57f5 100644 --- a/src/Testcontainers.Azurite/AzuriteConfiguration.cs +++ b/src/Testcontainers.Azurite/AzuriteConfiguration.cs @@ -7,8 +7,12 @@ public sealed class AzuriteConfiguration : ContainerConfiguration /// /// Initializes a new instance of the class. /// - public AzuriteConfiguration() + /// Indicates whether in-memory persistence is enabled. + /// Optional memory-limit when using in-memory persistence. + public AzuriteConfiguration(bool inMemoryPersistence = false, int? extentMemoryLimit = null) { + InMemoryPersistence = inMemoryPersistence; + ExtentMemoryLimit = extentMemoryLimit; } /// @@ -50,4 +54,14 @@ public AzuriteConfiguration(AzuriteConfiguration oldValue, AzuriteConfiguration : base(oldValue, newValue) { } + + /// + /// Gets a value indicating whether in-memory persistence is enabled. + /// + public bool InMemoryPersistence { get; } + + /// + /// Gets a + /// + public int? ExtentMemoryLimit { get; } } \ No newline at end of file diff --git a/tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs b/tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs new file mode 100644 index 000000000..98337145f --- /dev/null +++ b/tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs @@ -0,0 +1,80 @@ +namespace Testcontainers.Azurite; + +public abstract class AzuriteInMemoryContainerTest : IAsyncLifetime +{ + private readonly AzuriteContainer _azuriteContainer = new AzuriteBuilder() + .WithInMemoryPersistence() + .Build(); + + public Task InitializeAsync() + { + return _azuriteContainer.StartAsync(); + } + + public Task DisposeAsync() + { + return _azuriteContainer.DisposeAsync().AsTask(); + } + + private static bool HasError(NullableResponse response) + { + using (var rawResponse = response.GetRawResponse()) + { + return rawResponse.IsError; + } + } + + public sealed class BlobService : AzuriteInMemoryContainerTest + { + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task EstablishesConnection() + { + // Give + var client = new BlobServiceClient(_azuriteContainer.GetConnectionString()); + + // When + var properties = await client.GetPropertiesAsync() + .ConfigureAwait(false); + + // Then + Assert.False(HasError(properties)); + } + } + + public sealed class QueueService : AzuriteInMemoryContainerTest + { + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task EstablishesConnection() + { + // Give + var client = new QueueServiceClient(_azuriteContainer.GetConnectionString()); + + // When + var properties = await client.GetPropertiesAsync() + .ConfigureAwait(false); + + // Then + Assert.False(HasError(properties)); + } + } + + public sealed class TableService : AzuriteInMemoryContainerTest + { + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task EstablishesConnection() + { + // Give + var client = new TableServiceClient(_azuriteContainer.GetConnectionString()); + + // When + var properties = await client.GetPropertiesAsync() + .ConfigureAwait(false); + + // Then + Assert.False(HasError(properties)); + } + } +} \ No newline at end of file From 128f061a1c42190a35f9081a512803c015ca9951 Mon Sep 17 00:00:00 2001 From: Raphael Strotz Date: Fri, 1 Dec 2023 21:19:49 +0100 Subject: [PATCH 3/7] fix: add missing xml docs --- src/Testcontainers.Azurite/AzuriteConfiguration.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Testcontainers.Azurite/AzuriteConfiguration.cs b/src/Testcontainers.Azurite/AzuriteConfiguration.cs index ed5df57f5..bc4369224 100644 --- a/src/Testcontainers.Azurite/AzuriteConfiguration.cs +++ b/src/Testcontainers.Azurite/AzuriteConfiguration.cs @@ -61,7 +61,7 @@ public AzuriteConfiguration(AzuriteConfiguration oldValue, AzuriteConfiguration public bool InMemoryPersistence { get; } /// - /// Gets a + /// Gets the memory limit to use when in-memory persistence is enabled. /// public int? ExtentMemoryLimit { get; } } \ No newline at end of file From 3815c0ce867c43801c1f491f3cb81b68a67c6981 Mon Sep 17 00:00:00 2001 From: Raphael Strotz Date: Sun, 3 Dec 2023 18:16:48 +0100 Subject: [PATCH 4/7] refactor: apply changes from review --- src/Testcontainers.Azurite/AzuriteBuilder.cs | 30 ++++--------------- .../AzuriteConfiguration.cs | 16 +--------- 2 files changed, 6 insertions(+), 40 deletions(-) diff --git a/src/Testcontainers.Azurite/AzuriteBuilder.cs b/src/Testcontainers.Azurite/AzuriteBuilder.cs index 1452440e2..ee401d868 100644 --- a/src/Testcontainers.Azurite/AzuriteBuilder.cs +++ b/src/Testcontainers.Azurite/AzuriteBuilder.cs @@ -47,26 +47,9 @@ private AzuriteBuilder(AzuriteConfiguration resourceConfiguration) /// A configured instance of . public AzuriteBuilder WithInMemoryPersistence(int? memoryLimit = null) { - var command = new List - { - "azurite", - "--blobHost", - "0.0.0.0", - "--queueHost", - "0.0.0.0", - "--tableHost", - "0.0.0.0", - "--inMemoryPersistence" - }; - - if (memoryLimit.HasValue) - { - command.Add("--extentMemoryLimit"); - command.Add(memoryLimit.ToString()); - } - - return Merge(DockerResourceConfiguration, new AzuriteConfiguration(inMemoryPersistence: true, extentMemoryLimit: memoryLimit)) - .WithCommand(command.ToArray()); + return memoryLimit.HasValue + ? WithCommand("--inMemoryPersistence", "--extentMemoryLimit", memoryLimit.ToString()) + : WithCommand("--inMemoryPersistence"); } /// @@ -76,11 +59,6 @@ public override AzuriteContainer Build() var waitStrategy = Wait.ForUnixContainer(); - if (DockerResourceConfiguration.InMemoryPersistence) - { - waitStrategy = waitStrategy.UntilMessageIsLogged("In-memory extent storage is enabled"); - } - if (_enabledServices.Contains(AzuriteService.Blob)) { waitStrategy = waitStrategy.UntilMessageIsLogged("Blob service is successfully listening"); @@ -105,6 +83,8 @@ protected override AzuriteBuilder Init() { return base.Init() .WithImage(AzuriteImage) + .WithEntrypoint("azurite") + .WithCommand("--blobHost", "0.0.0.0", "--queueHost", "0.0.0.0", "--tableHost", "0.0.0.0") .WithPortBinding(BlobPort, true) .WithPortBinding(QueuePort, true) .WithPortBinding(TablePort, true); diff --git a/src/Testcontainers.Azurite/AzuriteConfiguration.cs b/src/Testcontainers.Azurite/AzuriteConfiguration.cs index bc4369224..168adde2c 100644 --- a/src/Testcontainers.Azurite/AzuriteConfiguration.cs +++ b/src/Testcontainers.Azurite/AzuriteConfiguration.cs @@ -7,12 +7,8 @@ public sealed class AzuriteConfiguration : ContainerConfiguration /// /// Initializes a new instance of the class. /// - /// Indicates whether in-memory persistence is enabled. - /// Optional memory-limit when using in-memory persistence. - public AzuriteConfiguration(bool inMemoryPersistence = false, int? extentMemoryLimit = null) + public AzuriteConfiguration() { - InMemoryPersistence = inMemoryPersistence; - ExtentMemoryLimit = extentMemoryLimit; } /// @@ -54,14 +50,4 @@ public AzuriteConfiguration(AzuriteConfiguration oldValue, AzuriteConfiguration : base(oldValue, newValue) { } - - /// - /// Gets a value indicating whether in-memory persistence is enabled. - /// - public bool InMemoryPersistence { get; } - - /// - /// Gets the memory limit to use when in-memory persistence is enabled. - /// - public int? ExtentMemoryLimit { get; } } \ No newline at end of file From 6b745b7b3ba88a6bf2b34fc6b1d7d1de5ed98233 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Tue, 5 Dec 2023 17:55:06 +0100 Subject: [PATCH 5/7] chore: Reuse existing Azurite test class --- src/Testcontainers.Azurite/AzuriteBuilder.cs | 26 +++-- .../AzuriteContainerTest.cs | 100 ++++++++++-------- .../AzuriteInMemoryContainerTest.cs | 80 -------------- tests/Testcontainers.Azurite.Tests/Usings.cs | 1 + 4 files changed, 75 insertions(+), 132 deletions(-) delete mode 100644 tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs diff --git a/src/Testcontainers.Azurite/AzuriteBuilder.cs b/src/Testcontainers.Azurite/AzuriteBuilder.cs index ee401d868..0539e9e95 100644 --- a/src/Testcontainers.Azurite/AzuriteBuilder.cs +++ b/src/Testcontainers.Azurite/AzuriteBuilder.cs @@ -43,13 +43,21 @@ private AzuriteBuilder(AzuriteConfiguration resourceConfiguration) /// /// Enables in-memory persistence. /// - /// An optional memory limit in megabytes. - /// A configured instance of . - public AzuriteBuilder WithInMemoryPersistence(int? memoryLimit = null) + /// + /// By default, the in-memory is limited to 50% of the total memory on the container. + /// + /// An optional in-memory limit in megabytes. + /// A configured instance of . + public AzuriteBuilder WithInMemoryPersistence(float? megabytes = null) { - return memoryLimit.HasValue - ? WithCommand("--inMemoryPersistence", "--extentMemoryLimit", memoryLimit.ToString()) - : WithCommand("--inMemoryPersistence"); + if (megabytes.HasValue) + { + return WithCommand("--inMemoryPersistence", "--extentMemoryLimit", megabytes.ToString()); + } + else + { + return WithCommand("--inMemoryPersistence"); + } } /// @@ -83,11 +91,11 @@ protected override AzuriteBuilder Init() { return base.Init() .WithImage(AzuriteImage) - .WithEntrypoint("azurite") - .WithCommand("--blobHost", "0.0.0.0", "--queueHost", "0.0.0.0", "--tableHost", "0.0.0.0") .WithPortBinding(BlobPort, true) .WithPortBinding(QueuePort, true) - .WithPortBinding(TablePort, true); + .WithPortBinding(TablePort, true) + .WithEntrypoint("azurite") + .WithCommand("--blobHost", "0.0.0.0", "--queueHost", "0.0.0.0", "--tableHost", "0.0.0.0"); } /// diff --git a/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs b/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs index da57ddf2d..ef11cff2b 100644 --- a/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs +++ b/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs @@ -2,7 +2,12 @@ namespace Testcontainers.Azurite; public abstract class AzuriteContainerTest : IAsyncLifetime { - private readonly AzuriteContainer _azuriteContainer = new AzuriteBuilder().Build(); + private readonly AzuriteContainer _azuriteContainer; + + private AzuriteContainerTest(AzuriteContainer azuriteContainer) + { + _azuriteContainer = azuriteContainer; + } public Task InitializeAsync() { @@ -14,65 +19,74 @@ public Task DisposeAsync() return _azuriteContainer.DisposeAsync().AsTask(); } - private static bool HasError(NullableResponse response) + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task EstablishesBlobServiceConnection() { - using (var rawResponse = response.GetRawResponse()) - { - return rawResponse.IsError; - } + // Give + var client = new BlobServiceClient(_azuriteContainer.GetConnectionString()); + + // When + var properties = await client.GetPropertiesAsync() + .ConfigureAwait(false); + + // Then + Assert.False(HasError(properties)); } - public sealed class BlobService : AzuriteContainerTest + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task EstablishesQueueServiceConnection() { - [Fact] - [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] - public async Task EstablishesConnection() - { - // Give - var client = new BlobServiceClient(_azuriteContainer.GetConnectionString()); + // Give + var client = new QueueServiceClient(_azuriteContainer.GetConnectionString()); - // When - var properties = await client.GetPropertiesAsync() - .ConfigureAwait(false); + // When + var properties = await client.GetPropertiesAsync() + .ConfigureAwait(false); - // Then - Assert.False(HasError(properties)); - } + // Then + Assert.False(HasError(properties)); } - public sealed class QueueService : AzuriteContainerTest + [Fact] + [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] + public async Task EstablishesTableServiceConnection() { - [Fact] - [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] - public async Task EstablishesConnection() - { - // Give - var client = new QueueServiceClient(_azuriteContainer.GetConnectionString()); + // Give + var client = new TableServiceClient(_azuriteContainer.GetConnectionString()); - // When - var properties = await client.GetPropertiesAsync() - .ConfigureAwait(false); + // When + var properties = await client.GetPropertiesAsync() + .ConfigureAwait(false); - // Then - Assert.False(HasError(properties)); - } + // Then + Assert.False(HasError(properties)); } - public sealed class TableService : AzuriteContainerTest + private static bool HasError(NullableResponse response) { - [Fact] - [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] - public async Task EstablishesConnection() + using (var rawResponse = response.GetRawResponse()) { - // Give - var client = new TableServiceClient(_azuriteContainer.GetConnectionString()); + return rawResponse.IsError; + } + } - // When - var properties = await client.GetPropertiesAsync() - .ConfigureAwait(false); + [UsedImplicitly] + public sealed class AzuriteDefaultConfiguration : AzuriteContainerTest + { + public AzuriteDefaultConfiguration() + : base(new AzuriteBuilder().Build()) + { + } + } - // Then - Assert.False(HasError(properties)); + [UsedImplicitly] + public sealed class AzuriteInMemoryConfiguration : AzuriteContainerTest + { + public AzuriteInMemoryConfiguration() + : base(new AzuriteBuilder().WithInMemoryPersistence().Build()) + { } } } \ No newline at end of file diff --git a/tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs b/tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs deleted file mode 100644 index 98337145f..000000000 --- a/tests/Testcontainers.Azurite.Tests/AzuriteInMemoryContainerTest.cs +++ /dev/null @@ -1,80 +0,0 @@ -namespace Testcontainers.Azurite; - -public abstract class AzuriteInMemoryContainerTest : IAsyncLifetime -{ - private readonly AzuriteContainer _azuriteContainer = new AzuriteBuilder() - .WithInMemoryPersistence() - .Build(); - - public Task InitializeAsync() - { - return _azuriteContainer.StartAsync(); - } - - public Task DisposeAsync() - { - return _azuriteContainer.DisposeAsync().AsTask(); - } - - private static bool HasError(NullableResponse response) - { - using (var rawResponse = response.GetRawResponse()) - { - return rawResponse.IsError; - } - } - - public sealed class BlobService : AzuriteInMemoryContainerTest - { - [Fact] - [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] - public async Task EstablishesConnection() - { - // Give - var client = new BlobServiceClient(_azuriteContainer.GetConnectionString()); - - // When - var properties = await client.GetPropertiesAsync() - .ConfigureAwait(false); - - // Then - Assert.False(HasError(properties)); - } - } - - public sealed class QueueService : AzuriteInMemoryContainerTest - { - [Fact] - [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] - public async Task EstablishesConnection() - { - // Give - var client = new QueueServiceClient(_azuriteContainer.GetConnectionString()); - - // When - var properties = await client.GetPropertiesAsync() - .ConfigureAwait(false); - - // Then - Assert.False(HasError(properties)); - } - } - - public sealed class TableService : AzuriteInMemoryContainerTest - { - [Fact] - [Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))] - public async Task EstablishesConnection() - { - // Give - var client = new TableServiceClient(_azuriteContainer.GetConnectionString()); - - // When - var properties = await client.GetPropertiesAsync() - .ConfigureAwait(false); - - // Then - Assert.False(HasError(properties)); - } - } -} \ No newline at end of file diff --git a/tests/Testcontainers.Azurite.Tests/Usings.cs b/tests/Testcontainers.Azurite.Tests/Usings.cs index 8a39ce7c2..e902dbee6 100644 --- a/tests/Testcontainers.Azurite.Tests/Usings.cs +++ b/tests/Testcontainers.Azurite.Tests/Usings.cs @@ -4,4 +4,5 @@ global using Azure.Storage.Blobs; global using Azure.Storage.Queues; global using DotNet.Testcontainers.Commons; +global using JetBrains.Annotations; global using Xunit; \ No newline at end of file From bb607125419436820eed3c02ae5cda3f154ba0be Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:34:56 +0100 Subject: [PATCH 6/7] chore: Add memory limit test --- .../AzuriteContainerTest.cs | 27 +++++++++++++++++++ tests/Testcontainers.Azurite.Tests/Usings.cs | 3 +++ 2 files changed, 30 insertions(+) diff --git a/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs b/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs index ef11cff2b..7f99f2d59 100644 --- a/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs +++ b/tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs @@ -89,4 +89,31 @@ public AzuriteInMemoryConfiguration() { } } + + [UsedImplicitly] + public sealed class AzuriteMemoryLimitConfiguration : AzuriteContainerTest + { + private const int MemoryLimitInMb = 64; + + private static readonly string[] LineEndings = { "\r\n", "\n" }; + + public AzuriteMemoryLimitConfiguration() + : base(new AzuriteBuilder().WithInMemoryPersistence(MemoryLimitInMb).Build()) + { + } + + [Fact] + public async Task MemoryLimitIsConfigured() + { + // Given + var (stdout, _) = await _azuriteContainer.GetLogsAsync(timestampsEnabled: false) + .ConfigureAwait(false); + + // When + var firstLine = stdout.Split(LineEndings, StringSplitOptions.RemoveEmptyEntries).First(); + + // Then + Assert.StartsWith(string.Format(CultureInfo.InvariantCulture, "In-memory extent storage is enabled with a limit of {0:F2} MB", MemoryLimitInMb), firstLine); + } + } } \ No newline at end of file diff --git a/tests/Testcontainers.Azurite.Tests/Usings.cs b/tests/Testcontainers.Azurite.Tests/Usings.cs index e902dbee6..645e958bd 100644 --- a/tests/Testcontainers.Azurite.Tests/Usings.cs +++ b/tests/Testcontainers.Azurite.Tests/Usings.cs @@ -1,3 +1,6 @@ +global using System; +global using System.Globalization; +global using System.Linq; global using System.Threading.Tasks; global using Azure; global using Azure.Data.Tables; From 36d7b23c6ded67d8ad4d8823b2007df0c67c21bc Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Wed, 6 Dec 2023 19:21:36 +0100 Subject: [PATCH 7/7] fix: Retain the internal Azurite builder configuration --- .devcontainer/devcontainer.json | 2 +- src/Testcontainers.Azurite/AzuriteBuilder.cs | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0a2209bf5..39b19fed8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,7 @@ "moby": true }, "ghcr.io/devcontainers/features/dotnet:1": { - "version": "6.0.413", + "version": "8.0.100", "installUsingApt": false } }, diff --git a/src/Testcontainers.Azurite/AzuriteBuilder.cs b/src/Testcontainers.Azurite/AzuriteBuilder.cs index 0539e9e95..222d0d346 100644 --- a/src/Testcontainers.Azurite/AzuriteBuilder.cs +++ b/src/Testcontainers.Azurite/AzuriteBuilder.cs @@ -12,7 +12,14 @@ public sealed class AzuriteBuilder : ContainerBuilder _enabledServices = new HashSet(); + private static readonly ISet EnabledServices = new HashSet(); + + static AzuriteBuilder() + { + EnabledServices.Add(AzuriteService.Blob); + EnabledServices.Add(AzuriteService.Queue); + EnabledServices.Add(AzuriteService.Table); + } /// /// Initializes a new instance of the class. @@ -21,10 +28,6 @@ public AzuriteBuilder() : this(new AzuriteConfiguration()) { DockerResourceConfiguration = Init().DockerResourceConfiguration; - - _enabledServices.Add(AzuriteService.Blob); - _enabledServices.Add(AzuriteService.Queue); - _enabledServices.Add(AzuriteService.Table); } /// @@ -67,17 +70,17 @@ public override AzuriteContainer Build() var waitStrategy = Wait.ForUnixContainer(); - if (_enabledServices.Contains(AzuriteService.Blob)) + if (EnabledServices.Contains(AzuriteService.Blob)) { waitStrategy = waitStrategy.UntilMessageIsLogged("Blob service is successfully listening"); } - if (_enabledServices.Contains(AzuriteService.Queue)) + if (EnabledServices.Contains(AzuriteService.Queue)) { waitStrategy = waitStrategy.UntilMessageIsLogged("Queue service is successfully listening"); } - if (_enabledServices.Contains(AzuriteService.Table)) + if (EnabledServices.Contains(AzuriteService.Table)) { waitStrategy = waitStrategy.UntilMessageIsLogged("Table service is successfully listening"); }