Skip to content

Commit 684a274

Browse files
committed
Tests pass, needed azure-messaging-servicebus:7.17.8
1 parent 1a08faa commit 684a274

File tree

4 files changed

+171
-11
lines changed

4 files changed

+171
-11
lines changed

modules/azure/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@ dependencies {
55
// TODO use JDK's HTTP client and/or Apache HttpClient5
66
shaded 'com.squareup.okhttp3:okhttp:4.12.0'
77

8+
implementation project(':mssqlserver')
9+
testImplementation 'com.microsoft.sqlserver:mssql-jdbc:12.8.1.jre8'
10+
811
testImplementation 'org.assertj:assertj-core:3.26.3'
912
testImplementation 'com.azure:azure-cosmos:4.63.3'
1013
testImplementation 'com.azure:azure-storage-blob:12.29.0'
1114
testImplementation 'com.azure:azure-storage-queue:12.24.0'
1215
testImplementation 'com.azure:azure-data-tables:12.5.0'
16+
testImplementation 'com.azure:azure-messaging-servicebus:7.17.8'
1317
}

modules/azure/src/main/java/org/testcontainers/containers/ServicebusEmulatorContainer.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
import org.testcontainers.containers.wait.strategy.Wait;
44
import org.testcontainers.utility.DockerImageName;
55

6-
public class ServicebusEmulatorContainer extends GenericContainer<ServicebusEmulatorContainer> {
6+
public class ServicebusEmulatorContainer<SELF extends ServicebusEmulatorContainer<SELF>> extends GenericContainer<SELF> {
77
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
88
"mcr.microsoft.com/azure-messaging/servicebus-emulator"
99
);
1010

11-
private static final int PORT = 1433;
11+
private static final int PORT = 5672;
1212

1313
/**
1414
* @param dockerImageName specified docker image name to run
@@ -17,16 +17,31 @@ public ServicebusEmulatorContainer(final DockerImageName dockerImageName) {
1717
super(dockerImageName);
1818
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
1919
withExposedPorts(PORT);
20-
waitingFor(Wait.forLogMessage(".*Emulator Service is Successfully Up!\\r\\n$", 1));
21-
Network network = Network.newNetwork();
22-
withNetwork(network);
20+
21+
waitingFor(Wait.forLogMessage(".*Emulator Service is Successfully Up!.*", 1));
22+
23+
withNetwork(Network.SHARED);
2324
withNetworkAliases("sb-emulator");
25+
MSSQLServerContainer mssqlServerContainer = new MSSQLServerContainer(DockerImageName.parse("mcr.microsoft.com/mssql/server:2022-CU14-ubuntu-22.04"))
26+
.acceptLicense();
27+
String mssqlNetworkAlias = "sqledge";
2428
dependsOn(
25-
new SqlEdgeContainer(DockerImageName.parse("mcr.microsoft.com/azure-sql-edge:latest"))
26-
.withNetwork(network)
27-
.withNetworkAliases("sqledge")
29+
mssqlServerContainer
30+
.withNetwork(Network.SHARED)
31+
.withNetworkAliases(mssqlNetworkAlias)
2832
);
33+
addEnv("MSSQL_SA_PASSWORD", mssqlServerContainer.getPassword());
34+
addEnv("SQL_SERVER", mssqlNetworkAlias);
35+
acceptLicense();
36+
addEnv("CONFIG_PATH", "/home/marvin.lillehaug/src/testcontainers-java/modules/azure/src/test/resources/servicebus-config.json");
37+
}
38+
39+
/**
40+
* Accepts the license for the Azure Service Bus Emulator container by setting the ACCEPT_EULA=Y
41+
* variable as described at <a href="https://github.com/Azure/azure-service-bus-emulator-installer/blob/main/README.md">https://github.com/Azure/azure-service-bus-emulator-installer/blob/main/README.md#license</a>
42+
*/
43+
public SELF acceptLicense() {
2944
addEnv("ACCEPT_EULA", "Y");
30-
addEnv("CONFIG_PATH", "/home/marv/Downloads/asb/config.json");
45+
return self();
3146
}
3247
}
Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,50 @@
11
package org.testcontainers.containers;
22

3+
import com.azure.core.util.IterableStream;
4+
import com.azure.messaging.servicebus.ServiceBusClientBuilder;
5+
import com.azure.messaging.servicebus.ServiceBusMessage;
6+
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
7+
import com.azure.messaging.servicebus.ServiceBusReceiverClient;
8+
import com.azure.messaging.servicebus.ServiceBusSenderClient;
9+
import com.azure.messaging.servicebus.models.ServiceBusReceiveMode;
310
import org.junit.Rule;
411
import org.junit.Test;
512
import org.testcontainers.utility.DockerImageName;
613

