Skip to content
Merged
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
7 changes: 7 additions & 0 deletions modules/azure/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ dependencies {
// TODO use JDK's HTTP client and/or Apache HttpClient5
shaded 'com.squareup.okhttp3:okhttp:5.1.0'

testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'

testImplementation 'org.assertj:assertj-core:3.27.4'
testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
testImplementation platform("com.azure:azure-sdk-bom:1.2.32")
testImplementation 'com.azure:azure-cosmos'
testImplementation 'com.azure:azure-storage-blob'
Expand All @@ -16,3 +19,7 @@ dependencies {
testImplementation 'com.azure:azure-messaging-servicebus'
testImplementation 'com.microsoft.sqlserver:mssql-jdbc:13.2.0.jre8'
}

test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@
import com.azure.storage.queue.QueueClient;
import com.azure.storage.queue.QueueServiceClient;
import com.azure.storage.queue.QueueServiceClientBuilder;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.utility.MountableFile;

import java.util.Properties;

import static org.assertj.core.api.Assertions.assertThat;

public class AzuriteContainerTest {
class AzuriteContainerTest {

private static final String PASSWORD = "changeit";

private static Properties originalSystemProperties;

@BeforeClass
@BeforeAll
public static void captureOriginalSystemProperties() {
originalSystemProperties = (Properties) System.getProperties().clone();
System.setProperty(
Expand All @@ -37,13 +37,13 @@ public static void captureOriginalSystemProperties() {
System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
}

@AfterClass
@AfterAll
public static void restoreOriginalSystemProperties() {
System.setProperties(originalSystemProperties);
}

@Test
public void testWithBlobServiceClient() {
void testWithBlobServiceClient() {
try (
// emulatorContainer {
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
Expand All @@ -56,7 +56,7 @@ public void testWithBlobServiceClient() {
}

@Test
public void testWithQueueServiceClient() {
void testWithQueueServiceClient() {
try (AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")) {
emulator.start();
assertThat(emulator.getConnectionString()).contains("QueueEndpoint=http://");
Expand All @@ -65,7 +65,7 @@ public void testWithQueueServiceClient() {
}

@Test
public void testWithTableServiceClient() {
void testWithTableServiceClient() {
try (AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")) {
emulator.start();
assertThat(emulator.getConnectionString()).contains("TableEndpoint=http://");
Expand All @@ -74,7 +74,7 @@ public void testWithTableServiceClient() {
}

@Test
public void testWithBlobServiceClientWithSslUsingPfx() {
void testWithBlobServiceClientWithSslUsingPfx() {
try (
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withSsl(MountableFile.forClasspathResource("/keystore.pfx"), PASSWORD)
Expand All @@ -86,7 +86,7 @@ public void testWithBlobServiceClientWithSslUsingPfx() {
}

@Test
public void testWithQueueServiceClientWithSslUsingPfx() {
void testWithQueueServiceClientWithSslUsingPfx() {
try (
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withSsl(MountableFile.forClasspathResource("/keystore.pfx"), PASSWORD)
Expand All @@ -98,7 +98,7 @@ public void testWithQueueServiceClientWithSslUsingPfx() {
}

@Test
public void testWithTableServiceClientWithSslUsingPfx() {
void testWithTableServiceClientWithSslUsingPfx() {
try (
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withSsl(MountableFile.forClasspathResource("/keystore.pfx"), PASSWORD)
Expand All @@ -110,7 +110,7 @@ public void testWithTableServiceClientWithSslUsingPfx() {
}

@Test
public void testWithBlobServiceClientWithSslUsingPem() {
void testWithBlobServiceClientWithSslUsingPem() {
try (
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withSsl(
Expand All @@ -125,7 +125,7 @@ public void testWithBlobServiceClientWithSslUsingPem() {
}

@Test
public void testWithQueueServiceClientWithSslUsingPem() {
void testWithQueueServiceClientWithSslUsingPem() {
try (
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withSsl(
Expand All @@ -140,7 +140,7 @@ public void testWithQueueServiceClientWithSslUsingPem() {
}

@Test
public void testWithTableServiceClientWithSslUsingPem() {
void testWithTableServiceClientWithSslUsingPem() {
try (
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withSsl(
Expand All @@ -155,7 +155,7 @@ public void testWithTableServiceClientWithSslUsingPem() {
}

@Test
public void testTwoAccountKeysWithBlobServiceClient() {
void testTwoAccountKeysWithBlobServiceClient() {
try (
// withTwoAccountKeys {
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
Expand Down Expand Up @@ -194,7 +194,7 @@ public void testTwoAccountKeysWithBlobServiceClient() {
}

@Test
public void testMultipleAccountsWithBlobServiceClient() {
void testMultipleAccountsWithBlobServiceClient() {
try (
// withMoreAccounts {
AzuriteContainer emulator = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
import com.azure.messaging.eventhubs.EventHubProducerClient;
import com.azure.messaging.eventhubs.models.EventPosition;
import com.azure.messaging.eventhubs.models.PartitionEvent;
import org.junit.Rule;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.Network;
import org.testcontainers.utility.MountableFile;

Expand All @@ -19,36 +18,29 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.waitAtMost;

public class EventHubsEmulatorContainerTest {

@Rule
// network {
public Network network = Network.newNetwork();

// }

@Rule
// azuriteContainer {
public AzuriteContainer azuriteContainer = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withNetwork(network);

// }

@Rule
// emulatorContainer {
public EventHubsEmulatorContainer emulator = new EventHubsEmulatorContainer(
"mcr.microsoft.com/azure-messaging/eventhubs-emulator:2.0.1"
)
.acceptLicense()
.withNetwork(network)
.withConfig(MountableFile.forClasspathResource("/eventhubs_config.json"))
.withAzuriteContainer(azuriteContainer);

// }
class EventHubsEmulatorContainerTest {

@Test
public void testWithEventHubsClient() {
try (
// network {
Network network = Network.newNetwork();
// }
// azuriteContainer {
AzuriteContainer azuriteContainer = new AzuriteContainer("mcr.microsoft.com/azure-storage/azurite:3.33.0")
.withNetwork(network);
// }
// emulatorContainer {
EventHubsEmulatorContainer emulator = new EventHubsEmulatorContainer(
"mcr.microsoft.com/azure-messaging/eventhubs-emulator:2.0.1"
)
.acceptLicense()
.withNetwork(network)
.withConfig(MountableFile.forClasspathResource("/eventhubs_config.json"))
.withAzuriteContainer(azuriteContainer);
// }
) {
emulator.start();
// createProducerAndConsumer {
EventHubProducerClient producer = new EventHubClientBuilder()
.connectionString(emulator.getConnectionString())
Expand All @@ -60,10 +52,9 @@
.fullyQualifiedNamespace("emulatorNs1")
.eventHubName("eh1")
.consumerGroup("cg1")
.buildConsumerClient()
.buildConsumerClient();
// }
) {
producer.send(Collections.singletonList(new EventData("test")));

Check failure on line 57 in modules/azure/src/test/java/org/testcontainers/azure/EventHubsEmulatorContainerTest.java

View workflow job for this annotation

GitHub Actions / check (:testcontainers-azure:check)

EventHubsEmulatorContainerTest.testWithEventHubsClient()

com.azure.core.amqp.exception.AmqpException: The messaging entity 'sb://emulatorns1.eventhubs.emulator.net/eh1' could not be found. To know more visit https://aka.ms/sbResourceMgrExceptions. TrackingId:57b8afd4a41444499e2395727ad0cc99_G0, SystemTracker:gateway1, Timestamp:2025-09-01T22:45:58, errorContext[NAMESPACE: localhost. ERROR CONTEXT: N/A, PATH: eh1, REFERENCE_ID: eh1, LINK_CREDIT: 0]

waitAtMost(Duration.ofSeconds(30))
.pollDelay(Duration.ofSeconds(5))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@
import com.azure.messaging.servicebus.ServiceBusSenderClient;
import com.github.dockerjava.api.model.Capability;
import org.assertj.core.api.Assertions;
import org.junit.Rule;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.MSSQLServerContainer;
import org.testcontainers.containers.Network;
import org.testcontainers.utility.MountableFile;
Expand All @@ -23,83 +22,78 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

public class ServiceBusEmulatorContainerTest {

@Rule
// network {
public Network network = Network.newNetwork();

// }

@Rule
// sqlContainer {
public MSSQLServerContainer<?> mssqlServerContainer = new MSSQLServerContainer<>(
"mcr.microsoft.com/mssql/server:2022-CU14-ubuntu-22.04"
)
.acceptLicense()
.withPassword("yourStrong(!)Password")
.withCreateContainerCmdModifier(cmd -> {
cmd.getHostConfig().withCapAdd(Capability.SYS_PTRACE);
})
.withNetwork(network);

// }

@Rule
// emulatorContainer {
public ServiceBusEmulatorContainer emulator = new ServiceBusEmulatorContainer(
"mcr.microsoft.com/azure-messaging/servicebus-emulator:1.1.2"
)
.acceptLicense()
.withConfig(MountableFile.forClasspathResource("/service-bus-config.json"))
.withNetwork(network)
.withMsSqlServerContainer(mssqlServerContainer);

// }
class ServiceBusEmulatorContainerTest {

@Test
public void testWithClient() {
assertThat(emulator.getConnectionString()).startsWith("Endpoint=sb://");
void testWithClient() {
try (
// network {
Network network = Network.newNetwork();
// }
// sqlContainer {
MSSQLServerContainer<?> mssqlServerContainer = new MSSQLServerContainer<>(
"mcr.microsoft.com/mssql/server:2022-CU14-ubuntu-22.04"
)
.acceptLicense()
.withPassword("yourStrong(!)Password")
.withCreateContainerCmdModifier(cmd -> {
cmd.getHostConfig().withCapAdd(Capability.SYS_PTRACE);
})
.withNetwork(network);
// }
// emulatorContainer {
ServiceBusEmulatorContainer emulator = new ServiceBusEmulatorContainer(
"mcr.microsoft.com/azure-messaging/servicebus-emulator:1.1.2"
)
.acceptLicense()
.withConfig(MountableFile.forClasspathResource("/service-bus-config.json"))
.withNetwork(network)
.withMsSqlServerContainer(mssqlServerContainer);
// }
) {
emulator.start();
assertThat(emulator.getConnectionString()).startsWith("Endpoint=sb://");

// senderClient {
ServiceBusSenderClient senderClient = new ServiceBusClientBuilder()
.connectionString(emulator.getConnectionString())
.sender()
.queueName("queue.1")
.buildClient();
// }
// senderClient {
ServiceBusSenderClient senderClient = new ServiceBusClientBuilder()
.connectionString(emulator.getConnectionString())
.sender()
.queueName("queue.1")
.buildClient();
// }

await()
.atMost(20, TimeUnit.SECONDS)
.ignoreException(ServiceBusException.class)
.until(() -> {
senderClient.sendMessage(new ServiceBusMessage("Hello, Testcontainers!"));
return true;
});
senderClient.close();
await()
.atMost(20, TimeUnit.SECONDS)
.ignoreException(ServiceBusException.class)
.until(() -> {
senderClient.sendMessage(new ServiceBusMessage("Hello, Testcontainers!"));
return true;
});
senderClient.close();

final List<String> received = new CopyOnWriteArrayList<>();
Consumer<ServiceBusReceivedMessageContext> messageConsumer = m -> {
received.add(m.getMessage().getBody().toString());
m.complete();
};
Consumer<ServiceBusErrorContext> errorConsumer = e -> Assertions.fail("Unexpected error: " + e);
// processorClient {
ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder()
.connectionString(emulator.getConnectionString())
.processor()
.queueName("queue.1")
.processMessage(messageConsumer)
.processError(errorConsumer)
.buildProcessorClient();
// }
processorClient.start();
final List<String> received = new CopyOnWriteArrayList<>();
Consumer<ServiceBusReceivedMessageContext> messageConsumer = m -> {
received.add(m.getMessage().getBody().toString());
m.complete();
};
Consumer<ServiceBusErrorContext> errorConsumer = e -> Assertions.fail("Unexpected error: " + e);
// processorClient {
ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder()
.connectionString(emulator.getConnectionString())
.processor()
.queueName("queue.1")
.processMessage(messageConsumer)
.processError(errorConsumer)
.buildProcessorClient();
// }
processorClient.start();

await()
.atMost(20, TimeUnit.SECONDS)
.untilAsserted(() -> {
assertThat(received).hasSize(1).containsExactlyInAnyOrder("Hello, Testcontainers!");
});
processorClient.close();
await()
.atMost(20, TimeUnit.SECONDS)
.untilAsserted(() -> {
assertThat(received).hasSize(1).containsExactlyInAnyOrder("Hello, Testcontainers!");
});
processorClient.close();
}
}
}
Loading
Loading