/* * 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.objectweb.jtests.jms.conform.queue; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.QueueBrowser; import javax.jms.TextMessage; import java.util.Enumeration; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.objectweb.jtests.jms.framework.PTPTestCase; import org.objectweb.jtests.jms.framework.TestConfig; /** * Test the <code>javax.jms.QueueBrowser</code> features. */ public class QueueBrowserTest extends PTPTestCase { /** * The <code>QueueBrowser</code> of the receiver's session */ protected QueueBrowser receiverBrowser; /** * The <code>QueueBrowser</code> of the sender's session */ protected QueueBrowser senderBrowser; /** * Test the <code>QueueBrowser</code> of the sender. */ @Test public void testSenderBrowser() { try { TextMessage message_1 = senderSession.createTextMessage(); message_1.setText("testBrowser:message_1"); TextMessage message_2 = senderSession.createTextMessage(); message_2.setText("testBrowser:message_2"); receiver.close(); // send two messages... sender.send(message_1); sender.send(message_2); // ask the browser to browse the sender's session Enumeration enumeration = senderBrowser.getEnumeration(); int count = 0; while (enumeration.hasMoreElements()) { // one more message in the queue count++; // check that the message in the queue is one of the two which where sent Object obj = enumeration.nextElement(); Assert.assertTrue(obj instanceof TextMessage); TextMessage msg = (TextMessage) obj; Assert.assertTrue(msg.getText().startsWith("testBrowser:message_")); } // check that there is effectively 2 messages in the queue Assert.assertEquals(2, count); receiver = receiverSession.createReceiver(receiverQueue); // receive the first message... Message m = receiver.receive(TestConfig.TIMEOUT); // ... and check it is the first which was sent. Assert.assertTrue(m instanceof TextMessage); TextMessage msg = (TextMessage) m; Assert.assertEquals("testBrowser:message_1", msg.getText()); // receive the second message... m = receiver.receive(TestConfig.TIMEOUT); // ... and check it is the second which was sent. Assert.assertTrue(m instanceof TextMessage); msg = (TextMessage) m; Assert.assertEquals("testBrowser:message_2", msg.getText()); // ask the browser to browse the sender's session enumeration = receiverBrowser.getEnumeration(); // check that there is no messages in the queue // (the two messages have been acknowledged and so removed // from the queue) Assert.assertTrue(!enumeration.hasMoreElements()); } catch (JMSException e) { fail(e); } } /** * Test that a <code>QueueBrowser</cdeo> created with a message selector * browses only the messages matching this selector. */ @Test public void testBrowserWithMessageSelector() { try { senderBrowser = senderSession.createBrowser(senderQueue, "pi = 3.14159"); receiver.close(); TextMessage message_1 = senderSession.createTextMessage(); message_1.setText("testBrowserWithMessageSelector:message_1"); TextMessage message_2 = senderSession.createTextMessage(); message_2.setDoubleProperty("pi", 3.14159); message_2.setText("testBrowserWithMessageSelector:message_2"); sender.send(message_1); sender.send(message_2); Enumeration enumeration = senderBrowser.getEnumeration(); int count = 0; while (enumeration.hasMoreElements()) { count++; Object obj = enumeration.nextElement(); Assert.assertTrue(obj instanceof TextMessage); TextMessage msg = (TextMessage) obj; Assert.assertEquals("testBrowserWithMessageSelector:message_2", msg.getText()); } Assert.assertEquals(1, count); } catch (JMSException e) { fail(e); } } @Override @Before public void setUp() throws Exception { try { super.setUp(); receiverBrowser = receiverSession.createBrowser(receiverQueue); senderBrowser = senderSession.createBrowser(senderQueue); } catch (JMSException e) { throw new RuntimeException(e); } } @Override @After public void tearDown() throws Exception { try { receiverBrowser.close(); senderBrowser.close(); super.tearDown(); } catch (JMSException ignored) { } finally { receiverBrowser = null; senderBrowser = null; } } }