Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
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
10 changes: 5 additions & 5 deletions docs/modules/azure.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,31 @@ CosmosDBEmulatorContainer | [mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emula
Start Azure CosmosDB Emulator during a test:

<!--codeinclude-->
[Starting a Azure CosmosDB Emulator container](../../modules/azure/src/test/java/org/testcontainers/containers/CosmosDBEmulatorContainerTest.java) inside_block:emulatorContainer
[Starting a Azure CosmosDB Emulator container](../../modules/azure/src/test/java/org/testcontainers/azure/CosmosDBEmulatorContainerTest.java) inside_block:emulatorContainer
<!--/codeinclude-->

Prepare KeyStore to use for SSL.

<!--codeinclude-->
[Building KeyStore from certificate within container](../../modules/azure/src/test/java/org/testcontainers/containers/CosmosDBEmulatorContainerTest.java) inside_block:buildAndSaveNewKeyStore
[Building KeyStore from certificate within container](../../modules/azure/src/test/java/org/testcontainers/azure/CosmosDBEmulatorContainerTest.java) inside_block:buildAndSaveNewKeyStore
<!--/codeinclude-->

Set system trust-store parameters to use already built KeyStore:

<!--codeinclude-->
[Set system trust-store parameters](../../modules/azure/src/test/java/org/testcontainers/containers/CosmosDBEmulatorContainerTest.java) inside_block:setSystemTrustStoreParameters
[Set system trust-store parameters](../../modules/azure/src/test/java/org/testcontainers/azure/CosmosDBEmulatorContainerTest.java) inside_block:setSystemTrustStoreParameters
<!--/codeinclude-->

Build Azure CosmosDB client:

<!--codeinclude-->
[Build Azure CosmosDB client](../../modules/azure/src/test/java/org/testcontainers/containers/CosmosDBEmulatorContainerTest.java) inside_block:buildClient
[Build Azure CosmosDB client](../../modules/azure/src/test/java/org/testcontainers/azure/CosmosDBEmulatorContainerTest.java) inside_block:buildClient
<!--/codeinclude-->

Test against the Emulator:

<!--codeinclude-->
[Testing against Azure CosmosDB Emulator container](../../modules/azure/src/test/java/org/testcontainers/containers/CosmosDBEmulatorContainerTest.java) inside_block:testWithClientAgainstEmulatorContainer
[Testing against Azure CosmosDB Emulator container](../../modules/azure/src/test/java/org/testcontainers/azure/CosmosDBEmulatorContainerTest.java) inside_block:testWithClientAgainstEmulatorContainer
<!--/codeinclude-->

## Adding this module to your project dependencies
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.testcontainers.azure;

import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;

import java.security.KeyStore;

/**
* Testcontainers implementation for CosmosDB Emulator.
* <p>
* Supported image: {@code mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator}
* <p>
* Exposed ports: 8081
*/
public class CosmosDBEmulatorContainer extends GenericContainer<CosmosDBEmulatorContainer> {

private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
"mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator"
);

private static final int PORT = 8081;

/**
* @param dockerImageName specified docker image name to run
*/
public CosmosDBEmulatorContainer(final DockerImageName dockerImageName) {
super(dockerImageName);
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
withExposedPorts(PORT);
waitingFor(Wait.forLogMessage(".*Started\\r\\n$", 1));
}

/**
* @return new KeyStore built with PKCS12
*/
public KeyStore buildNewKeyStore() {
return KeyStoreBuilder.buildByDownloadingCertificate(getEmulatorEndpoint(), getEmulatorKey());
}

/**
* Emulator key is a known constant and specified in Azure Cosmos DB Documents.
* This key is also used as password for emulator certificate file.
*
* @return predefined emulator key
* @see <a href="https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#authenticate-requests">Azure Cosmos DB Documents</a>
*/
public String getEmulatorKey() {
return "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
}

/**
* @return secure https emulator endpoint to send requests
*/
public String getEmulatorEndpoint() {
return "https://" + getHost() + ":" + getMappedPort(PORT);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.testcontainers.containers;
package org.testcontainers.azure;

import okhttp3.Cache;
import okhttp3.OkHttpClient;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,57 +1,25 @@
package org.testcontainers.containers;

import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;

import java.security.KeyStore;

/**
* Testcontainers implementation for CosmosDB Emulator.
* <p>
* Supported image: {@code mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator}
* <p>
* Exposed ports: 8081
* Original Testcontainers implementation for CosmosDB Emulator.
*
* @deprecated Please use {@link org.testcontainers.azure.CosmosDBEmulatorContainer}.
*/
public class CosmosDBEmulatorContainer extends GenericContainer<CosmosDBEmulatorContainer> {

private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
"mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator"
);

private static final int PORT = 8081;
@Deprecated
public class CosmosDBEmulatorContainer extends org.testcontainers.azure.CosmosDBEmulatorContainer {

/**
* @param dockerImageName specified docker image name to run
* @deprecated Please use {@link org.testcontainers.azure.CosmosDBEmulatorContainer}.
*/
@Deprecated
public CosmosDBEmulatorContainer(final DockerImageName dockerImageName) {
super(dockerImageName);
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
withExposedPorts(PORT);
waitingFor(Wait.forLogMessage(".*Started\\r\\n$", 1));
}

/**
* @return new KeyStore built with PKCS12
*/
public KeyStore buildNewKeyStore() {
return KeyStoreBuilder.buildByDownloadingCertificate(getEmulatorEndpoint(), getEmulatorKey());
}

/**
* Emulator key is a known constant and specified in Azure Cosmos DB Documents.
* This key is also used as password for emulator certificate file.
*
* @return predefined emulator key
* @see <a href="https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#authenticate-requests">Azure Cosmos DB Documents</a>
*/
public String getEmulatorKey() {
return "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
}

/**
* @return secure https emulator endpoint to send requests
*/
public String getEmulatorEndpoint() {
return "https://" + getHost() + ":" + getMappedPort(PORT);
logger()
.warn(
"The CosmosDBEmulatorContainer moved to the org.testcontainers.azure package. This old class will be removed in a future version."
);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.testcontainers.containers;
package org.testcontainers.azure;

import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosClientBuilder;
Expand Down Expand Up @@ -46,8 +46,8 @@ public static void restoreOriginalSystemProperties() {
@Test
public void testWithCosmosClient() throws Exception {
// buildAndSaveNewKeyStore {
Path keyStoreFile = tempFolder.newFile("azure-cosmos-emulator.keystore").toPath();
KeyStore keyStore = emulator.buildNewKeyStore();
final Path keyStoreFile = tempFolder.newFile("azure-cosmos-emulator.keystore").toPath();
final KeyStore keyStore = emulator.buildNewKeyStore();
keyStore.store(new FileOutputStream(keyStoreFile.toFile()), emulator.getEmulatorKey().toCharArray());
// }
// setSystemTrustStoreParameters {
Expand All @@ -56,17 +56,17 @@ public void testWithCosmosClient() throws Exception {
System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
// }
// buildClient {
CosmosAsyncClient client = new CosmosClientBuilder()
final CosmosAsyncClient client = new CosmosClientBuilder()
.gatewayMode()
.endpointDiscoveryEnabled(false)
.endpoint(emulator.getEmulatorEndpoint())
.key(emulator.getEmulatorKey())
.buildAsyncClient();
// }
// testWithClientAgainstEmulatorContainer {
CosmosDatabaseResponse databaseResponse = client.createDatabaseIfNotExists("Azure").block();
final CosmosDatabaseResponse databaseResponse = client.createDatabaseIfNotExists("Azure").block();
assertThat(databaseResponse.getStatusCode()).isEqualTo(201);
CosmosContainerResponse containerResponse = client
final CosmosContainerResponse containerResponse = client
.getDatabase("Azure")
.createContainerIfNotExists("ServiceContainer", "/name")
.block();
Expand Down
Loading