Skip to content

Commit 4a522ba

Browse files
committed
Add Azurite container to Azure module
- Add test cases and examples for non-default credential use Signed-off-by: Esta Nagy <[email protected]>
1 parent 0f11e4b commit 4a522ba

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

docs/modules/azure.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ Start Azurite Emulator during a test:
2525
!!! note
2626
SSL configuration is possible using the `withSsl(MountableFile, String)` and `withSsl(MountableFile, MountableFile)` methods.
2727

28+
If the tested application needs to use more than one set of credentials, the container can be configured to use custom credentials.
29+
Please see some examples below.
30+
31+
<!--codeinclude-->
32+
[Starting a Azurite Blob container with one account and two keys](../../modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java) inside_block:emulatorContainerWithTwoAccountKeys
33+
<!--/codeinclude-->
34+
35+
<!--codeinclude-->
36+
[Starting a Azurite Blob container with more accounts and keys](../../modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java) inside_block:useEmulatorContainerWithMoreAccounts
37+
<!--/codeinclude-->
38+
2839
#### Using with Blob
2940

3041
Build Azure Blob client:
@@ -33,6 +44,12 @@ Build Azure Blob client:
3344
[Build Azure Blob Service client](../../modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java) inside_block:createBlobClient
3445
<!--/codeinclude-->
3546

47+
In case the application needs to use custom credentials, we can obtain them with a different method:
48+
49+
<!--codeinclude-->
50+
[Obtain connection string with non-default credentials](../../modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java) inside_block:useNonDefaultCredentials
51+
<!--/codeinclude-->
52+
3653
#### Using with Queue
3754

3855
Build Azure Queue client:
@@ -41,6 +58,9 @@ Build Azure Queue client:
4158
[Build Azure Queue Service client](../../modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java) inside_block:createQueueClient
4259
<!--/codeinclude-->
4360

61+
!!! note
62+
We can use custom credentials the same way as defined in the Blob section.
63+
4464
#### Using with Table
4565

4666
Build Azure Table client:
@@ -49,6 +69,9 @@ Build Azure Table client:
4969
[Build Azure Table Service client](../../modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java) inside_block:createTableClient
5070
<!--/codeinclude-->
5171

72+
!!! note
73+
We can use custom credentials the same way as defined in the Blob section.
74+
5275
### CosmosDB
5376

5477
Start Azure CosmosDB Emulator during a test:

modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.testcontainers.azure;
22

3+
import com.azure.core.util.BinaryData;
34
import com.azure.data.tables.TableClient;
45
import com.azure.data.tables.TableServiceClient;
56
import com.azure.data.tables.TableServiceClientBuilder;
7+
import com.azure.storage.blob.BlobClient;
68
import com.azure.storage.blob.BlobContainerClient;
79
import com.azure.storage.blob.BlobServiceClient;
810
import com.azure.storage.blob.BlobServiceClientBuilder;
@@ -166,6 +168,87 @@ public void testWithTableServiceClientWithSslUsingPem() {
166168
}
167169
}
168170

171+
@Test
172+
public void testTwoAccountKeysWithBlobServiceClient() {
173+
try (
174+
// emulatorContainerWithTwoAccountKeys {
175+
AzuriteContainer emulator = new AzuriteContainer(
176+
DockerImageName.parse("mcr.microsoft.com/azure-storage/azurite:3.33.0")
177+
)
178+
.withEnv("AZURITE_ACCOUNTS", "account1:key1:key2")
179+
// }
180+
) {
181+
emulator.start();
182+
183+
String connectionString1 = emulator.getConnectionString("account1", "key1");
184+
// the second accuont will have access to the same container using a different key
185+
String connectionString2 = emulator.getConnectionString("account1", "key2");
186+
187+
BlobServiceClient blobServiceClient1 = new BlobServiceClientBuilder()
188+
.connectionString(connectionString1)
189+
.buildClient();
190+
191+
BlobContainerClient containerClient1 = blobServiceClient1.createBlobContainer("test-container");
192+
BlobClient blobClient1 = containerClient1.getBlobClient("test-blob.txt");
193+
blobClient1.upload(BinaryData.fromString("content"));
194+
boolean existsWithAccount1 = blobClient1.exists();
195+
String contentWithAccount1 = blobClient1.downloadContent().toString();
196+
197+
BlobServiceClient blobServiceClient2 = new BlobServiceClientBuilder()
198+
.connectionString(connectionString2)
199+
.buildClient();
200+
BlobContainerClient containerClient2 = blobServiceClient2.getBlobContainerClient("test-container");
201+
BlobClient blobClient2 = containerClient2.getBlobClient("test-blob.txt");
202+
boolean existsWithAccount2 = blobClient2.exists();
203+
String contentWithAccount2 = blobClient2.downloadContent().toString();
204+
205+
assertThat(existsWithAccount1).isTrue();
206+
assertThat(contentWithAccount1).isEqualTo("content");
207+
assertThat(existsWithAccount2).isTrue();
208+
assertThat(contentWithAccount2).isEqualTo("content");
209+
}
210+
}
211+
212+
@Test
213+
public void testMultipleAccountsWithBlobServiceClient() {
214+
try (
215+
// emulatorContainerWithMoreAccounts {
216+
AzuriteContainer emulator = new AzuriteContainer(
217+
DockerImageName.parse("mcr.microsoft.com/azure-storage/azurite:3.33.0")
218+
)
219+
.withEnv("AZURITE_ACCOUNTS", "account1:key1;account2:key2")
220+
// }
221+
) {
222+
emulator.start();
223+
224+
// useNonDefaultCredentials {
225+
String connectionString1 = emulator.getConnectionString("account1", "key1");
226+
// the second accuont will not have access to the same container
227+
String connectionString2 = emulator.getConnectionString("account2", "key2");
228+
// }
229+
BlobServiceClient blobServiceClient1 = new BlobServiceClientBuilder()
230+
.connectionString(connectionString1)
231+
.buildClient();
232+
233+
BlobContainerClient containerClient1 = blobServiceClient1.createBlobContainer("test-container");
234+
BlobClient blobClient1 = containerClient1.getBlobClient("test-blob.txt");
235+
blobClient1.upload(BinaryData.fromString("content"));
236+
boolean existsWithAccount1 = blobClient1.exists();
237+
String contentWithAccount1 = blobClient1.downloadContent().toString();
238+
239+
BlobServiceClient blobServiceClient2 = new BlobServiceClientBuilder()
240+
.connectionString(connectionString2)
241+
.buildClient();
242+
BlobContainerClient containerClient2 = blobServiceClient2.createBlobContainer("test-container");
243+
BlobClient blobClient2 = containerClient2.getBlobClient("test-blob.txt");
244+
boolean existsWithAccount2 = blobClient2.exists();
245+
246+
assertThat(existsWithAccount1).isTrue();
247+
assertThat(contentWithAccount1).isEqualTo("content");
248+
assertThat(existsWithAccount2).isFalse();
249+
}
250+
}
251+
169252
private void testBlob(AzuriteContainer container) {
170253
// createBlobClient {
171254
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()

0 commit comments

Comments
 (0)