Skip to content

feat: add azure app configuration module#1200

Open
tnc1997 wants to merge 3 commits intotestcontainers:developfrom
tnc1997:feat/1198
Open

feat: add azure app configuration module#1200
tnc1997 wants to merge 3 commits intotestcontainers:developfrom
tnc1997:feat/1198

Conversation

@tnc1997
Copy link

@tnc1997 tnc1997 commented Jun 13, 2024

What does this PR do?

This change adds an Azure App Configuration module using Emulator for Azure App Configuration.

Why is it important?

This module allows developers to more easily integration test applications that are dependent on Azure App Configuration.

Related issues

Summary by CodeRabbit

  • New Features
    • Added Azure App Configuration test container support, enabling developers to create and configure containerized instances for testing Azure App Configuration integrations with credentials and secrets management.

✏️ Tip: You can customize this high-level summary in your review settings.

@netlify
Copy link

netlify bot commented Jun 13, 2024

Deploy Preview for testcontainers-dotnet ready!

Name Link
🔨 Latest commit 4091134
🔍 Latest deploy log https://app.netlify.com/sites/testcontainers-dotnet/deploys/666b3ada4fd5e20008f954d2
😎 Deploy Preview https://deploy-preview-1200--testcontainers-dotnet.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@goldsam
Copy link

goldsam commented Jun 19, 2024

@tnc1997's container not support TLS and his module uses the insecure port of that container.

As had been previously discussed,

ConfigurationClient refuses to connect to a URI endpoint over an unsecured HTTP connection.

The Azure SDK (and specifically ConfigurationClient) enforce TLS everywhere.

The official CosmosDB emulator offers an endpoint for fetching the PEM certificate to make this requirement a little easier to deal with, however there are more issues in play such as the app config domain and scope/identity requirements which had also been discussed extensively.

