Skip to content

Commit 96cadd5

Browse files
committed
feat(testcontainers#421) Added AzuriteTestcontainer - added run one service only options
1 parent 8bf5136 commit 96cadd5

File tree

7 files changed

+235
-73
lines changed

7 files changed

+235
-73
lines changed

Packages.props

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<GlobalPackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0" />
55
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
66
<GlobalPackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.435" />
7+
<PackageReference Update="Azure.Storage.Blobs" Version="12.13.0" />
8+
<PackageReference Update="Azure.Storage.Queues" Version="12.11.0" />
79
<PackageReference Update="Azure.Data.Tables" Version="12.6.1" />
810
<PackageReference Update="JetBrains.Annotations" Version="2022.1.0" PrivateAssets="all" />
911
<PackageReference Update="Docker.DotNet" Version="3.125.10" />

src/Testcontainers/Builders/TestcontainersBuilderAzuriteExtension.cs

+36-7
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,49 @@ public static class TestcontainersBuilderAzuriteExtension
1313
{
1414
public static ITestcontainersBuilder<AzuriteTestcontainer> WithAzurite(this ITestcontainersBuilder<AzuriteTestcontainer> builder, AzuriteTestcontainerConfiguration configuration)
1515
{
16-
return builder
16+
builder = builder
1717
.WithImage(configuration.Image)
1818
.WithEnvironment(new ReadOnlyDictionary<string, string>(configuration.Environments))
19-
.WithPortBinding(configuration.BlobPort, AzuriteTestcontainerConfiguration.DefaultBlobPort)
20-
.WithPortBinding(configuration.QueuePort, AzuriteTestcontainerConfiguration.DefaultQueuePort)
21-
.WithPortBinding(configuration.TablePort, AzuriteTestcontainerConfiguration.DefaultTablePort)
2219
.WithOutputConsumer(configuration.OutputConsumer)
2320
.WithWaitStrategy(configuration.WaitStrategy)
2421
.ConfigureContainer(container =>
2522
{
26-
container.ContainerBlobPort = AzuriteTestcontainerConfiguration.DefaultBlobPort;
27-
container.ContainerQueuePort = AzuriteTestcontainerConfiguration.DefaultQueuePort;
28-
container.ContainerTablePort = AzuriteTestcontainerConfiguration.DefaultTablePort;
23+
container.ContainerBlobPort = configuration.RunBlobOnly || configuration.RunAllServices ? AzuriteTestcontainerConfiguration.DefaultBlobPort : 0;
24+
container.ContainerQueuePort = configuration.RunQueueOnly || configuration.RunAllServices ? AzuriteTestcontainerConfiguration.DefaultQueuePort : 0;
25+
container.ContainerTablePort = configuration.RunTableOnly || configuration.RunAllServices ? AzuriteTestcontainerConfiguration.DefaultTablePort : 0;
2926
});
27+
28+
if (configuration.RunBlobOnly || configuration.RunAllServices)
29+
{
30+
builder = builder.WithPortBinding(configuration.BlobPort, AzuriteTestcontainerConfiguration.DefaultBlobPort);
31+
}
32+
33+
if (configuration.RunQueueOnly || configuration.RunAllServices)
34+
{
35+
builder = builder.WithPortBinding(configuration.QueuePort, AzuriteTestcontainerConfiguration.DefaultQueuePort);
36+
}
37+
38+
if (configuration.RunTableOnly || configuration.RunAllServices)
39+
{
40+
builder = builder.WithPortBinding(configuration.TablePort, AzuriteTestcontainerConfiguration.DefaultTablePort);
41+
}
42+
43+
if (configuration.RunBlobOnly)
44+
{
45+
builder = builder.WithCommand("azurite-blob", "--blobHost", AzuriteTestcontainerConfiguration.DefaultBlobEndpoint);
46+
}
47+
48+
if (configuration.RunQueueOnly)
49+
{
50+
builder = builder.WithCommand("azurite-queue", "--queueHost", AzuriteTestcontainerConfiguration.DefaultQueueEndpoint);
51+
}
52+
53+
if (configuration.RunTableOnly)
54+
{
55+
builder = builder.WithCommand("azurite-table", "--tableHost", AzuriteTestcontainerConfiguration.DefaultTableEndpoint);
56+
}
57+
58+
return builder;
3059
}
3160
}
3261
}

