/** * 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.broker.policy; import java.util.ArrayList; import java.util.List; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.ConnectionContext; import org.apache.activemq.broker.jmx.ManagedRegionBroker; import org.apache.activemq.broker.region.Queue; import org.apache.activemq.broker.region.policy.PolicyEntry; import org.apache.activemq.broker.region.policy.PolicyMap; import org.apache.activemq.command.ActiveMQQueue; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DestinationWildcardTest { protected final static String DESTNAME="DomainA.DomainB.TestMeA.TestMeB.Prioritised.Queue"; protected final static int QUEUE_LIMIT = 5000000; protected static Logger LOG = LoggerFactory.getLogger(DestinationWildcardTest.class); private BrokerService broker = null; @Before public void setUp() throws Exception { broker = new BrokerService(); broker.setPersistent(false); broker.setDeleteAllMessagesOnStartup(true); } @After public void tearDown() throws Exception { LOG.info("Shutting down"); if (broker != null && broker.isStarted()) { LOG.info("Broker still running, stopping it now."); broker.stop(); } else { LOG.info("Broker not running, nothing to shutdown."); } } /** * Configures broker for two wildcard policies and one specific destination policy, creates a destination * and checks if the right policy is applied to the destination. */ @Test public void testDestinationWildcardThreeEntries() throws Exception { LOG.info("testDestinationWildcard() called."); // configure broker for policyEntries List<PolicyEntry> entries = new ArrayList<PolicyEntry>(); PolicyEntry e1 = new PolicyEntry(); e1.setDestination(new ActiveMQQueue("DomainA.DomainB.TestMeA.TestMeB.Prioritised.Queue")); e1.setMemoryLimit(QUEUE_LIMIT); e1.setPrioritizedMessages(true); entries.add(e1); PolicyEntry e2 = new PolicyEntry(); e2.setDestination(new ActiveMQQueue("DomainA.DomainB.*.*.Prioritised.Queue")); e2.setMemoryLimit(3000000); e2.setPrioritizedMessages(false); entries.add(e2); PolicyEntry e3 = new PolicyEntry(); e3.setDestination(new ActiveMQQueue("DomainA.DomainB.>")); e3.setMemoryLimit(3000000); e3.setPrioritizedMessages(false); entries.add(e3); PolicyMap policyMap = new PolicyMap(); policyMap.setPolicyEntries(entries); broker.setDestinationPolicy(policyMap); broker.start(); broker.waitUntilStarted(); // verify broker isn't null Assert.assertNotNull(broker); // verify effective policy is in place. ManagedRegionBroker rb = (ManagedRegionBroker) broker.getRegionBroker(); org.apache.activemq.broker.region.Queue queue = (Queue) rb.addDestination(new ConnectionContext(), new ActiveMQQueue(DESTNAME), true); Assert.assertTrue("PolicyEntry should have priorityMessages enabled for destination " + DESTNAME, queue.isPrioritizedMessages()); long limit = queue.getMemoryUsage().getLimit(); LOG.info("MemoryLimit of {}: expected: 5242880, actual: {}", DESTNAME, limit); Assert.assertEquals("Memory limit is expected to be " + QUEUE_LIMIT + " for this destination, but does not match.", QUEUE_LIMIT, limit); } /** * Configures broker for two wildcard policies, creates a destination * and checks if the policy is applied to the destination. */ @Test public void testDestinationWildcardTwoEntries() throws Exception { LOG.info("testDestinationWildcard() called."); // configure broker for policyEntries List<PolicyEntry> entries = new ArrayList<PolicyEntry>(); PolicyEntry e1 = new PolicyEntry(); e1.setDestination(new ActiveMQQueue("DomainA.DomainB.*.*.Prioritised.Queue")); e1.setMemoryLimit(QUEUE_LIMIT); e1.setPrioritizedMessages(true); entries.add(e1); PolicyEntry e2 = new PolicyEntry(); e2.setDestination(new ActiveMQQueue("DomainA.DomainB.>")); e2.setMemoryLimit(3000000); e2.setPrioritizedMessages(false); entries.add(e2); PolicyMap policyMap = new PolicyMap(); policyMap.setPolicyEntries(entries); broker.setDestinationPolicy(policyMap); broker.start(); broker.waitUntilStarted(); // verify broker isn't null Assert.assertNotNull(broker); // verify effective policy is in place. ManagedRegionBroker rb = (ManagedRegionBroker) broker.getRegionBroker(); org.apache.activemq.broker.region.Queue queue = (Queue) rb.addDestination(new ConnectionContext(), new ActiveMQQueue(DESTNAME), true); Assert.assertTrue("PolicyEntry should have priorityMessages enabled for destination " + DESTNAME, queue.isPrioritizedMessages()); long limit = queue.getMemoryUsage().getLimit(); LOG.info("MemoryLimit of {}: expected: 5242880, actual: {}", DESTNAME, limit); Assert.assertEquals("Memory limit is expected to be " + QUEUE_LIMIT + " for this destination, but does not match.", QUEUE_LIMIT, limit); } @Test public void testDestinationWildcardOneEntry() throws Exception { LOG.info("testDestinationWildcard2() called."); // verify broker isn't null Assert.assertNotNull(broker); // configure broker for policyEntries List<PolicyEntry> entries = new ArrayList<PolicyEntry>(); PolicyEntry e1 = new PolicyEntry(); e1.setDestination(new ActiveMQQueue("DomainA.DomainB.*.*.Prioritised.Queue")); e1.setMemoryLimit(QUEUE_LIMIT); e1.setPrioritizedMessages(true); entries.add(e1); PolicyMap policyMap = new PolicyMap(); policyMap.setPolicyEntries(entries); broker.setDestinationPolicy(policyMap); broker.start(); broker.waitUntilStarted(); // verify effective policy is in place. ManagedRegionBroker rb = (ManagedRegionBroker) broker.getRegionBroker(); org.apache.activemq.broker.region.Queue queue = (Queue) rb.addDestination(new ConnectionContext(), new ActiveMQQueue(DESTNAME), true); Assert.assertTrue("PolicyEntry should have priorityMessages enabled for destination " + DESTNAME, queue.isPrioritizedMessages()); long limit = queue.getMemoryUsage().getLimit(); LOG.info("MemoryLimit of {}: expected: 5000000, actual: {}", "DomainA", limit); Assert.assertEquals("Memory limit is expected to be " + 5000000 + " for this destination, but does not match.", 5000000, limit); } }