This is an automated email from the ASF dual-hosted git repository.
robbie pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new ef5fb0b1f1 ARTEMIS-4451: fix non-SASL AMQP connections when resource
audit logging enabled
ef5fb0b1f1 is described below
commit ef5fb0b1f19fe6b0ba2a9dfb93dd2138433ed03f
Author: Robbie Gemmell <[email protected]>
AuthorDate: Wed Oct 4 16:12:02 2023 +0100
ARTEMIS-4451: fix non-SASL AMQP connections when resource audit logging
enabled
---
.../amqp/broker/AMQPConnectionCallback.java | 2 +-
.../amqp/broker/AMQPConnectionCallbackTest.java | 45 ++++++++++++++++++++++
.../smoke/logging/AuditLoggerResourceTest.java | 15 +++++---
3 files changed, 56 insertions(+), 6 deletions(-)
diff --git
a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallback.java
b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallback.java
index c44a9d5546..859962ffc9 100644
---
a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallback.java
+++
b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallback.java
@@ -130,7 +130,7 @@ public class AMQPConnectionCallback implements
FailureListener, CloseListener {
public boolean isSupportsAnonymous() {
boolean supportsAnonymous = false;
try {
- server.getSecurityStore().authenticate(null, null, null);
+ server.getSecurityStore().authenticate(null, null,
protonConnectionDelegate);
supportsAnonymous = true;
} catch (Exception e) {
// authentication failed so no anonymous support
diff --git
a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallbackTest.java
b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallbackTest.java
index 2d03dd5d75..8f0f34756b 100644
---
a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallbackTest.java
+++
b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPConnectionCallbackTest.java
@@ -16,16 +16,25 @@
*/
package org.apache.activemq.artemis.protocol.amqp.broker;
+import org.apache.activemq.artemis.api.core.ActiveMQSecurityException;
import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnection;
+import org.apache.activemq.artemis.core.security.SecurityStore;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.protocol.amqp.sasl.AnonymousServerSASL;
import org.apache.activemq.artemis.protocol.amqp.sasl.GSSAPIServerSASL;
import org.apache.activemq.artemis.protocol.amqp.sasl.PlainSASL;
+import org.apache.activemq.artemis.utils.ExecutorFactory;
+import org.apache.activemq.artemis.utils.actors.ArtemisExecutor;
import org.junit.Test;
+import org.mockito.Mockito;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
public class AMQPConnectionCallbackTest {
@@ -48,4 +57,40 @@ public class AMQPConnectionCallbackTest {
AMQPConnectionCallback connectionCallback = new
AMQPConnectionCallback(protonProtocolManager, null, null, new
ActiveMQServerImpl());
assertNotNull("can get anon with empty list",
connectionCallback.getServerSASL(AnonymousServerSASL.NAME));
}
+
+ @Test
+ public void testAnonymousSupportCheck() throws Exception {
+ ArtemisExecutor executor = Mockito.mock(ArtemisExecutor.class);
+ ExecutorFactory executorFactory = Mockito.mock(ExecutorFactory.class);
+ Mockito.when(executorFactory.getExecutor()).thenReturn(executor);
+
+ SecurityStore securityStore = Mockito.mock(SecurityStore.class);
+
+ ActiveMQServer server = Mockito.mock(ActiveMQServer.class);
+ Mockito.when(server.getExecutorFactory()).thenReturn(executorFactory);
+ Mockito.when(server.getSecurityStore()).thenReturn(securityStore);
+
+ NettyConnection transportConnection =
Mockito.mock(NettyConnection.class);
+ ProtonProtocolManager protocolManager =
Mockito.mock(ProtonProtocolManager.class);
+ Mockito.when(protocolManager.getServer()).thenReturn(server);
+
+ AMQPConnectionCallback callback = new
AMQPConnectionCallback(protocolManager, transportConnection, executor, server);
+ ActiveMQProtonRemotingConnection connectionDelegate =
Mockito.mock(ActiveMQProtonRemotingConnection.class);
+ callback.setProtonConnectionDelegate(connectionDelegate);
+
+ // Make it succeed
+ Mockito.when(securityStore.authenticate(Mockito.any(), Mockito.any(),
Mockito.any())).thenReturn("validatedAnonUser");
+
+ // Verify result and expected args are passed
+ assertTrue(callback.isSupportsAnonymous());
+ Mockito.verify(securityStore).authenticate(Mockito.any(), Mockito.any(),
Mockito.same(connectionDelegate));
+
+ // Make it fail
+ Mockito.reset(securityStore);
+ Mockito.when(securityStore.authenticate(Mockito.any(), Mockito.any(),
Mockito.any())).thenThrow(new ActiveMQSecurityException("auth-failed"));
+
+ // Verify result and expected args are passed
+ assertFalse(callback.isSupportsAnonymous());
+ Mockito.verify(securityStore).authenticate(Mockito.any(), Mockito.any(),
Mockito.same(connectionDelegate));
+ }
}
\ No newline at end of file
diff --git
a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerResourceTest.java
b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerResourceTest.java
index 653fbcc837..bbc0402932 100644
---
a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerResourceTest.java
+++
b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerResourceTest.java
@@ -98,21 +98,26 @@ public class AuditLoggerResourceTest extends
AuditLoggerTestBase {
@Test
public void testCoreConnectionAuditLog() throws Exception {
- testConnectionAuditLog("CORE");
+ testConnectionAuditLog("CORE", "tcp://localhost:61616");
}
@Test
public void testAMQPConnectionAuditLog() throws Exception {
- testConnectionAuditLog("AMQP");
+ testConnectionAuditLog("AMQP", "amqp://localhost:61616");
+ }
+
+ @Test
+ public void testAMQPNoSaslConnectionAuditLog() throws Exception {
+ testConnectionAuditLog("AMQP",
"amqp://localhost:61616?amqp.saslLayer=false");
}
@Test
public void testOpenWireConnectionAuditLog() throws Exception {
- testConnectionAuditLog("OPENWIRE");
+ testConnectionAuditLog("OPENWIRE", "tcp://localhost:61616");
}
- private void testConnectionAuditLog(String protocol) throws Exception {
- ConnectionFactory factory = CFUtil.createConnectionFactory(protocol,
"tcp://localhost:61616");
+ private void testConnectionAuditLog(String protocol, String url) throws
Exception {
+ ConnectionFactory factory = CFUtil.createConnectionFactory(protocol,
url);
Connection connection = factory.createConnection();
Session s = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
checkAuditLogRecord(true, "AMQ601767: " + protocol + " connection");