Skip to content
Merged
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
83 changes: 82 additions & 1 deletion docs/modules/azure.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,95 @@ This module is INCUBATING. While it is ready for use and operational in the curr

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

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

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

## Usage example

### Azurite Storage Emulator

#### Using Blobs

Start Azurite Emulator during a test using Blob functionality:

<!--codeinclude-->
[Starting a Azurite Blob container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:blobEmulatorContainer
<!--/codeinclude-->

Get the connection string from the container:

<!--codeinclude-->
[Get connection string](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:getBlobConnectionString
<!--/codeinclude-->

Build Azure Blob client:

<!--codeinclude-->
[Build Azure Blob Service client](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:createBlobClient
<!--/codeinclude-->

Test against the Emulator:

<!--codeinclude-->
[Testing against Azurite container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:testWithBlobClient
<!--/codeinclude-->

#### Using Queues

Start Azurite Emulator during a test using Queue functionality:

<!--codeinclude-->
[Starting a Azurite Queue container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:queueEmulatorContainer
<!--/codeinclude-->

Get the connection string from the container:

<!--codeinclude-->
[Get connection string](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:getQueueConnectionString
<!--/codeinclude-->

Build Azure Queue client:

<!--codeinclude-->
[Build Azure Queue Service client](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:createQueueClient
<!--/codeinclude-->

Test against the Emulator:

<!--codeinclude-->
[Testing against Azurite container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:testWithQueueClient
<!--/codeinclude-->

#### Using Table

Start Azurite Emulator during a test using Table functionality:

<!--codeinclude-->
[Starting a Azurite Table container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:tableEmulatorContainer
<!--/codeinclude-->

Get the connection string from the container:

<!--codeinclude-->
[Get connection string](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:getBlobConnectionString
<!--/codeinclude-->

Build Azure Table client:

<!--codeinclude-->
[Build Azure Table Service client](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:createTableClient
<!--/codeinclude-->

Test against the Emulator:

<!--codeinclude-->
[Testing against Azurite container](../../modules/azure/src/test/java/org/testcontainers/containers/AzuriteContainerTest.java) inside_block:testWithTableClient
<!--/codeinclude-->

### CosmosDB

Start Azure CosmosDB Emulator during a test:
Expand Down
3 changes: 3 additions & 0 deletions modules/azure/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@ dependencies {

testImplementation 'org.assertj:assertj-core:3.26.3'
testImplementation 'com.azure:azure-cosmos:4.63.3'
testImplementation 'com.azure:azure-storage-blob:12.29.0'
testImplementation 'com.azure:azure-storage-queue:12.24.0'
testImplementation 'com.azure:azure-data-tables:12.5.0'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package org.testcontainers.containers;

import org.rnorth.ducttape.Preconditions;

/**
* Builds connection strings for the {@link AzuriteContainer}.
*/
class AzuriteConnectionStringBuilder {

private static final String CONNECTION_PROTOCOL_FORMAT = "DefaultEndpointsProtocol=%s;";

private static final String ACCOUNT_DETAILS_FORMAT = "AccountName=%s;AccountKey=%s;";

private static final String BLOB_ENDPOINT_FORMAT = "BlobEndpoint=%s://%s:%d/%s;";

private static final String QUEUE_ENDPOINT_FORMAT = "QueueEndpoint=%s://%s:%d/%s;";

private static final String TABLE_ENDPOINT_FORMAT = "TableEndpoint=%s://%s:%d/%s;";

private String protocol = "http";

private String accountName = AzuriteContainer.WELL_KNOWN_ACCOUNT_NAME;

private String accountKey = AzuriteContainer.WELL_KNOWN_ACCOUNT_KEY;

private boolean useBlob = true;

private String blobHost = AzuriteContainer.DEFAULT_HOST;

private int blobPort = AzuriteContainer.DEFAULT_BLOB_PORT;

private boolean useQueue = true;

private String queueHost = AzuriteContainer.DEFAULT_HOST;

private int queuePort = AzuriteContainer.DEFAULT_QUEUE_PORT;

private boolean useTable = true;

private String tableHost = AzuriteContainer.DEFAULT_HOST;

private int tablePort = AzuriteContainer.DEFAULT_TABLE_PORT;

AzuriteConnectionStringBuilder useSsl(final boolean useSsl) {
protocol = useSsl ? "https" : "http";
return this;
}

AzuriteConnectionStringBuilder accountCredentials(final String accountName, final String accountKey) {
this.accountName = accountName;
this.accountKey = accountKey;
return this;
}

AzuriteConnectionStringBuilder blobEndpoint(final String host, final int port, final boolean enabled) {
blobHost = host;
blobPort = port;
useBlob = enabled;
return this;
}

AzuriteConnectionStringBuilder queueEndpoint(final String host, final int port, final boolean enabled) {
queueHost = host;
queuePort = port;
useQueue = enabled;
return this;
}

AzuriteConnectionStringBuilder tableEndpoint(final String host, final int port, final boolean enabled) {
tableHost = host;
tablePort = port;
useTable = enabled;
return this;
}

String build() {
Preconditions.check("At least one of the blob, queue or table must be used!", useBlob || useQueue || useTable);

final StringBuilder stringBuilder = new StringBuilder()
.append(String.format(CONNECTION_PROTOCOL_FORMAT, protocol))
.append(String.format(ACCOUNT_DETAILS_FORMAT, accountName, accountKey));
if (useBlob) {
stringBuilder.append(String.format(BLOB_ENDPOINT_FORMAT, protocol, blobHost, blobPort, accountName));
}
if (useQueue) {
stringBuilder.append(String.format(QUEUE_ENDPOINT_FORMAT, protocol, queueHost, queuePort, accountName));
}
if (useTable) {
stringBuilder.append(String.format(TABLE_ENDPOINT_FORMAT, protocol, tableHost, tablePort, accountName));
}
return stringBuilder.toString();
}
}
Loading
Loading