14+
import java.util.Arrays;
15+
import java.util.List;
16+
import java.util.stream.Collectors;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
720
public class ServicebusEmulatorContainerTest {
821
@Rule
922
public ServicebusEmulatorContainer servicebusEmulatorContainer = new ServicebusEmulatorContainer(
1023
DockerImageName.parse("mcr.microsoft.com/azure-messaging/servicebus-emulator")
1124
);
1225

1326
@Test
14-
public void testWIthASBClient() {
15-
String containerId = servicebusEmulatorContainer.getContainerId();
27+
public void testWithASBClient() {
28+
Integer mappedPort = servicebusEmulatorContainer.getMappedPort(5672);
29+
List<String> sentMessages = Arrays.asList("Hello World");
30+
try(ServiceBusSenderClient sender = new ServiceBusClientBuilder()
31+
.connectionString("Endpoint=sb://localhost:" + mappedPort + ";SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;")
32+
.sender()
33+
.queueName("queue.1")
34+
.buildClient()) {
35+
for (String m : sentMessages) {
36+
sender.sendMessage(new ServiceBusMessage(m));
37+
}
38+
}
39+
try(ServiceBusReceiverClient reciever = new ServiceBusClientBuilder()
40+
.connectionString("Endpoint=sb://localhost:" + mappedPort + ";SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;")
41+
.receiver()
42+
.queueName("queue.1")
43+
.receiveMode(ServiceBusReceiveMode.RECEIVE_AND_DELETE)
44+
.buildClient()) {
45+
IterableStream<ServiceBusReceivedMessage> messagesStream = reciever.receiveMessages(sentMessages.size());
46+
List<String> recievedMessages = messagesStream.stream().map(m -> m.getBody().toString()).collect(Collectors.toList());
47+
assertThat(recievedMessages).isEqualTo(sentMessages);
48+
}
1649
}
1750
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
{
2+
"UserConfig": {
3+
"Namespaces": [
4+
{
5+
"Name": "sbemulatorns",
6+
"Queues": [
7+
{
8+
"Name": "queue.1",
9+
"Properties": {
10+
"DeadLetteringOnMessageExpiration": false,
11+
"DefaultMessageTimeToLive": "PT1H",
12+
"DuplicateDetectionHistoryTimeWindow": "PT20S",
13+
"ForwardDeadLetteredMessagesTo": "",
14+
"ForwardTo": "",
15+
"LockDuration": "PT1M",
16+
"MaxDeliveryCount": 10,
17+
"RequiresDuplicateDetection": false,
18+
"RequiresSession": false
19+
}
20+
}
21+
],
22+
23+
"Topics": [
24+
{
25+
"Name": "topic.1",
26+
"Properties": {
27+
"DefaultMessageTimeToLive": "PT1H",
28+
"DuplicateDetectionHistoryTimeWindow": "PT20S",
29+
"RequiresDuplicateDetection": false
30+
},
31+
"Subscriptions": [
32+
{
33+
"Name": "subscription.1",
34+
"Properties": {
35+
"DeadLetteringOnMessageExpiration": false,
36+
"DefaultMessageTimeToLive": "PT1H",
37+
"LockDuration": "PT1M",
38+
"MaxDeliveryCount": 10,
39+
"ForwardDeadLetteredMessagesTo": "",
40+
"ForwardTo": "",
41+
"RequiresSession": false
42+
},
43+
"Rules": [
44+
{
45+
"Name": "app-prop-filter-1",
46+
"Properties": {
47+
"FilterType": "Correlation",
48+
"CorrelationFilter": {
49+
"ContentType": "application/text",
50+
"CorrelationId": "id1",
51+
"Label": "subject1",
52+
"MessageId": "msgid1",
53+
"ReplyTo": "someQueue",
54+
"ReplyToSessionId": "sessionId",
55+
"SessionId": "session1",
56+
"To": "xyz"
57+
}
58+
}
59+
}
60+
]
61+
},
62+
{
63+
"Name": "subscription.2",
64+
"Properties": {
65+
"DeadLetteringOnMessageExpiration": false,
66+
"DefaultMessageTimeToLive": "PT1H",
67+
"LockDuration": "PT1M",
68+
"MaxDeliveryCount": 10,
69+
"ForwardDeadLetteredMessagesTo": "",
70+
"ForwardTo": "",
71+
"RequiresSession": false
72+
},
73+
"Rules": [
74+
{
75+
"Name": "user-prop-filter-1",
76+
"Properties": {
77+
"FilterType": "Correlation",
78+
"CorrelationFilter": {
79+
"Properties": {
80+
"prop3": "value3"
81+
}
82+
}
83+
}
84+
}
85+
]
86+
},
87+
{
88+
"Name": "subscription.3",
89+
"Properties": {
90+
"DeadLetteringOnMessageExpiration": false,
91+
"DefaultMessageTimeToLive": "PT1H",
92+
"LockDuration": "PT1M",
93+
"MaxDeliveryCount": 10,
94+
"ForwardDeadLetteredMessagesTo": "",
95+
"ForwardTo": "",
96+
"RequiresSession": false
97+
}
98+
}
99+
]
100+
}
101+
]
102+
}
103+
],
104+
"Logging": {
105+
"Type": "File"
106+
}
107+
}
108+
}

0 commit comments

Comments
 (0)