package org.yamcs.artemis; import static org.junit.Assert.*; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.api.core.client.ClientMessage; import org.apache.activemq.artemis.api.core.client.MessageHandler; import org.apache.activemq.artemis.core.client.impl.ClientSessionImpl; import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnection; import org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.yamcs.api.YamcsApiException; import org.yamcs.api.artemis.Protocol; import org.yamcs.api.artemis.YamcsClient; import org.yamcs.api.artemis.YamcsSession; public class ProducerKillerTest { static EmbeddedActiveMQ artemisServer; @BeforeClass public static void setUpBeforeClass() throws Exception { artemisServer = new EmbeddedActiveMQ(); artemisServer.setConfigResourcePath("artemis-tpk.xml"); artemisServer.start(); } @AfterClass public static void tearDownAfterClass() throws Exception { artemisServer.stop(); } @Test public void testProducerKiller() throws Exception{ final YamcsSession ys = YamcsSession.newBuilder().setConnectionParams("localhost", 15445).build(); final YamcsClient dataClient = ys.newClientBuilder().setDataConsumer(null,null).build(); dataClient.dataConsumer.setMessageHandler(new MessageHandler() { @Override public void onMessage(ClientMessage msg) { NettyConnection nc=(NettyConnection)((ClientSessionImpl)ys.session).getConnection().getTransportConnection(); nc.close(); } }); YamcsSession ys1 = YamcsSession.newBuilder().build(); final YamcsClient yclient1 = ys1.newClientBuilder().setDataProducer(true).build(); Protocol.killProducerOnConsumerClosed(yclient1.getDataProducer(), dataClient.dataAddress); Thread t = new Thread(new Runnable() { @Override public void run() { try { int i = 0; while(true) { ClientMessage msg = ys.session.createMessage(false); msg.getBodyBuffer().writeBytes(new byte[1500]); yclient1.sendData(dataClient.dataAddress, msg); i++; } } catch (YamcsApiException e) { e.printStackTrace(); } } }); t.start(); t.join(10*60*1000); assertFalse(t.isAlive()); ys1.close(); ys.close(); } }