// Copyright (c) 2007-Present Pivotal Software, Inc. All rights reserved. // // This software, the RabbitMQ Java client library, is triple-licensed under the // Mozilla Public License 1.1 ("MPL"), the GNU General Public License version 2 // ("GPL") and the Apache License version 2 ("ASL"). For the MPL, please see // LICENSE-MPL-RabbitMQ. For the GPL, please see LICENSE-GPL2. For the ASL, // please see LICENSE-APACHE2. // // This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, // either express or implied. See the LICENSE file for specific language governing // rights and limitations of this software. // // If you have any questions regarding licensing, please contact us at // info@rabbitmq.com. package com.rabbitmq.client.test.server; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; import java.io.IOException; import java.util.concurrent.TimeoutException; import org.junit.Test; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.test.functional.ClusteredTestBase; /** * This tests whether 'absent' queues - durable queues whose home node * is down - are handled properly. */ public class AbsentQueue extends ClusteredTestBase { private static final String Q = "absent-queue"; @Override public void setUp() throws IOException, TimeoutException { super.setUp(); if (clusteredConnection != null) stopSecondary(); } @Override public void tearDown() throws IOException, TimeoutException { if (clusteredConnection != null) startSecondary(); super.tearDown(); } @Override protected void createResources() throws IOException { alternateChannel.queueDeclare(Q, true, false, false, null); } @Override protected void releaseResources() throws IOException { alternateChannel.queueDelete(Q); } @Test public void notFound() throws IOException { assertNotFound(new Task() { public void run() throws IOException { channel.queueDeclare(Q, true, false, false, null); } }); assertNotFound(new Task() { public void run() throws IOException { channel.queueDeclarePassive(Q); } }); assertNotFound(new Task() { public void run() throws IOException { channel.queuePurge(Q); } }); assertNotFound(new Task() { public void run() throws IOException { channel.basicGet(Q, true); } }); assertNotFound(new Task() { public void run() throws IOException { channel.queueBind(Q, "amq.fanout", "", null); } }); } protected void assertNotFound(Task t) throws IOException { if (clusteredChannel == null) return; try { t.run(); if (!HATests.HA_TESTS_RUNNING) fail("expected not_found"); } catch (IOException ioe) { assertFalse(HATests.HA_TESTS_RUNNING); checkShutdownSignal(AMQP.NOT_FOUND, ioe); channel = connection.createChannel(); } } private interface Task { public void run() throws IOException; } }