Skip to content

Commit

Permalink
feat(testcontainers#421) Added AzuriteTestcontainer - added run one s…
Browse files Browse the repository at this point in the history
…ervice only options
  • Loading branch information
vlaskal committed Aug 7, 2022
1 parent 8bf5136 commit 96cadd5
Show file tree
Hide file tree
Showing 7 changed files with 235 additions and 73 deletions.
2 changes: 2 additions & 0 deletions Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<GlobalPackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0" />
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
<GlobalPackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.435" />
<PackageReference Update="Azure.Storage.Blobs" Version="12.13.0" />
<PackageReference Update="Azure.Storage.Queues" Version="12.11.0" />
<PackageReference Update="Azure.Data.Tables" Version="12.6.1" />
<PackageReference Update="JetBrains.Annotations" Version="2022.1.0" PrivateAssets="all" />
<PackageReference Update="Docker.DotNet" Version="3.125.10" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,49 @@ public static class TestcontainersBuilderAzuriteExtension
{
public static ITestcontainersBuilder<AzuriteTestcontainer> WithAzurite(this ITestcontainersBuilder<AzuriteTestcontainer> builder, AzuriteTestcontainerConfiguration configuration)
{
return builder
builder = builder
.WithImage(configuration.Image)
.WithEnvironment(new ReadOnlyDictionary<string, string>(configuration.Environments))
.WithPortBinding(configuration.BlobPort, AzuriteTestcontainerConfiguration.DefaultBlobPort)
.WithPortBinding(configuration.QueuePort, AzuriteTestcontainerConfiguration.DefaultQueuePort)
.WithPortBinding(configuration.TablePort, AzuriteTestcontainerConfiguration.DefaultTablePort)
.WithOutputConsumer(configuration.OutputConsumer)
.WithWaitStrategy(configuration.WaitStrategy)
.ConfigureContainer(container =>
{
container.ContainerBlobPort = AzuriteTestcontainerConfiguration.DefaultBlobPort;
container.ContainerQueuePort = AzuriteTestcontainerConfiguration.DefaultQueuePort;
container.ContainerTablePort = AzuriteTestcontainerConfiguration.DefaultTablePort;
container.ContainerBlobPort = configuration.RunBlobOnly || configuration.RunAllServices ? AzuriteTestcontainerConfiguration.DefaultBlobPort : 0;
container.ContainerQueuePort = configuration.RunQueueOnly || configuration.RunAllServices ? AzuriteTestcontainerConfiguration.DefaultQueuePort : 0;
container.ContainerTablePort = configuration.RunTableOnly || configuration.RunAllServices ? AzuriteTestcontainerConfiguration.DefaultTablePort : 0;
});

if (configuration.RunBlobOnly || configuration.RunAllServices)
{
builder = builder.WithPortBinding(configuration.BlobPort, AzuriteTestcontainerConfiguration.DefaultBlobPort);
}

if (configuration.RunQueueOnly || configuration.RunAllServices)
{
builder = builder.WithPortBinding(configuration.QueuePort, AzuriteTestcontainerConfiguration.DefaultQueuePort);
}

if (configuration.RunTableOnly || configuration.RunAllServices)
{
builder = builder.WithPortBinding(configuration.TablePort, AzuriteTestcontainerConfiguration.DefaultTablePort);
}

if (configuration.RunBlobOnly)
{
builder = builder.WithCommand("azurite-blob", "--blobHost", AzuriteTestcontainerConfiguration.DefaultBlobEndpoint);
}

if (configuration.RunQueueOnly)
{
builder = builder.WithCommand("azurite-queue", "--queueHost", AzuriteTestcontainerConfiguration.DefaultQueueEndpoint);
}

if (configuration.RunTableOnly)
{
builder = builder.WithCommand("azurite-table", "--tableHost", AzuriteTestcontainerConfiguration.DefaultTableEndpoint);
}

return builder;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ namespace DotNet.Testcontainers.Configurations.Modules.Databases

public class AzuriteTestcontainerConfiguration : IDisposable
{
/// <summary>
/// Default Azurite docker image.
/// </summary>
public const string DefaultAzuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.18.0";

/// <summary>
/// Default Blob service listening port. Default is 10000.
/// </summary>
Expand All @@ -27,6 +22,16 @@ public class AzuriteTestcontainerConfiguration : IDisposable
/// </summary>
public const int DefaultTablePort = 10002;

internal const string DefaultBlobEndpoint = "0.0.0.0";
internal const string DefaultQueueEndpoint = "0.0.0.0";
internal const string DefaultTableEndpoint = "0.0.0.0";

private const string DefaultAzuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.18.0";

private bool runBlobOnly;
private bool runQueueOnly;
private bool runTableOnly;

/// <summary>
/// Initializes a new instance of the <see cref="AzuriteTestcontainerConfiguration" /> class with default Azurite image.
/// </summary>
Expand Down Expand Up @@ -62,6 +67,26 @@ protected AzuriteTestcontainerConfiguration(string image)
[PublicAPI]
public int BlobPort { get; set; }

/// <summary>
/// Gets or sets a value indicating whether Blob service should run standalone.
/// </summary>
/// <remarks>
/// Default value is false.
/// </remarks>
[PublicAPI]
public bool RunBlobOnly
{
get => this.runBlobOnly;
set
{
this.runBlobOnly = value;
if (value)
{
this.RunQueueOnly = this.RunTableOnly = false;
}
}
}

/// <summary>
/// Gets or sets the host Queue port.
/// </summary>
Expand All @@ -71,6 +96,26 @@ protected AzuriteTestcontainerConfiguration(string image)
[PublicAPI]
public int QueuePort { get; set; }

/// <summary>
/// Gets or sets a value indicating whether Queue service should run standalone.
/// </summary>
/// <remarks>
/// Default value is false.
/// </remarks>
[PublicAPI]
public bool RunQueueOnly
{
get => this.runQueueOnly;
set
{
this.runQueueOnly = value;
if (value)
{
this.RunBlobOnly = this.RunTableOnly = false;
}
}
}

/// <summary>
/// Gets or sets the host Table port.
/// </summary>
Expand All @@ -80,6 +125,32 @@ protected AzuriteTestcontainerConfiguration(string image)
[PublicAPI]
public int TablePort { get; set; }

/// <summary>
/// Gets or sets a value indicating whether Table service should run standalone.
/// </summary>
/// <remarks>
/// Default value is false.
/// </remarks>
[PublicAPI]
public bool RunTableOnly
{
get => this.runTableOnly;
set
{
this.runTableOnly = value;
if (value)
{
this.RunBlobOnly = this.RunQueueOnly = false;
}
}
}

/// <summary>
/// Gets a value indicating whether all Azurite service will run.
/// </summary>
[PublicAPI]
public bool RunAllServices => !this.RunBlobOnly && !this.RunQueueOnly && !this.RunTableOnly;

/// <summary>
/// Gets the environment configuration.
/// </summary>
Expand All @@ -103,10 +174,17 @@ protected AzuriteTestcontainerConfiguration(string image)
/// Uses <see cref="Wait.ForUnixContainer" /> and waits for Azurite ports.
/// </remarks>
[PublicAPI]
public IWaitForContainerOS WaitStrategy => Wait.ForUnixContainer()
.UntilPortIsAvailable(DefaultBlobPort)
.UntilPortIsAvailable(DefaultQueuePort)
.UntilPortIsAvailable(DefaultTablePort);
public IWaitForContainerOS WaitStrategy
{
get
{
var waitStrategy = Wait.ForUnixContainer();
waitStrategy = this.RunBlobOnly || this.RunAllServices ? waitStrategy.UntilPortIsAvailable(DefaultBlobPort) : waitStrategy;
waitStrategy = this.RunQueueOnly || this.RunAllServices ? waitStrategy.UntilPortIsAvailable(DefaultQueuePort) : waitStrategy;
waitStrategy = this.RunTableOnly || this.RunAllServices ? waitStrategy.UntilPortIsAvailable(DefaultTablePort) : waitStrategy;
return waitStrategy;
}
}

/// <inheritdoc />
public void Dispose()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ internal AzuriteTestcontainer(ITestcontainersConfiguration configuration, ILogge
$"DefaultEndpointsProtocol=http;" +
$"AccountName=devstoreaccount1;" +
$"AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" +
$"BlobEndpoint=http://{this.Hostname}:{this.BlobPort}/devstoreaccount1;" +
$"QueueEndpoint=http://{this.Hostname}:{this.QueuePort}/devstoreaccount1;" +
$"TableEndpoint=http://{this.Hostname}:{this.TablePort}/devstoreaccount1;";
(ContainerBlobPort != 0 ? $"BlobEndpoint=http://{this.Hostname}:{this.BlobPort}/devstoreaccount1;" : string.Empty) +
(ContainerQueuePort != 0 ? $"QueueEndpoint=http://{this.Hostname}:{this.QueuePort}/devstoreaccount1;" : string.Empty) +
(ContainerTablePort != 0 ? $"TableEndpoint=http://{this.Hostname}:{this.TablePort}/devstoreaccount1;" : string.Empty);
}
}

This file was deleted.

2 changes: 2 additions & 0 deletions tests/Testcontainers.Tests/Testcontainers.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Data.Tables" />
<PackageReference Include="Azure.Storage.Blobs" />
<PackageReference Include="Azure.Storage.Queues" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="coverlet.msbuild" />
Expand Down
Loading

0 comments on commit 96cadd5

Please sign in to comment.