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+ }
0 commit comments