Skip to content

Elasticsearch

Elasticsearch is a distributed, RESTful search and analytics engine capable of addressing a growing number of use cases. As the heart of the Elastic Stack, it centrally stores data for lightning fast search, fine‑tuned relevancy, and powerful analytics that scale with ease.

Add the following dependency to your project file:

NuGet
1
dotnet add package Testcontainers.Elasticsearch

You can start an Elasticsearch 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
17
18
19
20
21
22
23
24
25
26
27
28
private readonly ElasticsearchContainer _elasticsearchContainer = new ElasticsearchBuilder().Build();

public Task InitializeAsync()
{
    return _elasticsearchContainer.StartAsync();
}

public Task DisposeAsync()
{
    return _elasticsearchContainer.DisposeAsync().AsTask();
}

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public void PingReturnsValidResponse()
{
    // Given
    var clientSettings = new ElasticsearchClientSettings(new Uri(_elasticsearchContainer.GetConnectionString()));
    clientSettings.ServerCertificateValidationCallback(CertificateValidations.AllowAll);

    var client = new ElasticsearchClient(clientSettings);

    // When
    var response = client.Ping();

    // Then
    Assert.True(response.IsValidResponse);
}

The test example uses the following NuGet dependencies:

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

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.

A Note To Developers

The Testcontainers module creates a container that listens to requests over HTTPS. To communicate with the Elasticsearch instance, developers must create a ElasticsearchClientSettings instance and set the ServerCertificateValidationCallback delegate to CertificateValidations.AllowAll. Failing to do so will result in a communication failure as the .NET will reject the certificate coming from the container.