Skip to content

Commit a48291e

Browse files
committed
Test connection is closed if no access to vhost after secret update
References rabbitmq/rabbitmq-server#14403
1 parent 756f10d commit a48291e

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

src/test/java/com/rabbitmq/stream/Cli.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,10 @@ public static void setPermissions(String username, String vhost, List<String> pe
239239
vhost, username, permissions.get(0), permissions.get(1), permissions.get(2)));
240240
}
241241

242+
public static void clearPermissions(String username) {
243+
rabbitmqctl(format("clear_permissions --vhost %s %s", "/", username));
244+
}
245+
242246
public static void changePassword(String username, String newPassword) {
243247
rabbitmqctl(format("change_password %s %s", username, newPassword));
244248
}

src/test/java/com/rabbitmq/stream/impl/AuthenticationTest.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
package com.rabbitmq.stream.impl;
1616

1717
import static com.rabbitmq.stream.Cli.*;
18+
import static com.rabbitmq.stream.Cli.clearPermissions;
1819
import static com.rabbitmq.stream.impl.Assertions.assertThat;
1920
import static com.rabbitmq.stream.impl.TestUtils.BrokerVersion.RABBITMQ_3_13_0;
21+
import static com.rabbitmq.stream.impl.TestUtils.BrokerVersion.RABBITMQ_4_1_4;
2022
import static org.assertj.core.api.Assertions.assertThat;
2123
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2224

@@ -196,6 +198,34 @@ void updateSecretBrokerShouldCloseConnectionWithUpdatedUsername() {
196198
}
197199
}
198200

201+
@Test
202+
@BrokerVersionAtLeast(RABBITMQ_4_1_4)
203+
void updateSecretBrokerShouldCloseConnectionIfUnauthorizedVhost() {
204+
String u = "stream";
205+
String p = "stream";
206+
try {
207+
addUser(u, p);
208+
setPermissions(u, "/", "^stream.*$");
209+
TestUtils.Sync closedSync = TestUtils.sync();
210+
Client client =
211+
cf.get(
212+
new Client.ClientParameters()
213+
.username(u)
214+
.password(p)
215+
.shutdownListener(shutdownContext -> closedSync.down()));
216+
clearPermissions(u);
217+
assertThatThrownBy(() -> client.authenticate(credentialsProvider(u, p)))
218+
.isInstanceOf(StreamException.class)
219+
.hasMessageContaining(
220+
String.valueOf(Constants.RESPONSE_CODE_VIRTUAL_HOST_ACCESS_FAILURE));
221+
assertThat(closedSync).completes();
222+
assertThat(client.isOpen()).isFalse();
223+
client.close();
224+
} finally {
225+
deleteUser(u);
226+
}
227+
}
228+
199229
@Test
200230
@BrokerVersionAtLeast(TestUtils.BrokerVersion.RABBITMQ_4_0_0)
201231
void anonymousAuthenticationShouldWork() {
@@ -209,6 +239,6 @@ private static CredentialsProvider credentialsProvider(String username, String p
209239
}
210240

211241
private boolean connectionClosedOnUpdateSecretFailure() {
212-
return TestUtils.atLeastVersion("4.1.4", brokerVersion);
242+
return TestUtils.atLeastVersion(RABBITMQ_4_1_4.version(), brokerVersion);
213243
}
214244
}

src/test/java/com/rabbitmq/stream/impl/TestUtils.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1065,14 +1065,19 @@ public enum BrokerVersion {
10651065
RABBITMQ_3_11_14("3.11.14"),
10661066
RABBITMQ_3_13_0("3.13.0"),
10671067
RABBITMQ_4_0_0("4.0.0"),
1068-
RABBITMQ_4_1_2("4.1.2");
1068+
RABBITMQ_4_1_2("4.1.2"),
1069+
RABBITMQ_4_1_4("4.1.4");
10691070

10701071
final String value;
10711072

10721073
BrokerVersion(String value) {
10731074
this.value = value;
10741075
}
10751076

1077+
String version() {
1078+
return this.value;
1079+
}
1080+
10761081
@Override
10771082
public String toString() {
10781083
return this.value;

0 commit comments

Comments
 (0)