src/Testcontainers/Configurations/Modules/Databases/AzuriteTestcontainerConfiguration.cs

+87-9
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ namespace DotNet.Testcontainers.Configurations.Modules.Databases
77

88
public class AzuriteTestcontainerConfiguration : IDisposable
99
{
10-
/// <summary>
11-
/// Default Azurite docker image.
12-
/// </summary>
13-
public const string DefaultAzuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.18.0";
14-
1510
/// <summary>
1611
/// Default Blob service listening port. Default is 10000.
1712
/// </summary>
@@ -27,6 +22,16 @@ public class AzuriteTestcontainerConfiguration : IDisposable
2722
/// </summary>
2823
public const int DefaultTablePort = 10002;
2924

25+
internal const string DefaultBlobEndpoint = "0.0.0.0";
26+
internal const string DefaultQueueEndpoint = "0.0.0.0";
27+
internal const string DefaultTableEndpoint = "0.0.0.0";
28+
29+
private const string DefaultAzuriteImage = "mcr.microsoft.com/azure-storage/azurite:3.18.0";
30+
31+
private bool runBlobOnly;
32+
private bool runQueueOnly;
33+
private bool runTableOnly;
34+
3035
/// <summary>
3136
/// Initializes a new instance of the <see cref="AzuriteTestcontainerConfiguration" /> class with default Azurite image.
3237
/// </summary>
@@ -62,6 +67,26 @@ protected AzuriteTestcontainerConfiguration(string image)
6267
[PublicAPI]
6368
public int BlobPort { get; set; }
6469

70+
/// <summary>
71+
/// Gets or sets a value indicating whether Blob service should run standalone.
72+
/// </summary>
73+
/// <remarks>
74+
/// Default value is false.
75+
/// </remarks>
76+
[PublicAPI]
77+
public bool RunBlobOnly
78+
{
79+
get => this.runBlobOnly;
80+
set
81+
{
82+
this.runBlobOnly = value;
83+
if (value)
84+
{
85+
this.RunQueueOnly = this.RunTableOnly = false;
86+
}
87+
}
88+
}
89+
6590
/// <summary>
6691
/// Gets or sets the host Queue port.
6792
/// </summary>
@@ -71,6 +96,26 @@ protected AzuriteTestcontainerConfiguration(string image)
7196
[PublicAPI]
7297
public int QueuePort { get; set; }
7398

99+
/// <summary>
100+
/// Gets or sets a value indicating whether Queue service should run standalone.
101+
/// </summary>
102+
/// <remarks>
103+
/// Default value is false.
104+
/// </remarks>
105+
[PublicAPI]
106+
public bool RunQueueOnly
107+
{
108+
get => this.runQueueOnly;
109+
set
110+
{
111+
this.runQueueOnly = value;
112+
if (value)
113+
{
114+
this.RunBlobOnly = this.RunTableOnly = false;
115+
}
116+
}
117+
}
118+
74119
/// <summary>
75120
/// Gets or sets the host Table port.
76121
/// </summary>
@@ -80,6 +125,32 @@ protected AzuriteTestcontainerConfiguration(string image)
80125
[PublicAPI]
81126
public int TablePort { get; set; }
82127

128+
/// <summary>
129+
/// Gets or sets a value indicating whether Table service should run standalone.
130+
/// </summary>
131+
/// <remarks>
132+
/// Default value is false.
133+
/// </remarks>
134+
[PublicAPI]
135+
public bool RunTableOnly
136+
{
137+
get => this.runTableOnly;
138+
set
139+
{
140+
this.runTableOnly = value;
141+
if (value)
142+
{
143+
this.RunBlobOnly = this.RunQueueOnly = false;
144+
}
145+
}
146+
}
147+
148+
/// <summary>
149+
/// Gets a value indicating whether all Azurite service will run.
150+
/// </summary>
151+
[PublicAPI]
152+
public bool RunAllServices => !this.RunBlobOnly && !this.RunQueueOnly && !this.RunTableOnly;
153+
83154
/// <summary>
84155
/// Gets the environment configuration.
85156
/// </summary>
@@ -103,10 +174,17 @@ protected AzuriteTestcontainerConfiguration(string image)
103174
/// Uses <see cref="Wait.ForUnixContainer" /> and waits for Azurite ports.
104175
/// </remarks>
105176
[PublicAPI]
106-
public IWaitForContainerOS WaitStrategy => Wait.ForUnixContainer()
107-
.UntilPortIsAvailable(DefaultBlobPort)
108-
.UntilPortIsAvailable(DefaultQueuePort)
109-
.UntilPortIsAvailable(DefaultTablePort);
177+
public IWaitForContainerOS WaitStrategy
178+
{
179+
get
180+
{
181+
var waitStrategy = Wait.ForUnixContainer();
182+
waitStrategy = this.RunBlobOnly || this.RunAllServices ? waitStrategy.UntilPortIsAvailable(DefaultBlobPort) : waitStrategy;
183+
waitStrategy = this.RunQueueOnly || this.RunAllServices ? waitStrategy.UntilPortIsAvailable(DefaultQueuePort) : waitStrategy;
184+
waitStrategy = this.RunTableOnly || this.RunAllServices ? waitStrategy.UntilPortIsAvailable(DefaultTablePort) : waitStrategy;
185+
return waitStrategy;
186+
}
187+
}
110188

111189
/// <inheritdoc />
112190
public void Dispose()

src/Testcontainers/Containers/Modules/Databases/AzuriteTestcontainer.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ internal AzuriteTestcontainer(ITestcontainersConfiguration configuration, ILogge
5656
$"DefaultEndpointsProtocol=http;" +
5757
$"AccountName=devstoreaccount1;" +
5858
$"AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" +
59-
$"BlobEndpoint=http://{this.Hostname}:{this.BlobPort}/devstoreaccount1;" +
60-
$"QueueEndpoint=http://{this.Hostname}:{this.QueuePort}/devstoreaccount1;" +
61-
$"TableEndpoint=http://{this.Hostname}:{this.TablePort}/devstoreaccount1;";
59+
(ContainerBlobPort != 0 ? $"BlobEndpoint=http://{this.Hostname}:{this.BlobPort}/devstoreaccount1;" : string.Empty) +
60+
(ContainerQueuePort != 0 ? $"QueueEndpoint=http://{this.Hostname}:{this.QueuePort}/devstoreaccount1;" : string.Empty) +
61+
(ContainerTablePort != 0 ? $"TableEndpoint=http://{this.Hostname}:{this.TablePort}/devstoreaccount1;" : string.Empty);
6262
}
6363
}

tests/Testcontainers.Tests/Fixtures/Containers/Unix/Modules/Databases/AzuriteFixture.cs

-45
This file was deleted.

tests/Testcontainers.Tests/Testcontainers.Tests.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
</PropertyGroup>
1111
<ItemGroup>
1212
<PackageReference Include="Azure.Data.Tables" />
13+
<PackageReference Include="Azure.Storage.Blobs" />
14+
<PackageReference Include="Azure.Storage.Queues" />
1315
<PackageReference Include="Microsoft.NET.Test.Sdk" />
1416
<PackageReference Include="Microsoft.Extensions.Hosting" />
1517
<PackageReference Include="coverlet.msbuild" />

0 commit comments

Comments
 (0)