Skip to content

Commit e19af8e

Browse files
This closes #3247
2 parents 4e33b53 + c3887ed commit e19af8e

4 files changed

Lines changed: 76 additions & 30 deletions

File tree

  • artemis-commons/src/main/java/org/apache/activemq/artemis/logs
  • artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker
  • artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl
  • tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging

artemis-commons/src/main/java/org/apache/activemq/artemis/logs/AuditLogger.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2419,13 +2419,13 @@ static void getFile(Object source) {
24192419
*
24202420
* */
24212421
//hot path log using a different logger
2422-
static void coreSendMessage(String user, Object context) {
2423-
MESSAGE_LOGGER.sendMessage(getCaller(user), context);
2422+
static void coreSendMessage(String user, String messageToString, Object context) {
2423+
MESSAGE_LOGGER.logCoreSendMessage(getCaller(user), messageToString, context);
24242424
}
24252425

24262426
@LogMessage(level = Logger.Level.INFO)
2427-
@Message(id = 601500, value = "User {0} is sending a core message with Context: {1}", format = Message.Format.MESSAGE_FORMAT)
2428-
void sendMessage(String user, Object context);
2427+
@Message(id = 601500, value = "User {0} is sending a message {1}, with Context: {2}", format = Message.Format.MESSAGE_FORMAT)
2428+
void logCoreSendMessage(String user, String messageToString, Object context);
24292429

24302430
//hot path log using a different logger
24312431
static void coreConsumeMessage(String queue) {

artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,15 +1638,14 @@ public final org.apache.activemq.artemis.api.core.Message setLastValueProperty(S
16381638

16391639
@Override
16401640
public String toString() {
1641-
/* return "AMQPMessage [durable=" + isDurable() +
1641+
return "AMQPMessage [durable=" + isDurable() +
16421642
", messageID=" + getMessageID() +
16431643
", address=" + getAddress() +
16441644
", size=" + getEncodeSize() +
1645-
", applicationProperties=" + applicationProperties +
1645+
", applicationProperties=" + getApplicationPropertiesMap(false) +
16461646
", properties=" + properties +
16471647
", extraProperties = " + getExtraProperties() +
1648-
"]"; */
1649-
return super.toString();
1648+
"]";
16501649
}
16511650

16521651
@Override

artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1744,7 +1744,7 @@ public synchronized RoutingStatus send(Transaction tx,
17441744
boolean noAutoCreateQueue,
17451745
RoutingContext routingContext) throws Exception {
17461746
if (AuditLogger.isMessageEnabled()) {
1747-
AuditLogger.coreSendMessage(getUsername(), routingContext);
1747+
AuditLogger.coreSendMessage(getUsername(), messageParameter.toString(), routingContext);
17481748
}
17491749

17501750
final Message message = LargeServerMessageImpl.checkLargeMessage(messageParameter, storageManager);

tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/logging/AuditLoggerTest.java

Lines changed: 68 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import org.apache.activemq.artemis.api.core.QueueConfiguration;
2222
import org.apache.activemq.artemis.api.core.RoutingType;
2323
import org.apache.activemq.artemis.api.core.SimpleString;
24-
import org.apache.activemq.artemis.api.core.client.ClientConsumer;
25-
import org.apache.activemq.artemis.api.core.client.ClientMessage;
2624
import org.apache.activemq.artemis.api.core.client.ClientProducer;
2725
import org.apache.activemq.artemis.api.core.client.ClientSession;
2826
import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
@@ -33,10 +31,17 @@
3331
import org.apache.activemq.artemis.utils.Base64;
3432
import org.apache.activemq.artemis.utils.RandomUtil;
3533
import org.apache.activemq.artemis.utils.Wait;
34+
import org.apache.qpid.jms.JmsConnectionFactory;
3635
import org.junit.Assert;
3736
import org.junit.Before;
3837
import org.junit.Test;
3938

39+
import javax.jms.Connection;
40+
import javax.jms.ConnectionFactory;
41+
import javax.jms.MessageConsumer;
42+
import javax.jms.MessageProducer;
43+
import javax.jms.Session;
44+
import javax.jms.TextMessage;
4045
import javax.management.MBeanServerConnection;
4146
import javax.management.MBeanServerInvocationHandler;
4247
import javax.management.remote.JMXConnector;
@@ -131,7 +136,7 @@ public void testAuditLog() throws Exception {
131136

132137
checkAuditLogRecord(true, "gets security check failure:", "guest does not have permission='DELETE_NON_DURABLE_QUEUE'");
133138
//hot patch not in log
134-
checkAuditLogRecord(true, "is sending a core message");
139+
checkAuditLogRecord(true, "is sending a message");
135140
}
136141

137142
protected JMXConnector getJmxConnector() throws MalformedURLException {
@@ -159,7 +164,16 @@ protected JMXConnector getJmxConnector() throws MalformedURLException {
159164
}
160165

161166
@Test
162-
public void testAuditHotLog() throws Exception {
167+
public void testAuditHotLogCore() throws Exception {
168+
internalSend("CORE");
169+
}
170+
171+
@Test
172+
public void testAuditHotLogAMQP() throws Exception {
173+
internalSend("AMQP");
174+
}
175+
176+
public void internalSend(String protocol) throws Exception {
163177
JMXConnector jmxConnector = getJmxConnector();
164178
MBeanServerConnection mBeanServerConnection = jmxConnector.getMBeanServerConnection();
165179
String brokerName = "0.0.0.0"; // configured e.g. in broker.xml <broker-name> element
@@ -172,25 +186,41 @@ public void testAuditHotLog() throws Exception {
172186
Assert.assertEquals(0, addressControl.getQueueNames().length);
173187
session.createQueue(new QueueConfiguration(address).setRoutingType(RoutingType.ANYCAST));
174188
Assert.assertEquals(1, addressControl.getQueueNames().length);
175-
String uniqueStr = Base64.encodeBytes(UUID.randomUUID().toString().getBytes());
176-
177-
ClientProducer producer = session.createProducer(address);
178-
producer.send(session.createMessage(true));
179-
producer.send(session.createMessage(true));
180-
// addressControl.sendMessage(null, Message.BYTES_TYPE, uniqueStr, false, null, null);
189+
String uniqueStr = RandomUtil.randomString();
181190

182-
Wait.waitFor(() -> addressControl.getMessageCount() == 2);
183-
Assert.assertEquals(2, addressControl.getMessageCount());
191+
session.close();
184192

185-
checkAuditLogRecord(true, "sending a core message");
186-
187-
ClientConsumer consumer = session.createConsumer(address);
188-
session.start();
189-
ClientMessage clientMessage = consumer.receiveImmediate();
190-
Assert.assertNotNull(clientMessage);
191-
clientMessage = consumer.receiveImmediate();
192-
Assert.assertNotNull(clientMessage);
193-
checkAuditLogRecord(true, "is consuming a message from");
193+
ConnectionFactory factory = createConnectionFactory(protocol, "tcp://localhost:61616");
194+
Connection connection = factory.createConnection();
195+
try {
196+
Session session = connection.createSession();
197+
MessageProducer producer = session.createProducer(session.createQueue(address.toString()));
198+
TextMessage message = session.createTextMessage("msg1");
199+
message.setStringProperty("str", uniqueStr);
200+
producer.send(message);
201+
202+
message = session.createTextMessage("msg2");
203+
message.setStringProperty("str", "Hello2");
204+
producer.send(message);
205+
// addressControl.sendMessage(null, Message.BYTES_TYPE, uniqueStr, false, null, null);
206+
207+
Wait.waitFor(() -> addressControl.getMessageCount() == 2);
208+
Assert.assertEquals(2, addressControl.getMessageCount());
209+
210+
checkAuditLogRecord(true, "sending a message");
211+
checkAuditLogRecord(true, uniqueStr);
212+
checkAuditLogRecord(true, "Hello2");
213+
214+
connection.start();
215+
MessageConsumer consumer = session.createConsumer(session.createQueue(address.toString()));
216+
javax.jms.Message clientMessage = consumer.receive(5000);
217+
Assert.assertNotNull(clientMessage);
218+
clientMessage = consumer.receive(5000);
219+
Assert.assertNotNull(clientMessage);
220+
checkAuditLogRecord(true, "is consuming a message from");
221+
} finally {
222+
connection.close();
223+
}
194224
}
195225

196226
//check the audit log has a line that contains all the values
@@ -223,4 +253,21 @@ private void checkAuditLogRecord(boolean exist, String... values) throws Excepti
223253
}
224254
}
225255
}
256+
257+
public static ConnectionFactory createConnectionFactory(String protocol, String uri) {
258+
if (protocol.toUpperCase().equals("OPENWIRE")) {
259+
return new org.apache.activemq.ActiveMQConnectionFactory(uri);
260+
} else if (protocol.toUpperCase().equals("AMQP")) {
261+
262+
if (uri.startsWith("tcp://")) {
263+
// replacing tcp:// by amqp://
264+
uri = "amqp" + uri.substring(3);
265+
}
266+
return new JmsConnectionFactory(uri);
267+
} else if (protocol.toUpperCase().equals("CORE") || protocol.toUpperCase().equals("ARTEMIS")) {
268+
return new org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory(uri);
269+
} else {
270+
throw new IllegalStateException("Unkown:" + protocol);
271+
}
272+
}
226273
}

0 commit comments

Comments
 (0)