Skip to content

Commit d2d64da

Browse files
committed
Create new project: spring-cloud-azure-testcontainers/event-hubs
1 parent 0e1f2b6 commit d2d64da

5 files changed

Lines changed: 175 additions & 5 deletions

File tree

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
<module>spring-cloud-azure-docker-compose/storage-blob</module>
8787
<module>spring-cloud-azure-docker-compose/storage-queue</module>
8888
<module>spring-cloud-azure-testcontainers/cosmos</module>
89+
<module>spring-cloud-azure-testcontainers/event-hubs/client</module>
8990
<module>spring-cloud-azure-testcontainers/service-bus/spring-cloud-stream-binders</module>
9091
<module>spring-cloud-azure-testcontainers/service-bus/spring-messaging</module>
9192
<module>spring-cloud-azure-testcontainers/storage-blob</module>

spring-cloud-azure-docker-compose/event-hubs/client/pom.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,9 @@
3434
</dependencyManagement>
3535

3636
<dependencies>
37-
<dependency>
38-
<groupId>com.azure</groupId>
39-
<artifactId>azure-messaging-eventhubs</artifactId>
40-
</dependency>
4137
<dependency>
4238
<groupId>com.azure.spring</groupId>
43-
<artifactId>spring-cloud-azure-stream-binder-eventhubs</artifactId>
39+
<artifactId>spring-cloud-azure-starter-eventhubs</artifactId>
4440
</dependency>
4541
<dependency>
4642
<groupId>org.springframework.boot</groupId>
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns="http://maven.apache.org/POM/4.0.0"
5+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
6+
<modelVersion>4.0.0</modelVersion>
7+
8+
<parent>
9+
<groupId>org.springframework.boot</groupId>
10+
<artifactId>spring-boot-starter-parent</artifactId>
11+
<version>4.0.3</version>
12+
<relativePath/> <!-- lookup parent from repository -->
13+
</parent>
14+
15+
<groupId>com.azure.spring</groupId>
16+
<artifactId>spring-cloud-azure-testcontainers-for-event-hubs-client-sample</artifactId>
17+
<version>1.0.0</version>
18+
<packaging>jar</packaging>
19+
20+
<properties>
21+
<version.spring.cloud.azure>7.1.0-beta.1</version.spring.cloud.azure> <!--TODO: Change this version-->
22+
</properties>
23+
24+
<dependencyManagement>
25+
<dependencies>
26+
<dependency>
27+
<groupId>com.azure.spring</groupId>
28+
<artifactId>spring-cloud-azure-dependencies</artifactId>
29+
<version>${version.spring.cloud.azure}</version>
30+
<type>pom</type>
31+
<scope>import</scope>
32+
</dependency>
33+
</dependencies>
34+
</dependencyManagement>
35+
36+
<dependencies>
37+
<dependency>
38+
<groupId>com.azure.spring</groupId>
39+
<artifactId>spring-cloud-azure-starter-eventhubs</artifactId>
40+
</dependency>
41+
<dependency>
42+
<groupId>org.springframework.boot</groupId>
43+
<artifactId>spring-boot-starter-test</artifactId>
44+
<scope>test</scope>
45+
</dependency>
46+
<dependency>
47+
<groupId>org.springframework.boot</groupId>
48+
<artifactId>spring-boot-testcontainers</artifactId>
49+
<scope>test</scope>
50+
</dependency>
51+
<dependency>
52+
<groupId>org.testcontainers</groupId>
53+
<artifactId>azure</artifactId>
54+
<version>1.21.3</version>
55+
<scope>test</scope>
56+
</dependency>
57+
<dependency>
58+
<groupId>org.testcontainers</groupId>
59+
<artifactId>junit-jupiter</artifactId>
60+
<version>1.21.3</version>
61+
<scope>test</scope>
62+
</dependency>
63+
<dependency>
64+
<groupId>com.azure.spring</groupId>
65+
<artifactId>spring-cloud-azure-testcontainers</artifactId>
66+
<scope>test</scope>
67+
</dependency>
68+
<dependency>
69+
<groupId>org.awaitility</groupId>
70+
<artifactId>awaitility</artifactId>
71+
<scope>test</scope>
72+
</dependency>
73+
</dependencies>
74+
75+
</project>
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import com.azure.messaging.eventhubs.EventData;
2+
import com.azure.messaging.eventhubs.EventHubProducerClient;
3+
import com.azure.spring.cloud.autoconfigure.implementation.context.AzureGlobalPropertiesAutoConfiguration;
4+
import com.azure.spring.cloud.autoconfigure.implementation.eventhubs.AzureEventHubsAutoConfiguration;
5+
import com.azure.spring.cloud.autoconfigure.implementation.eventhubs.properties.AzureEventHubsConnectionDetails;
6+
import org.junit.jupiter.api.Test;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
9+
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
10+
import org.springframework.context.annotation.Configuration;
11+
import org.springframework.test.context.TestPropertySource;
12+
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
13+
import org.testcontainers.azure.AzuriteContainer;
14+
import org.testcontainers.azure.EventHubsEmulatorContainer;
15+
import org.testcontainers.containers.Network;
16+
import org.testcontainers.junit.jupiter.Container;
17+
import org.testcontainers.junit.jupiter.Testcontainers;
18+
import org.testcontainers.utility.MountableFile;
19+
20+
import java.time.Duration;
21+
import java.util.Collections;
22+
23+
import static org.assertj.core.api.Assertions.assertThat;
24+
import static org.awaitility.Awaitility.waitAtMost;
25+
26+
@SpringJUnitConfig
27+
@TestPropertySource(properties = { "spring.cloud.azure.eventhubs.event-hub-name=eh1",
28+
"spring.cloud.azure.eventhubs.producer.event-hub-name=eh1" })
29+
@Testcontainers
30+
class EventHubsTestContainerTest {
31+
32+
private static final Network NETWORK = Network.newNetwork();
33+
34+
private static final AzuriteContainer AZURITE = new AzuriteContainer(
35+
"mcr.microsoft.com/azure-storage/azurite:latest")
36+
.withNetwork(NETWORK)
37+
.withNetworkAliases("azurite");
38+
39+
@Container
40+
@ServiceConnection
41+
private static final EventHubsEmulatorContainer EVENT_HUBS = new EventHubsEmulatorContainer(
42+
"mcr.microsoft.com/azure-messaging/eventhubs-emulator:latest")
43+
.acceptLicense()
44+
.withCopyFileToContainer(MountableFile.forClasspathResource("Config.json"),
45+
"/Eventhubs_Emulator/ConfigFiles/Config.json")
46+
.withNetwork(NETWORK)
47+
.withAzuriteContainer(AZURITE);
48+
49+
@Autowired
50+
private AzureEventHubsConnectionDetails connectionDetails;
51+
52+
@Autowired
53+
private EventHubProducerClient producerClient;
54+
55+
@Test
56+
void connectionDetailsShouldBeProvidedByFactory() {
57+
assertThat(connectionDetails).isNotNull();
58+
assertThat(connectionDetails.getConnectionString())
59+
.isNotBlank()
60+
.startsWith("Endpoint=sb://");
61+
}
62+
63+
@Test
64+
void producerClientCanSendMessage() {
65+
// Wait for Event Hubs emulator to be fully ready and event hub entity to be available
66+
waitAtMost(Duration.ofSeconds(120)).pollInterval(Duration.ofSeconds(2)).untilAsserted(() -> {
67+
EventData event = new EventData("Hello World!");
68+
this.producerClient.send(Collections.singletonList(event));
69+
});
70+
}
71+
72+
@Configuration(proxyBeanMethods = false)
73+
@ImportAutoConfiguration(classes = {AzureGlobalPropertiesAutoConfiguration.class,
74+
AzureEventHubsAutoConfiguration.class})
75+
static class Config {
76+
77+
}
78+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"UserConfig": {
3+
"NamespaceConfig": [
4+
{
5+
"Type": "EventHub",
6+
"Name": "emulatorns1",
7+
"Entities": [
8+
{
9+
"Name": "eh1",
10+
"PartitionCount": "2",
11+
"ConsumerGroups": []
12+
}
13+
]
14+
}
15+
],
16+
"LoggingConfig": {
17+
"Type": "File"
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)