Skip to content

Apache ZooKeeper

Apache ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

Add the following dependency to your project file:

NuGet
1
dotnet add package Testcontainers.ZooKeeper

You can start a ZooKeeper container instance from any .NET application. This example uses xUnit.net's IAsyncLifetime interface to manage the lifecycle of the container. The container is started in the InitializeAsync method before the test method runs, ensuring that the environment is ready for testing. After the test completes, the container is removed in the DisposeAsync method.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public sealed class ZooKeeperContainerExample : IAsyncLifetime
{
    private readonly ZooKeeperContainer _zooKeeperContainer = new ZooKeeperBuilder(TestSession.GetImageFromDockerfile()).Build();

    public async ValueTask InitializeAsync()
    {
        await _zooKeeperContainer.StartAsync(TestContext.Current.CancellationToken)
            .ConfigureAwait(false);
    }

    public async ValueTask DisposeAsync()
    {
        await _zooKeeperContainer.DisposeAsync()
            .ConfigureAwait(false);
    }
}

Connect to the container — GetConnectionString() returns the host:port pair ZooKeeper clients expect:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public void GetConnectionStringReturnsHostAndPort()
{
    // Given
    var connectionString = _zooKeeperContainer.GetConnectionString();

    // Then
    Assert.Equal($"{_zooKeeperContainer.Hostname}:{_zooKeeperContainer.GetMappedPublicPort(ZooKeeperBuilder.ZooKeeperPort)}", connectionString);
}

The test example uses the following NuGet dependencies:

1
2
3
4
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
<PackageReference Include="coverlet.collector"/>
<PackageReference Include="xunit.runner.visualstudio"/>
<PackageReference Include="xunit.v3"/>

To execute the tests, use the command dotnet test from a terminal.

Tip

For the complete source code of this example and additional information, please refer to our test projects.