/** * CopyRight by Chinamobile */ package com.chinamobile.bcbsp.test.comm; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.util.concurrent.ConcurrentLinkedQueue; import org.apache.activemq.broker.BrokerService; import org.apache.hadoop.hbase.util.Bytes; import org.junit.Test; import com.chinamobile.bcbsp.comm.BSPMessage; import com.chinamobile.bcbsp.comm.ConsumerTool; import com.chinamobile.bcbsp.comm.MessageQueuesForMem; import com.chinamobile.bcbsp.comm.ProducerTool; import com.chinamobile.bcbsp.comm.Receiver; import com.chinamobile.bcbsp.comm.Sender; public class ProducerToolAndConsumerToolTest { @Test public void testRun() throws Exception { //message manager which hold the outoingQueues and incomingQueue MessageQueuesForMem messageQueues = new MessageQueuesForMem(); //the msgQueue is to be sent by consumerTool ConcurrentLinkedQueue<BSPMessage> msgQueue = new ConcurrentLinkedQueue<BSPMessage>(); BSPMessage msg1 = new BSPMessage(0, "001", Bytes.toBytes("tags1"),Bytes.toBytes("data1")); BSPMessage msg2 = new BSPMessage(0, "001", Bytes.toBytes("tags2"),Bytes.toBytes("data2")); BSPMessage msg3 = new BSPMessage(0, "003", Bytes.toBytes("tags3"),Bytes.toBytes("data3")); msgQueue.add(msg1); msgQueue.add(msg2); msgQueue.add(msg3); assertEquals("Before sending, msgQueue has 3 message.", 3, msgQueue.size()); assertEquals("Before receive, messageQueuesInterface has 0 incoming messages.", 0, messageQueues.getIncomingQueuesSize()); Receiver receiver = mock(Receiver.class); when(receiver.getNoMoreMessagesFlag()).thenReturn(false); Sender sender = mock(Sender.class); String hostNameAndPort = "localhost:61616"; BrokerService broker = new BrokerService(); broker.setPersistent(false); broker.setBrokerName("localhost-0"); broker.addConnector("tcp://localhost:61616"); broker.start(); ThreadGroup group = new ThreadGroup("sender"); ProducerTool producerTool; producerTool = new ProducerTool(group, 0, msgQueue, hostNameAndPort, "BSP", sender); producerTool.setPackSize(500); producerTool.addMessages(msgQueue); producerTool.setIdle(false); producerTool.start(); ConsumerTool consumerTool = new ConsumerTool(receiver, messageQueues, "localhost-0", "BSP"); consumerTool.start(); while(true){ if(messageQueues.getIncomingQueuesSize() == 3){ when(receiver.getNoMoreMessagesFlag()).thenReturn(true); } if(producerTool.isIdle() && receiver.getNoMoreMessagesFlag()){ break; } } while(consumerTool.isAlive()){}; broker.stop(); assertEquals("After send, msgQueue is empty.", 0, msgQueue.size()); assertEquals("After receive, messageQueuesInterface has 3 incoming messages.", 3, messageQueues.getIncomingQueuesSize()); } }