| /** |
| * 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; |
| |
| import javax.jms.Connection; |
| import javax.jms.JMSException; |
| import javax.jms.MessageProducer; |
| import javax.jms.Session; |
| import javax.jms.Topic; |
| |
| import org.apache.activemq.broker.BrokerService; |
| import org.apache.activemq.broker.TransportConnector; |
| import org.apache.activemq.broker.region.Destination; |
| import org.apache.activemq.broker.region.Subscription; |
| import org.apache.activemq.command.ActiveMQTopic; |
| import org.junit.Test; |
| |
| /** |
| * This test shows that the countBeforeFull statistic that is part of a Subscription is correct |
| * for TopicSubscriptions. |
| */ |
| public class TopicSubscriptionCountBeforeFullTest extends TestSupport { |
| |
| protected BrokerService brokerService; |
| private Connection connection; |
| private String brokerUrlString; |
| private Session session; |
| private Topic topic; |
| private Destination amqDestination; |
| private int prefetch = 10; |
| |
| protected void setUp() throws Exception { |
| super.setUp(); |
| brokerService = new BrokerService(); |
| brokerService.setDeleteAllMessagesOnStartup(true); |
| TransportConnector tcp = brokerService |
| .addConnector("tcp://localhost:0"); |
| brokerService.start(); |
| brokerUrlString = tcp.getPublishableConnectString(); |
| connection = createConnection(); |
| connection.start(); |
| session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); |
| topic = session.createTopic("test"); |
| session.createConsumer(topic); |
| amqDestination = TestSupport.getDestination(brokerService,new ActiveMQTopic("test")); |
| } |
| |
| @Override |
| protected ActiveMQConnectionFactory createConnectionFactory() |
| throws Exception { |
| ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrlString); |
| ActiveMQPrefetchPolicy prefecthPolicy = new ActiveMQPrefetchPolicy(); |
| prefecthPolicy.setTopicPrefetch(prefetch); |
| factory.setPrefetchPolicy(prefecthPolicy); |
| return factory; |
| } |
| |
| /** |
| * @see junit.framework.TestCase#tearDown() |
| */ |
| protected void tearDown() throws Exception { |
| if (connection != null) { |
| connection.close(); |
| connection = null; |
| } |
| brokerService.stop(); |
| super.tearDown(); |
| } |
| |
| /** |
| * Tests that countBeforeFull is 0 if prefetch is filled |
| * |
| * @throws javax.jms.JMSException |
| */ |
| @Test |
| public void testCountBeforeFullPrefetchFilled() throws JMSException { |
| sendMessages(10); |
| assertEquals(getSubscription().countBeforeFull(), 0); |
| } |
| |
| /** |
| * Tests that countBeforeFull is a positive number when no messages have been sent |
| * and prefetch is greater than 0 |
| * |
| * @throws javax.jms.JMSException |
| */ |
| @Test |
| public void testCountBeforeFullNotNull() throws JMSException { |
| assertTrue(getSubscription().countBeforeFull() == prefetch); |
| } |
| |
| protected void sendMessages(int count) throws JMSException { |
| MessageProducer producer = session.createProducer(topic); |
| for (int i = 0; i < count; i++) { |
| producer.send(session.createTextMessage("testMessage")); |
| } |
| } |
| |
| protected Subscription getSubscription() { |
| return amqDestination.getConsumers().get(0); |
| } |
| |
| } |