I worked very hard to [address these issues in my Testcontainers module](https://github.com/goldsam/azure-app-configuration-emulator/blob/9adc28f418b7ae9030c90f859f77fa137aa46311/src/AzureAppConfigurationEmulator.Test containers/AzureAppConfigurationEmulatorBuilder.cs#L71-L91), and was quite disappointed that you discarded that work.

@tnc1997 I had spent a LOT of time contributing to your project throughout our discussions addressing these matters, so this feels like a bit of a slap in the face.

@tnc1997
Copy link
Author

tnc1997 commented Jun 19, 2024

@tnc1997's container not support TLS and his module uses the insecure port of that container.

As had been previously discussed,

ConfigurationClient refuses to connect to a URI endpoint over an unsecured HTTP connection.

The Azure SDK (and specifically ConfigurationClient) enforce TLS everywhere.

The official CosmosDB emulator offers an endpoint for fetching the PEM certificate to make this requirement a little easier to deal with, however there are more issues in play such as the app config domain and scope/identity requirements which had also been discussed extensively.

I worked very hard to [address these issues in my Testcontainers module](https://github.com/goldsam/azure-app-configuration-emulator/blob/9adc28f418b7ae9030c90f859f77fa137aa46311/src/AzureAppConfigurationEmulator.Test containers/AzureAppConfigurationEmulatorBuilder.cs#L71-L91), and was quite disappointed that you discarded that work.

@tnc1997 I had spent a LOT of time contributing to your project throughout our discussions addressing these matters, so this feels like a bit of a slap in the face.

Hi @goldsam, I appreciate your concerns.

Firstly, the Azure SDK does not enforce TLS everywhere, for example the storage clients to name a few:

Secondly, a test has been added that shows that the ConfigurationClient works fine without TLS:

Connecting to the emulator using HMAC authentication is the recommended approach, hence the GetConnectionString convenience method which aligns with other Testcontainer modules in this repository such as Azurite. Extending the out-of-the-box container that is returned to align with custom requirements is very easy due to the ContainerBuilder interface:

.crt & .key

var container = new AzureAppConfigurationBuilder()
    .WithEnvironment("ASPNETCORE_HTTP_PORTS", "8080")
    .WithEnvironment("ASPNETCORE_HTTPS_PORTS", "8081")
    .WithEnvironment("Kestrel__Certificates__Default__Path", "/usr/local/share/azureappconfigurationemulator/emulator.crt")
    .WithEnvironment("Kestrel__Certificates__Default__KeyPath", "/usr/local/share/azureappconfigurationemulator/emulator.key")
    .WithResourceMapping("emulator.crt", "/usr/local/share/azureappconfigurationemulator/emulator.crt")
    .WithResourceMapping("emulator.key", "/usr/local/share/azureappconfigurationemulator/emulator.key")
    .Build();

.pfx

var container = new AzureAppConfigurationBuilder()
    .WithEnvironment("ASPNETCORE_HTTP_PORTS", "8080")
    .WithEnvironment("ASPNETCORE_HTTPS_PORTS", "8081")
    .WithEnvironment("Kestrel__Certificates__Default__Password", "password")
    .WithEnvironment("Kestrel__Certificates__Default__Path", "/root/.aspnet/https/aspnetapp.pfx")
    .WithResourceMapping("aspnetapp.pfx", "/root/.aspnet/https/aspnetapp.pfx")
    .Build();

@HofmeisterAn HofmeisterAn added enhancement New feature or request module An official Testcontainers module labels Jun 22, 2024
@HofmeisterAn HofmeisterAn force-pushed the develop branch 3 times, most recently from 4900ecd to 8fa5f1b Compare October 3, 2025 20:17
@NelsonBN
Copy link
Contributor

NelsonBN commented Nov 6, 2025

Microsoft already has an official solution for the App Configuration Emulator. This implementation should use the official image.

GitHub
Image

@goldsam
Copy link

goldsam commented Nov 20, 2025

@NelsonBN tnc1997/azure-app-configuration-emulator predates Microsoft's tool by a while and is more feature complete. To say Microsoft already has an official solution incorrectly insinuates that is predates and is of a higher quality - both of which are false claims.

@HofmeisterAn
Copy link
Collaborator

Sorry, I'm having a bit of trouble following. I'm not familiar with these implementations, and it looks like Microsoft provides an Azure App Configuration Emulator. Is there any comparison of the features available?

Of course, relying on an image that's maintained by the vendor and behaves like the production version is definitely what we're aiming for. I'm not saying one implementation is better than the other.

@tnc1997
Copy link
Author

tnc1997 commented Nov 21, 2025

This Pull Request was opened some time ago and since then Microsoft has released an official emulator for Azure App Configuration although it is currently missing some of the features that are available in the unofficial emulator.

@tnc1997
Copy link
Author

tnc1997 commented Dec 28, 2025

For reference the Microsoft implementation is "focusing on independent, open source, system agnostic configuration solution, suited for self-hosting and platform-agnostic environments, rather than a local (trimmed down) alternative of the Azure App Configuration Service. With that in mind, we looked at proprietary hosting/infra features like Microsoft Entra ID, Azure RBAC, Azure Private Endpoint, Azure Network Security, Customer Managed Keys, Geo-Replication, Copilot, etc. These either require Azure subscription, Azure dependency or entirely not feasible". The unofficial emulator aims to be a substitute for Azure App Configuration in local environments as opposed to a standalone configuration solution.

@netlify
Copy link

netlify bot commented Dec 28, 2025

Deploy Preview for testcontainers-dotnet ready!

Name Link
🔨 Latest commit 7f1e517
🔍 Latest deploy log https://app.netlify.com/projects/testcontainers-dotnet/deploys/6950e4b4fbc1870008a285b8
😎 Deploy Preview https://deploy-preview-1200--testcontainers-dotnet.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link

coderabbitai bot commented Dec 28, 2025

Walkthrough

This PR introduces a new Testcontainers module for Azure App Configuration emulator. It adds builder, configuration, and container classes to integrate the emulator into test containers, along with project references, NuGet dependencies (Azure.Data.AppConfiguration v1.4.1), and integration tests demonstrating container functionality.

Changes

Cohort / File(s) Summary
Package Management
Directory.Packages.props
Added Azure.Data.AppConfiguration package version 1.4.1 reference
Solution Configuration
Testcontainers.sln
Registered two new projects: Testcontainers.AzureAppConfiguration and Testcontainers.AzureAppConfiguration.Tests with GUIDs, build configurations, and project nesting mappings
Core Implementation
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs, AzureAppConfigurationConfiguration.cs, AzureAppConfigurationContainer.cs
Implemented builder pattern with fluent configuration (WithCredential, WithSecret), configuration class for storing settings, and container class exposing GetConnectionString() method for endpoint construction
Core Setup
src/Testcontainers.AzureAppConfiguration/.editorconfig, Usings.cs, ...csproj
Added editor configuration, global using directives (System, Docker.DotNet.Models, DotNet.Testcontainers), and project file targeting net6.0, net8.0, netstandard2.0/2.1
Test Implementation
tests/Testcontainers.AzureAppConfiguration.Tests/AzureAppConfigurationContainerTest.cs
Implemented integration test verifying container lifecycle (InitializeAsync/DisposeAsync), ConfigurationClient connectivity, and setting/retrieval operations on Linux Docker platform
Test Setup
tests/Testcontainers.AzureAppConfiguration.Tests/.editorconfig, Usings.cs, ...csproj
Added editor configuration, global usings (Azure.Data.AppConfiguration, Xunit, DotNet.Testcontainers.Commons), and test project file targeting net8.0 with xUnit and Azure dependencies

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • HofmeisterAn

Poem

🐰 A container for Azure apps, so fine,
Configuration settings in perfect line,
The emulator spins, tests run with glee,
Building and testing, as smooth as can be!
~🔧✨

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add azure app configuration module' clearly and concisely describes the main change: adding a new Azure App Configuration module to the Testcontainers project.
Description check ✅ Passed The PR description covers all mandatory sections: 'What does this PR do?' explains the addition of the Azure App Configuration module, 'Why is it important?' provides the rationale, and 'Related issues' links to the closed issue #1198.
Linked Issues check ✅ Passed The PR successfully delivers the core requirement from issue #1198: adding a Testcontainers module for the Emulator for Azure App Configuration to enable easier integration testing.
Out of Scope Changes check ✅ Passed All changes are directly scoped to creating the new Azure App Configuration module and its tests; no unrelated modifications outside the stated objectives are present.
Docstring Coverage ✅ Passed Docstring coverage is 85.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (3)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationContainer.cs (2)

26-26: Document HTTP-only endpoint limitation and extensibility.

The container uses an HTTP-only endpoint by default. While your PR discussion notes that the emulator doesn't support TLS out-of-the-box and provides examples for configuring TLS via environment variables, consider adding XML documentation or inline comments to:

  1. Note that the default endpoint uses HTTP
  2. Reference how users can configure TLS (via WithEnvironment for certificate paths)
  3. Clarify that this aligns with the emulator's design (HMAC auth over HTTP is supported)

This would help users understand the security posture and customization options without needing to dig through PR comments.


23-30: Simplify with collection initializer syntax.

The connection string format is correct for Azure App Configuration HMAC authentication. However, consider using collection initializer syntax to improve readability:

 public string GetConnectionString()
 {
-    var properties = new Dictionary<string, string>();
-    properties.Add("Endpoint", new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(AzureAppConfigurationBuilder.AzureAppConfigurationPort)).ToString());
-    properties.Add("Id", _configuration.Credential);
-    properties.Add("Secret", _configuration.Secret);
+    var properties = new Dictionary<string, string>
+    {
+        ["Endpoint"] = new UriBuilder(Uri.UriSchemeHttp, Hostname, GetMappedPublicPort(AzureAppConfigurationBuilder.AzureAppConfigurationPort)).ToString(),
+        ["Id"] = _configuration.Credential,
+        ["Secret"] = _configuration.Secret
+    };
     return string.Join(";", properties.Select(property => string.Join("=", property.Key, property.Value)));
 }
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs (1)

7-13: Consider documenting the image choice and version pinning.

The PR discussion mentions trade-offs between this unofficial emulator and Microsoft's official one. Consider adding a brief XML doc comment on AzureAppConfigurationImage explaining:

  1. Why this specific emulator was chosen (more feature-complete per PR discussion)
  2. That version 1.0 is pinned intentionally

This helps future maintainers understand the decision context.

📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cd2f52a and 7f1e517.

📒 Files selected for processing (12)
  • Directory.Packages.props
  • Testcontainers.sln
  • src/Testcontainers.AzureAppConfiguration/.editorconfig
  • src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs
  • src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationConfiguration.cs
  • src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationContainer.cs
  • src/Testcontainers.AzureAppConfiguration/Testcontainers.AzureAppConfiguration.csproj
  • src/Testcontainers.AzureAppConfiguration/Usings.cs
  • tests/Testcontainers.AzureAppConfiguration.Tests/.editorconfig
  • tests/Testcontainers.AzureAppConfiguration.Tests/AzureAppConfigurationContainerTest.cs
  • tests/Testcontainers.AzureAppConfiguration.Tests/Testcontainers.AzureAppConfiguration.Tests.csproj
  • tests/Testcontainers.AzureAppConfiguration.Tests/Usings.cs
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-11-17T17:58:43.958Z
Learnt from: diegosasw
Repo: testcontainers/testcontainers-dotnet PR: 1583
File: src/Testcontainers.KurrentDb/Testcontainers.KurrentDb.csproj:7-7
Timestamp: 2025-11-17T17:58:43.958Z
Learning: In the testcontainers-dotnet repository, JetBrains.Annotations should use version 2023.3.0 to maintain consistency with the main Testcontainers csproj, rather than always using the latest available version.

Applied to files:

  • src/Testcontainers.AzureAppConfiguration/Testcontainers.AzureAppConfiguration.csproj
  • src/Testcontainers.AzureAppConfiguration/Usings.cs
  • tests/Testcontainers.AzureAppConfiguration.Tests/.editorconfig
  • tests/Testcontainers.AzureAppConfiguration.Tests/Usings.cs
  • tests/Testcontainers.AzureAppConfiguration.Tests/Testcontainers.AzureAppConfiguration.Tests.csproj
  • Testcontainers.sln
  • tests/Testcontainers.AzureAppConfiguration.Tests/AzureAppConfigurationContainerTest.cs
📚 Learning: 2025-11-08T09:04:00.045Z
Learnt from: HofmeisterAn
Repo: testcontainers/testcontainers-dotnet PR: 1509
File: tests/Testcontainers.Grafana.Tests/GrafanaContainerTest.cs:45-46
Timestamp: 2025-11-08T09:04:00.045Z
Learning: In xUnit.net test methods in the testcontainers-dotnet project, ConfigureAwait(true) is recommended and correct to use, as it ensures proper synchronization context capture for xUnit's test parallelism management. Do not suggest changing ConfigureAwait(true) to ConfigureAwait(false) in test methods.

Applied to files:

  • tests/Testcontainers.AzureAppConfiguration.Tests/Usings.cs
  • tests/Testcontainers.AzureAppConfiguration.Tests/AzureAppConfigurationContainerTest.cs
🧬 Code graph analysis (4)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs (2)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationConfiguration.cs (6)
  • PublicAPI (4-69)
  • AzureAppConfigurationConfiguration (12-16)
  • AzureAppConfigurationConfiguration (22-26)
  • AzureAppConfigurationConfiguration (32-36)
  • AzureAppConfigurationConfiguration (42-46)
  • AzureAppConfigurationConfiguration (53-58)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationContainer.cs (2)
  • PublicAPI (4-31)
  • AzureAppConfigurationContainer (13-17)
tests/Testcontainers.AzureAppConfiguration.Tests/AzureAppConfigurationContainerTest.cs (2)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs (9)
  • AzureAppConfigurationContainer (60-64)
  • AzureAppConfigurationBuilder (18-22)
  • AzureAppConfigurationBuilder (28-32)
  • AzureAppConfigurationBuilder (42-46)
  • AzureAppConfigurationBuilder (53-57)
  • AzureAppConfigurationBuilder (67-75)
  • AzureAppConfigurationBuilder (92-95)
  • AzureAppConfigurationBuilder (98-101)
  • AzureAppConfigurationBuilder (104-107)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationContainer.cs (2)
  • AzureAppConfigurationContainer (13-17)
  • GetConnectionString (23-30)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationContainer.cs (2)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs (10)
  • PublicAPI (4-108)
  • AzureAppConfigurationContainer (60-64)
  • AzureAppConfigurationBuilder (18-22)
  • AzureAppConfigurationBuilder (28-32)
  • AzureAppConfigurationBuilder (42-46)
  • AzureAppConfigurationBuilder (53-57)
  • AzureAppConfigurationBuilder (67-75)
  • AzureAppConfigurationBuilder (92-95)
  • AzureAppConfigurationBuilder (98-101)
  • AzureAppConfigurationBuilder (104-107)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationConfiguration.cs (6)
  • PublicAPI (4-69)
  • AzureAppConfigurationConfiguration (12-16)
  • AzureAppConfigurationConfiguration (22-26)
  • AzureAppConfigurationConfiguration (32-36)
  • AzureAppConfigurationConfiguration (42-46)
  • AzureAppConfigurationConfiguration (53-58)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationConfiguration.cs (3)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs (1)
  • PublicAPI (4-108)
src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationContainer.cs (1)
  • PublicAPI (4-31)
src/Testcontainers/Builders/BuildConfiguration.cs (1)
  • BuildConfiguration (13-190)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: analyze (csharp)
🔇 Additional comments (17)
src/Testcontainers.AzureAppConfiguration/.editorconfig (1)

1-1: Standard EditorConfig root marker is appropriate.

The root = true directive correctly marks this as the root EditorConfig file for the new module directory, ensuring editor conventions are scoped appropriately.

tests/Testcontainers.AzureAppConfiguration.Tests/.editorconfig (1)

1-1: LGTM!

Standard EditorConfig root marker.

src/Testcontainers.AzureAppConfiguration/Testcontainers.AzureAppConfiguration.csproj (1)

1-12: LGTM!

Project configuration follows the repository conventions, including the correct JetBrains.Annotations version (2023.3.0) per repository standards.

tests/Testcontainers.AzureAppConfiguration.Tests/Usings.cs (1)

1-4: LGTM!

Global usings are appropriate for the test project scope.

src/Testcontainers.AzureAppConfiguration/Usings.cs (1)

1-9: LGTM!

Global usings are appropriate for a Testcontainers module implementation.

Testcontainers.sln (1)

27-28: LGTM!

Solution file correctly wires the new Azure App Configuration module and test projects with proper build configurations and nesting.

Also applies to: 151-152, 813-820, 957-958

Directory.Packages.props (1)

40-40: Update Azure.Data.AppConfiguration to version 1.7.0.

Version 1.4.1 is outdated. The latest available version is 1.7.0, with intermediate releases 1.5.0, 1.6.0, and 1.6.1 also available. Other Azure packages in this file (Identity 1.13.2, EventHubs 5.11.3, ServiceBus 7.20.1) are significantly newer, creating inconsistency in dependency versions.

⛔ Skipped due to learnings
Learnt from: diegosasw
Repo: testcontainers/testcontainers-dotnet PR: 1583
File: src/Testcontainers.KurrentDb/Testcontainers.KurrentDb.csproj:7-7
Timestamp: 2025-11-17T17:58:43.958Z
Learning: In the testcontainers-dotnet repository, JetBrains.Annotations should use version 2023.3.0 to maintain consistency with the main Testcontainers csproj, rather than always using the latest available version.
tests/Testcontainers.AzureAppConfiguration.Tests/Testcontainers.AzureAppConfiguration.Tests.csproj (1)

3-3: Update target framework to match other test projects.

This test project targets net8.0 while all other test projects in the repository target net10.0. Change <TargetFrameworks>net8.0</TargetFrameworks> to <TargetFramework>net10.0</TargetFramework> for consistency.

⛔ Skipped due to learnings
Learnt from: diegosasw
Repo: testcontainers/testcontainers-dotnet PR: 1583
File: src/Testcontainers.KurrentDb/Testcontainers.KurrentDb.csproj:7-7
Timestamp: 2025-11-17T17:58:43.958Z
Learning: In the testcontainers-dotnet repository, JetBrains.Annotations should use version 2023.3.0 to maintain consistency with the main Testcontainers csproj, rather than always using the latest available version.
tests/Testcontainers.AzureAppConfiguration.Tests/AzureAppConfigurationContainerTest.cs (1)

1-34: LGTM! Well-structured integration test.

The test follows the established patterns in this repository:

  • Proper IAsyncLifetime implementation for container lifecycle
  • Correct use of ConfigureAwait(true) for xUnit test methods (per repository conventions)
  • Clear AAA (Arrange-Act-Assert) structure
  • Linux platform trait appropriately applied

The test effectively validates that the ConfigurationClient can interact with the emulator container via HMAC authentication.

src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationBuilder.cs (4)

42-57: LGTM! Proper fluent configuration with dual state management.

The methods correctly:

  1. Merge into the configuration object (for GetConnectionString() usage)
  2. Set container environment variables (for emulator HMAC authentication)

The double-underscore notation (Authentication__Schemes__Hmac__*) correctly maps to ASP.NET Core's hierarchical configuration binding.


78-89: LGTM! Proper validation guards.

The validation correctly ensures both Credential and Secret are provided before building the container, preventing cryptic runtime failures.


92-107: LGTM! Standard builder pattern implementation.

The Clone and Merge overrides correctly implement the immutable builder pattern consistent with other modules in this repository.


67-75: Wait strategy log message is correct.

The "Now listening on" message is the standard Kestrel startup output for ASP.NET Core applications and is confirmed to work with the emulator image. The test suite successfully starts the container with this configuration, validating the wait strategy.

src/Testcontainers.AzureAppConfiguration/AzureAppConfigurationConfiguration.cs (4)

1-16: LGTM! Well-structured configuration class.

The primary constructor with optional parameters enables flexible initialization while supporting the immutable configuration pattern used throughout this repository.


18-36: LGTM! Required constructors for builder pattern.

These constructors support the Clone methods in AzureAppConfigurationBuilder and correctly delegate Docker resource configuration to the base class.


48-58: LGTM! Correct merge semantics.

The merge constructor properly uses BuildConfiguration.Combine to implement the "newer value wins" pattern, which is consistent with how other configuration classes in this repository handle immutable updates.


60-68: LGTM!

Immutable properties with appropriate documentation.

@bhehe
Copy link

bhehe commented Jan 6, 2026

Came here looking for a module to support AppConfig myself. +1 for the interest and need.

fwiw, while I can appreciate a pre-existing emulator attempt from a 3rd party, I'd have to say I fall in the same camp of simply having a bias and preference for an emulator that is being provided by the actual resource/product development team themselves. For better or for worse feature comparison wise I would expect (or more hope) the product team would achieve feature parity -and- keep it in sync and maintain it. Like in my case we're now using the service bus emulator from MS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request module An official Testcontainers module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Enhancement]: Add Support for Emulator for Azure App Configuration

5 participants