ARTEMIS-2983 Fixing PrintData with AMQP

This commit is contained in:
Clebert Suconic 2020-11-09 18:43:42 -05:00
parent 62099e86d3
commit ead05b7a89
3 changed files with 118 additions and 0 deletions

View File

@ -251,5 +251,13 @@ public class AMQPStandardMessage extends AMQPMessage {
buffer.release();
}
}
@Override
public String toString() {
// toString will only call ensureScanning on regular messages
// as large messages might need to do extra work to parse it
ensureScanning();
return super.toString();
}
}

View File

@ -0,0 +1,98 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.tests.integration.amqp;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import org.apache.activemq.artemis.cli.commands.tools.PrintData;
import org.apache.activemq.artemis.core.config.FileDeploymentManager;
import org.apache.activemq.artemis.core.config.impl.FileConfiguration;
import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.jms.server.config.impl.FileJMSConfiguration;
import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.apache.activemq.artemis.tests.util.CFUtil;
import org.apache.activemq.artemis.tests.util.RandomUtil;
import org.junit.Assert;
import org.junit.Test;
public class AMQPPrintDataTest extends ActiveMQTestBase {
@Test
public void testPrintDataWithAMQP() throws Exception {
String random = RandomUtil.randomString();
ActiveMQServer server = addServer(getActiveMQServer("dataprint/etc/broker.xml"));
try {
server.getConfiguration().setPersistenceEnabled(true);
server.start();
ConnectionFactory factory = CFUtil.createConnectionFactory("AMQP", "tcp://localhost:61616");
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(session.createQueue("q1"));
TextMessage message = session.createTextMessage("hello");
message.setStringProperty("hello", "world:" + random);
producer.send(message);
connection.close();
server.stop();
System.setProperty("artemis.instance",
this.getClass().getClassLoader().getResource("dataprint").getFile());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(byteArrayOutputStream, true, StandardCharsets.UTF_8.name());
PrintData.printData(server.getConfiguration().getBindingsLocation().getAbsoluteFile(), server.getConfiguration().getJournalLocation().getAbsoluteFile(), server.getConfiguration().getPagingLocation().getAbsoluteFile(),
printStream, false);
Assert.assertTrue(byteArrayOutputStream.toString().contains(random));
} finally {
try {
server.stop();
} catch (Exception e) {
}
}
}
protected ActiveMQServer getActiveMQServer(String brokerConfig) throws Exception {
FileConfiguration fc = new FileConfiguration();
FileJMSConfiguration fileConfiguration = new FileJMSConfiguration();
FileDeploymentManager deploymentManager = new FileDeploymentManager(brokerConfig);
deploymentManager.addDeployable(fc);
deploymentManager.addDeployable(fileConfiguration);
deploymentManager.readConfiguration();
ActiveMQJAASSecurityManager sm = new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(), new SecurityConfiguration());
recreateDirectory(fc.getBindingsDirectory());
recreateDirectory(fc.getJournalDirectory());
recreateDirectory(fc.getPagingDirectory());
recreateDirectory(fc.getLargeMessagesDirectory());
return addServer(new ActiveMQServerImpl(fc, sm));
}
}

View File

@ -33,6 +33,13 @@ under the License.
<security-enabled>false</security-enabled>
<!-- Acceptors -->
<acceptors>
<!-- Acceptor for every supported protocol -->
<acceptor name="artemis">tcp://localhost:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true</acceptor>
</acceptors>
<!-- this could be ASYNCIO or NIO
-->
<journal-type>NIO</journal-type>
@ -66,6 +73,11 @@ under the License.
<queue name="queue.C" />
</multicast>
</address>
<address name="q1">
<anycast>
<queue name="q1"/>
</anycast>
</address>
</addresses>
<address-settings>