Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 4 additions & 16 deletions tests/Testcontainers.Azurite.Tests/AzuriteContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
namespace Testcontainers.Azurite;

public abstract class AzuriteContainerTest : IAsyncLifetime
public abstract class AzuriteContainerTest : ContainerTest<AzuriteBuilder, AzuriteContainer>
{
private readonly AzuriteContainer _azuriteContainer = new AzuriteBuilder().Build();

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

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

private static bool HasError<TResponseEntity>(NullableResponse<TResponseEntity> response)
{
using (var rawResponse = response.GetRawResponse())
Expand All @@ -29,7 +17,7 @@ public sealed class BlobService : AzuriteContainerTest
public async Task EstablishesConnection()
{
// Give
var client = new BlobServiceClient(_azuriteContainer.GetConnectionString());
var client = new BlobServiceClient(Container.GetConnectionString());

// When
var properties = await client.GetPropertiesAsync()
Expand All @@ -47,7 +35,7 @@ public sealed class QueueService : AzuriteContainerTest
public async Task EstablishesConnection()
{
// Give
var client = new QueueServiceClient(_azuriteContainer.GetConnectionString());
var client = new QueueServiceClient(Container.GetConnectionString());

// When
var properties = await client.GetPropertiesAsync()
Expand All @@ -65,7 +53,7 @@ public sealed class TableService : AzuriteContainerTest
public async Task EstablishesConnection()
{
// Give
var client = new TableServiceClient(_azuriteContainer.GetConnectionString());
var client = new TableServiceClient(Container.GetConnectionString());

// When
var properties = await client.GetPropertiesAsync()
Expand Down
35 changes: 35 additions & 0 deletions tests/Testcontainers.Commons/ContainerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System.Threading.Tasks;
using DotNet.Testcontainers.Builders;
using DotNet.Testcontainers.Containers;
using Xunit;

namespace DotNet.Testcontainers.Commons
{
public abstract class ContainerTest<TBuilderEntity, TContainerEntity> : IAsyncLifetime
where TBuilderEntity : IContainerBuilder<TBuilderEntity, TContainerEntity>, new()
where TContainerEntity : IContainer
{
protected ContainerTest() : this(null)
{
}

protected ContainerTest(Action<TBuilderEntity> configure)
{
var builder = new TBuilderEntity();
configure?.Invoke(builder);
Container = builder.Build();
}

protected TContainerEntity Container { get; }

public async Task InitializeAsync()
{
await Container.StartAsync();
}

public async Task DisposeAsync()
{
await Container.DisposeAsync();
}
}
}
1 change: 1 addition & 0 deletions tests/Testcontainers.Commons/Testcontainers.Commons.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2022.3.1"/>
<PackageReference Include="xunit" Version="2.4.2"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="$(SolutionDir)src/Testcontainers/Testcontainers.csproj"/>
Expand Down
18 changes: 3 additions & 15 deletions tests/Testcontainers.CosmosDb.Tests/CosmosDbContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,19 @@
namespace Testcontainers.CosmosDb;

public sealed class CosmosDbContainerTest : IAsyncLifetime
public sealed class CosmosDbContainerTest : ContainerTest<CosmosDbBuilder, CosmosDbContainer>
{
private readonly CosmosDbContainer _cosmosDbContainer = new CosmosDbBuilder().Build();

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

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

[Fact(Skip = "The Cosmos DB Linux Emulator Docker image does not run on Microsoft's CI environment (GitHub, Azure DevOps).")] // https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/45.
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task AccountPropertiesIdReturnsLocalhost()
{
// Given
using var httpClient = _cosmosDbContainer.HttpClient;
using var httpClient = Container.HttpClient;

var cosmosClientOptions = new CosmosClientOptions();
cosmosClientOptions.ConnectionMode = ConnectionMode.Gateway;
cosmosClientOptions.HttpClientFactory = () => httpClient;

using var cosmosClient = new CosmosClient(_cosmosDbContainer.GetConnectionString(), cosmosClientOptions);
using var cosmosClient = new CosmosClient(Container.GetConnectionString(), cosmosClientOptions);

// When
var accountProperties = await cosmosClient.ReadAccountAsync()
Expand Down
16 changes: 2 additions & 14 deletions tests/Testcontainers.CouchDb.Tests/CouchDbContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
namespace Testcontainers.CouchDb;

public sealed class CouchDbContainerTest : IAsyncLifetime
public sealed class CouchDbContainerTest : ContainerTest<CouchDbBuilder, CouchDbContainer>
{
private readonly CouchDbContainer _couchDbContainer = new CouchDbBuilder().Build();

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

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task PutDatabaseReturnsHttpStatusCodeCreated()
{
// Given
using var client = new MyCouchClient(_couchDbContainer.GetConnectionString(), "db");
using var client = new MyCouchClient(Container.GetConnectionString(), "db");

// When
var database = await client.Database.PutAsync()
Expand Down
18 changes: 3 additions & 15 deletions tests/Testcontainers.Couchbase.Tests/CouchDbContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,26 +1,14 @@
namespace Testcontainers.Couchbase;

public sealed class CouchbaseContainerTest : IAsyncLifetime
public sealed class CouchbaseContainerTest : ContainerTest<CouchbaseBuilder, CouchbaseContainer>
{
private readonly CouchbaseContainer _couchbaseContainer = new CouchbaseBuilder().Build();

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

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task GetBucketReturnsDefaultBucket()
{
// Given
var clusterOptions = new ClusterOptions();
clusterOptions.ConnectionString = _couchbaseContainer.GetConnectionString();
clusterOptions.ConnectionString = Container.GetConnectionString();
clusterOptions.UserName = CouchbaseBuilder.DefaultUsername;
clusterOptions.Password = CouchbaseBuilder.DefaultPassword;

Expand All @@ -31,7 +19,7 @@ public async Task GetBucketReturnsDefaultBucket()
var ping = await cluster.PingAsync()
.ConfigureAwait(false);

var bucket = await cluster.BucketAsync(_couchbaseContainer.Buckets.Single().Name)
var bucket = await cluster.BucketAsync(Container.Buckets.Single().Name)
.ConfigureAwait(false);

// Then
Expand Down
18 changes: 3 additions & 15 deletions tests/Testcontainers.DynamoDb.Tests/DynamoDbContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,20 @@
namespace Testcontainers.DynamoDb;

public sealed class DynamoDbContainerTest : IAsyncLifetime
public sealed class DynamoDbContainerTest : ContainerTest<DynamoDbBuilder, DynamoDbContainer>
{
private readonly DynamoDbContainer _dynamoDbContainer = new DynamoDbBuilder().Build();

static DynamoDbContainerTest()
{
Environment.SetEnvironmentVariable("AWS_ACCESS_KEY_ID", CommonCredentials.AwsAccessKey);
Environment.SetEnvironmentVariable("AWS_SECRET_ACCESS_KEY", CommonCredentials.AwsSecretKey);
}

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

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task ListBucketsReturnsHttpStatusCodeOk()
{
// Given
var config = new AmazonDynamoDBConfig();
config.ServiceURL = _dynamoDbContainer.GetConnectionString();
config.ServiceURL = Container.GetConnectionString();

using var client = new AmazonDynamoDBClient(config);

Expand All @@ -48,7 +36,7 @@ public async Task GetItemReturnsPutItem()
var tableName = Guid.NewGuid().ToString("D");

var config = new AmazonDynamoDBConfig();
config.ServiceURL = _dynamoDbContainer.GetConnectionString();
config.ServiceURL = Container.GetConnectionString();

using var client = new AmazonDynamoDBClient(config);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
namespace Testcontainers.Elasticsearch;

public sealed class ElasticsearchContainerTest : IAsyncLifetime
public sealed class ElasticsearchContainerTest : ContainerTest<ElasticsearchBuilder, ElasticsearchContainer>
{
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()));
var clientSettings = new ElasticsearchClientSettings(new Uri(Container.GetConnectionString()));
clientSettings.ServerCertificateValidationCallback(CertificateValidations.AllowAll);

var client = new ElasticsearchClient(clientSettings);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
namespace Testcontainers.EventStoreDb;

public sealed class EventStoreDbContainerTest : IAsyncLifetime
public sealed class EventStoreDbContainerTest : ContainerTest<EventStoreDbBuilder, EventStoreDbContainer>
{
private readonly EventStoreDbContainer _eventStoreDbContainer = new EventStoreDbBuilder().Build();

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

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task ReadStreamReturnsEvent()
Expand All @@ -23,7 +11,7 @@ public async Task ReadStreamReturnsEvent()

const string streamName = "some-stream";

var settings = EventStoreClientSettings.Create(_eventStoreDbContainer.GetConnectionString());
var settings = EventStoreClientSettings.Create(Container.GetConnectionString());

using var client = new EventStoreClient(settings);

Expand Down
16 changes: 2 additions & 14 deletions tests/Testcontainers.K3s.Tests/K3sContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,27 +1,15 @@
namespace Testcontainers.K3s;

public sealed class K3sContainerTest : IAsyncLifetime
public sealed class K3sContainerTest : ContainerTest<K3sBuilder, K3sContainer>
{
private readonly K3sContainer _k3sConainter = new K3sBuilder().Build();

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

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task CreateNamespaceReturnsHttpStatusCodeCreated()
{
// Given
using var kubeconfigStream = new MemoryStream();

var kubeconfig = await _k3sConainter.GetKubeconfigAsync()
var kubeconfig = await Container.GetKubeconfigAsync()
.ConfigureAwait(false);

await kubeconfigStream.WriteAsync(Encoding.Default.GetBytes(kubeconfig))
Expand Down
16 changes: 2 additions & 14 deletions tests/Testcontainers.Kafka.Tests/KafkaContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,27 +1,15 @@
namespace Testcontainers.Kafka;

public sealed class KafkaContainerTest : IAsyncLifetime
public sealed class KafkaContainerTest : ContainerTest<KafkaBuilder, KafkaContainer>
{
private readonly KafkaContainer _kafkaContainer = new KafkaBuilder().Build();

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

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task ConsumerReturnsProducerMessage()
{
// Given
const string topic = "sample";

var bootstrapServer = _kafkaContainer.GetBootstrapAddress();
var bootstrapServer = Container.GetBootstrapAddress();

var producerConfig = new ProducerConfig();
producerConfig.BootstrapServers = bootstrapServer;
Expand Down
18 changes: 3 additions & 15 deletions tests/Testcontainers.Keycloak.Tests/KeycloakContainerTest.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
namespace Testcontainers.Keycloak.Tests;

public sealed class KeycloakContainerTest : IAsyncLifetime
public sealed class KeycloakContainerTest : ContainerTest<KeycloakBuilder, KeycloakContainer>
{
private readonly KeycloakContainer _keycloakContainer = new KeycloakBuilder().Build();

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

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

[Fact]
public async Task GetOpenIdEndpointReturnsHttpStatusCodeOk()
{
// Given
using var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(_keycloakContainer.GetBaseAddress());
httpClient.BaseAddress = new Uri(Container.GetBaseAddress());

// When
using var response = await httpClient.GetAsync("/realms/master/.well-known/openid-configuration")
Expand All @@ -33,7 +21,7 @@ public async Task GetOpenIdEndpointReturnsHttpStatusCodeOk()
public async Task MasterRealmIsEnabled()
{
// Given
var keycloakClient = new KeycloakClient(_keycloakContainer.GetBaseAddress(), KeycloakBuilder.DefaultUsername, KeycloakBuilder.DefaultPassword);
var keycloakClient = new KeycloakClient(Container.GetBaseAddress(), KeycloakBuilder.DefaultUsername, KeycloakBuilder.DefaultPassword);

// When
var masterRealm = await keycloakClient.GetRealmAsync("master")
Expand Down
Loading