Skip to content

Commit 9cca536

Browse files
committed
Add Azurite container to Azure module
- Add AzuriteContainer to Azure module - Implement new tests - Update Azure documentation Signed-off-by: Esta Nagy <[email protected]>
1 parent f7973aa commit 9cca536

File tree

5 files changed

+809
-1
lines changed

5 files changed

+809
-1
lines changed

docs/modules/azure.md

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,95 @@ This module is INCUBATING. While it is ready for use and operational in the curr
55

66
Testcontainers module for the Microsoft Azure's [SDK](https://github.com/Azure/azure-sdk-for-java).
77

8-
Currently, the module supports `CosmosDB` emulator. In order to use it, you should use the following class:
8+
Currently, the module supports `Azurite` and `CosmosDB` emulators. In order to use them, you should use the following classes:
99

1010
Class | Container Image
1111
-|-
12+
AzuriteContainer | [mcr.microsoft.com/azure-storage/azurite](https://github.com/microsoft/containerregistry)
1213
CosmosDBEmulatorContainer | [mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator](https://github.com/microsoft/containerregistry)
1314

1415
## Usage example
1516

17+
### Azurite Storage Emulator
18+
19+
#### Using Blobs
20+
21+
Start Azurite Emulator during a test using Blob functionality:
22+
23+
<!--codeinclude-->
24+
[Starting a Azurite Blob container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:blobEmulatorContainer
25+
<!--/codeinclude-->
26+
27+
Get the connection string from the container:
28+
29+
<!--codeinclude-->
30+
[Get connection string](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:getBlobConnectionString
31+
<!--/codeinclude-->
32+
33+
Build Azure Blob client:
34+
35+
<!--codeinclude-->
36+
[Build Azure Blob Service client](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:createBlobClient
37+
<!--/codeinclude-->
38+
39+
Test against the Emulator:
40+
41+
<!--codeinclude-->
42+
[Testing against Azurite container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:testWithBlobClient
43+
<!--/codeinclude-->
44+
45+
#### Using Queues
46+
47+
Start Azurite Emulator during a test using Queue functionality:
48+
49+
<!--codeinclude-->
50+
[Starting a Azurite Queue container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:queueEmulatorContainer
51+
<!--/codeinclude-->
52+
53+
Get the connection string from the container:
54+
55+
<!--codeinclude-->
56+
[Get connection string](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:getQueueConnectionString
57+
<!--/codeinclude-->
58+
59+
Build Azure Queue client:
60+
61+
<!--codeinclude-->
62+
[Build Azure Queue Service client](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:createQueueClient
63+
<!--/codeinclude-->
64+
65+
Test against the Emulator:
66+
67+
<!--codeinclude-->
68+
[Testing against Azurite container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:testWithQueueClient
69+
<!--/codeinclude-->
70+
71+
#### Using Table
72+
73+
Start Azurite Emulator during a test using Table functionality:
74+
75+
<!--codeinclude-->
76+
[Starting a Azurite Table container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:tableEmulatorContainer
77+
<!--/codeinclude-->
78+
79+
Get the connection string from the container:
80+
81+
<!--codeinclude-->
82+
[Get connection string](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:getBlobConnectionString
83+
<!--/codeinclude-->
84+
85+
Build Azure Table client:
86+
87+
<!--codeinclude-->
88+
[Build Azure Table Service client](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:createTableClient
89+
<!--/codeinclude-->
90+
91+
Test against the Emulator:
92+
93+
<!--codeinclude-->
94+
[Testing against Azurite container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:testWithTableClient
95+
<!--/codeinclude-->
96+
1697
### CosmosDB
1798

1899
Start Azure CosmosDB Emulator during a test:

modules/azure/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@ dependencies {
77

88
testImplementation 'org.assertj:assertj-core:3.26.3'
99
testImplementation 'com.azure:azure-cosmos:4.63.3'
10+
testImplementation 'com.azure:azure-storage-blob:12.29.0'
11+
testImplementation 'com.azure:azure-storage-queue:12.24.0'
12+
testImplementation 'com.azure:azure-data-tables:12.5.0'
1013
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package org.testcontainers.containers;
2+
3+
import org.rnorth.ducttape.Preconditions;
4+
5+
/**
6+
* Builds connection strings for the {@link AzuriteContainer}.
7+
*/
8+
class AzuriteConnectionStringBuilder {
9+
10+
private static final String CONNECTION_PROTOCOL_FORMAT = "DefaultEndpointsProtocol=%s;";
11+
12+
private static final String ACCOUNT_DETAILS_FORMAT = "AccountName=%s;AccountKey=%s;";
13+
14+
private static final String BLOB_ENDPOINT_FORMAT = "BlobEndpoint=%s://%s:%d/%s;";
15+
16+
private static final String QUEUE_ENDPOINT_FORMAT = "QueueEndpoint=%s://%s:%d/%s;";
17+
18+
private static final String TABLE_ENDPOINT_FORMAT = "TableEndpoint=%s://%s:%d/%s;";
19+
20+
private String protocol = "http";
21+
22+
private String accountName = AzuriteContainer.WELL_KNOWN_ACCOUNT_NAME;
23+
24+
private String accountKey = AzuriteContainer.WELL_KNOWN_ACCOUNT_KEY;
25+
26+
private boolean useBlob = true;
27+
28+
private String blobHost = AzuriteContainer.DEFAULT_HOST;
29+
30+
private int blobPort = AzuriteContainer.DEFAULT_BLOB_PORT;
31+
32+
private boolean useQueue = true;
33+
34+
private String queueHost = AzuriteContainer.DEFAULT_HOST;
35+
36+
private int queuePort = AzuriteContainer.DEFAULT_QUEUE_PORT;
37+
38+
private boolean useTable = true;
39+
40+
private String tableHost = AzuriteContainer.DEFAULT_HOST;
41+
42+
private int tablePort = AzuriteContainer.DEFAULT_TABLE_PORT;
43+
44+
AzuriteConnectionStringBuilder useSsl(final boolean useSsl) {
45+
protocol = useSsl ? "https" : "http";
46+
return this;
47+
}
48+
49+
AzuriteConnectionStringBuilder accountCredentials(final String accountName, final String accountKey) {
50+
this.accountName = accountName;
51+
this.accountKey = accountKey;
52+
return this;
53+
}
54+
55+
AzuriteConnectionStringBuilder blobEndpoint(final String host, final int port, final boolean enabled) {
56+
blobHost = host;
57+
blobPort = port;
58+
useBlob = enabled;
59+
return this;
60+
}
61+
62+
AzuriteConnectionStringBuilder queueEndpoint(final String host, final int port, final boolean enabled) {
63+
queueHost = host;
64+
queuePort = port;
65+
useQueue = enabled;
66+
return this;
67+
}
68+
69+
AzuriteConnectionStringBuilder tableEndpoint(final String host, final int port, final boolean enabled) {
70+
tableHost = host;
71+
tablePort = port;
72+
useTable = enabled;
73+
return this;
74+
}
75+
76+
String build() {
77+
Preconditions.check("At least one of the blob, queue or table must be used!", useBlob || useQueue || useTable);
78+
79+
final StringBuilder stringBuilder = new StringBuilder()
80+
.append(String.format(CONNECTION_PROTOCOL_FORMAT, protocol))
81+
.append(String.format(ACCOUNT_DETAILS_FORMAT, accountName, accountKey));
82+
if (useBlob) {
83+
stringBuilder.append(String.format(BLOB_ENDPOINT_FORMAT, protocol, blobHost, blobPort, accountName));
84+
}
85+
if (useQueue) {
86+
stringBuilder.append(String.format(QUEUE_ENDPOINT_FORMAT, protocol, queueHost, queuePort, accountName));
87+
}
88+
if (useTable) {
89+
stringBuilder.append(String.format(TABLE_ENDPOINT_FORMAT, protocol, tableHost, tablePort, accountName));
90+
}
91+
return stringBuilder.toString();
92+
}
93+
}

0 commit comments

Comments
 (0)