22
33import com .azure .messaging .servicebus .ServiceBusClientBuilder ;
44import com .azure .messaging .servicebus .ServiceBusErrorContext ;
5+ import com .azure .messaging .servicebus .ServiceBusException ;
56import com .azure .messaging .servicebus .ServiceBusMessage ;
67import com .azure .messaging .servicebus .ServiceBusProcessorClient ;
7- import com .azure .messaging .servicebus .ServiceBusReceivedMessage ;
88import com .azure .messaging .servicebus .ServiceBusReceivedMessageContext ;
99import com .azure .messaging .servicebus .ServiceBusSenderClient ;
10- import com .azure .messaging .servicebus .ServiceBusTransactionContext ;
1110import com .github .dockerjava .api .model .Capability ;
1211import org .assertj .core .api .Assertions ;
1312import org .junit .Rule ;
1413import org .junit .Test ;
1514import org .testcontainers .containers .MSSQLServerContainer ;
1615import org .testcontainers .containers .Network ;
17- import org .testcontainers .utility .DockerImageName ;
1816import org .testcontainers .utility .MountableFile ;
1917
20- import java .util .ArrayList ;
2118import java .util .List ;
19+ import java .util .concurrent .CopyOnWriteArrayList ;
2220import java .util .concurrent .TimeUnit ;
2321import java .util .function .Consumer ;
2422
2523import static org .assertj .core .api .Assertions .assertThat ;
24+ import static org .awaitility .Awaitility .await ;
2625
2726public class AzureServiceBusEmulatorContainerTest {
2827
2928 @ Rule
3029 // network {
3130 public Network network = Network .newNetwork ();
32-
3331 // }
3432
3533 @ Rule
@@ -43,23 +41,21 @@ public class AzureServiceBusEmulatorContainerTest {
4341 cmd .getHostConfig ().withCapAdd (Capability .SYS_PTRACE );
4442 })
4543 .withNetwork (network );
46-
4744 // }
4845
4946 @ Rule
5047 // emulatorContainer {
5148 public AzureServiceBusEmulatorContainer emulator = new AzureServiceBusEmulatorContainer (
52- DockerImageName .parse ("mcr.microsoft.com/azure-messaging/servicebus-emulator:1.0.1" ),
53- mssqlServerContainer
49+ "mcr.microsoft.com/azure-messaging/servicebus-emulator:1.0.1"
5450 )
5551 .acceptLicense ()
5652 .withConfig (MountableFile .forClasspathResource ("/service-bus-config.json" ))
57- .withNetwork (network );
58-
53+ .withNetwork (network )
54+ . withMsSqlServerContainer ( mssqlServerContainer );
5955 // }
6056
6157 @ Test
62- public void testWithClient () throws InterruptedException {
58+ public void testWithClient () {
6359 assertThat (emulator .getConnectionString ()).startsWith ("Endpoint=sb://" );
6460
6561 // senderClient {
@@ -70,16 +66,18 @@ public void testWithClient() throws InterruptedException {
7066 .buildClient ();
7167 // }
7268
73- TimeUnit .SECONDS .sleep (5 );
74- ServiceBusTransactionContext transaction = senderClient .createTransaction ();
75- senderClient .sendMessage (new ServiceBusMessage ("Hello, Testcontainers!" ), transaction );
76- senderClient .commitTransaction (transaction );
69+ await ()
70+ .atMost (20 , TimeUnit .SECONDS )
71+ .ignoreException (ServiceBusException .class )
72+ .until (() -> {
73+ senderClient .sendMessage (new ServiceBusMessage ("Hello, Testcontainers!" ));
74+ return true ;
75+ });
7776 senderClient .close ();
7877
79- TimeUnit .SECONDS .sleep (5 );
80- final List <ServiceBusReceivedMessage > received = new ArrayList <>();
78+ final List <String > received = new CopyOnWriteArrayList <>();
8179 Consumer <ServiceBusReceivedMessageContext > messageConsumer = m -> {
82- received .add (m .getMessage ());
80+ received .add (m .getMessage (). getBody (). toString () );
8381 m .complete ();
8482 };
8583 Consumer <ServiceBusErrorContext > errorConsumer = e -> Assertions .fail ("Unexpected error: " + e );
@@ -94,9 +92,11 @@ public void testWithClient() throws InterruptedException {
9492 // }
9593 processorClient .start ();
9694
97- TimeUnit .SECONDS .sleep (10 );
95+ await ()
96+ .atMost (20 , TimeUnit .SECONDS )
97+ .untilAsserted (() -> {
98+ assertThat (received ).hasSize (1 ).containsExactlyInAnyOrder ("Hello, Testcontainers!" );
99+ });
98100 processorClient .close ();
99- assertThat (received ).hasSize (1 );
100- assertThat (received .get (0 ).getBody ().toString ()).isEqualTo ("Hello, Testcontainers!" );
101101 }
102102}
0 commit comments