/* * * 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.qpid.server.logging.subjects; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.server.AMQChannel; import org.apache.qpid.server.flow.LimitlessCreditManager; import org.apache.qpid.server.protocol.InternalTestProtocolSession; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.MockAMQQueue; import org.apache.qpid.server.subscription.Subscription; import org.apache.qpid.server.subscription.SubscriptionFactory; import org.apache.qpid.server.subscription.SubscriptionFactoryImpl; import org.apache.qpid.server.util.BrokerTestHelper; import org.apache.qpid.server.virtualhost.VirtualHost; /** * Validate SubscriptionLogSubjects are logged as expected */ public class SubscriptionLogSubjectTest extends AbstractTestLogSubject { private AMQQueue _queue; private VirtualHost _testVhost; private int _channelID = 1; private Subscription _subscription; @Override public void setUp() throws Exception { super.setUp(); InternalTestProtocolSession session = BrokerTestHelper.createSession(); _testVhost = session.getVirtualHost(); _queue = new MockAMQQueue("SubscriptionLogSubjectTest"); ((MockAMQQueue) _queue).setVirtualHost(_testVhost); AMQChannel channel = new AMQChannel(session, _channelID, _testVhost.getMessageStore()); session.addChannel(channel); SubscriptionFactory factory = new SubscriptionFactoryImpl(); _subscription = factory.createSubscription(_channelID, session, new AMQShortString("cTag"), false, null, false, new LimitlessCreditManager()); _subscription.setQueue(_queue, false); _subject = new SubscriptionLogSubject(_subscription); } @Override public void tearDown() throws Exception { if (_testVhost != null) { _testVhost.close(); } super.tearDown(); } /** * Validate that the logged Subject message is as expected: * MESSAGE [Blank][sub:0(vh(/test)/qu(SubscriptionLogSubjectTest))] * * @param message the message whos format needs validation */ @Override protected void validateLogStatement(String message) { String subscriptionSlice = getSlice("sub:" + _subscription.getSubscriptionID(), message); assertNotNull("Unable to locate subscription 'sub:" + _subscription.getSubscriptionID() + "'"); // Pull out the qu(..) section from the subscription message // Split it into three parts // MESSAGE [Blank][sub:0(vh(/ // test)/ // qu(SubscriptionLogSubjectTest))] // Take the last bit and drop off the extra )] String[] parts = message.split("/"); assertEquals("Message part count wrong", 3, parts.length); String subscription = parts[2].substring(0, parts[2].indexOf(")") + 1); // Adding the ')' is a bit ugly but SubscriptionLogSubject is the only // Subject that nests () and so the simple parser of checking for the // next ')' falls down. verifyVirtualHost(subscriptionSlice+ ")", _queue.getVirtualHost()); verifyQueue(subscription, _queue); } }