/** * Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved. * * Licensed 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 com.springsource.insight.plugin.rabbitmqClient; import java.io.IOException; import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Date; import java.util.Map; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.*; import org.junit.Test; import com.rabbitmq.client.AMQP.Basic.RecoverOk; import com.rabbitmq.client.AMQP.BasicProperties; import com.rabbitmq.client.AMQP.Channel.FlowOk; import com.rabbitmq.client.AMQP.Confirm.SelectOk; import com.rabbitmq.client.AMQP.Exchange.BindOk; import com.rabbitmq.client.AMQP.Exchange.DeclareOk; import com.rabbitmq.client.AMQP.Exchange.DeleteOk; import com.rabbitmq.client.AMQP.Exchange.UnbindOk; import com.rabbitmq.client.AMQP.Queue.PurgeOk; import com.rabbitmq.client.AMQP.Tx.CommitOk; import com.rabbitmq.client.AMQP.Tx.RollbackOk; import com.springsource.insight.collection.OperationCollectionAspectSupport; import com.springsource.insight.intercept.operation.Operation; public class RabbitMQPublishCollectionAspectTest extends AbstractRabbitMQCollectionAspectTestSupport { public RabbitMQPublishCollectionAspectTest() { super(RabbitPluginOperationType.PUBLISH); } @Test public void testPublish() throws IOException { String exchange = "exchange"; String routingKey = "routingKey"; boolean mandatory = false; boolean immediate = false; BasicProperties props = create(); byte[] body = new byte[25]; MockChannel channel = new MockChannel(); channel.basicPublish(exchange, routingKey, mandatory, immediate, props, body); Operation op = assertBasicOperation(props, body, AbstractRabbitMQResourceAnalyzer.RABBIT + "-" + "Published to " + exchange + "#" + routingKey); assertEquals("Mismatched exchange", exchange, op.get("exchange", String.class)); assertEquals("Mismatched routing key", routingKey, op.get("routingKey", String.class)); assertEquals("Mismatched mandatory value", Boolean.valueOf(mandatory), op.get("mandatory", Boolean.class)); assertEquals("Mismatched immediate value", Boolean.valueOf(immediate), op.get("immediate", Boolean.class)); } private BasicProperties create() { BasicProperties.Builder builder = new BasicProperties.Builder(); builder.appId("RabbitMQ") .contentEncoding("UTF-8") .contentType("TEXT") .correlationId("None") .deliveryMode(Integer.valueOf(3)) .expiration("Never") .messageId("Message-1") .priority(Integer.valueOf(4)) .timestamp(new Date()); return builder.build(); } @Override public OperationCollectionAspectSupport getAspect() { return RabbitMQPublishCollectionAspect.aspectOf(); } static final class MockConnection implements Connection { public InetAddress getAddress() { try { return Inet4Address.getByName(AbstractRabbitMQResourceAnalyzerTest.TEST_HOST); } catch (UnknownHostException e) { return null; } } public int getPort() { return AbstractRabbitMQResourceAnalyzerTest.TEST_PORT; } public int getChannelMax() { return 0; } public int getFrameMax() { return 0; } public int getHeartbeat() { return 0; } public Map<String, Object> getClientProperties() { return null; } public Map<String, Object> getServerProperties() { return null; } public Channel createChannel() throws IOException { return null; } public Channel createChannel(int channelNumber) throws IOException { return null; } public void close() throws IOException { } public void close(int closeCode, String closeMessage) throws IOException { } public void close(int timeout) throws IOException { } public void close(int closeCode, String closeMessage, int timeout) throws IOException { } public void abort() { } public void abort(int closeCode, String closeMessage) { } public void abort(int timeout) { } public void abort(int closeCode, String closeMessage, int timeout) { } public void addBlockedListener(BlockedListener listener) { } public boolean removeBlockedListener(BlockedListener listener) { return false; } public void clearBlockedListeners() { } public ExceptionHandler getExceptionHandler() { return null; } public void addShutdownListener(ShutdownListener listener) { } public void removeShutdownListener(ShutdownListener listener) { } public ShutdownSignalException getCloseReason() { return null; } public void notifyListeners() { } public boolean isOpen() { return false; } @Override public String toString() { return "amqp://" + AbstractRabbitMQResourceAnalyzerTest.TEST_HOST + ":" + AbstractRabbitMQResourceAnalyzerTest.TEST_PORT + "/virtualhost"; } } static final class MockChannel implements Channel { public int getChannelNumber() { return 0; } public Connection getConnection() { return new MockConnection(); } public void close() throws IOException { } public void close(int closeCode, String closeMessage) throws IOException { } public boolean flowBlocked() { return false; } public void abort() throws IOException { } public void abort(int closeCode, String closeMessage) throws IOException { } public void addReturnListener(ReturnListener listener) { } public boolean removeReturnListener(ReturnListener listener) { return false; } public void clearReturnListeners() { } public void addFlowListener(FlowListener listener) { } public boolean removeFlowListener(FlowListener listener) { return false; } public void clearFlowListeners() { } public void addConfirmListener(ConfirmListener listener) { } public boolean removeConfirmListener(ConfirmListener listener) { return false; } public void clearConfirmListeners() { } public Consumer getDefaultConsumer() { return null; } public void setDefaultConsumer(Consumer consumer) { } public void basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException { } public void basicQos(int prefetchCount, boolean global) throws IOException { } public void basicQos(int prefetchCount) throws IOException { } public void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException { } public void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body) throws IOException { } public void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) throws IOException { } public DeclareOk exchangeDeclare(String exchange, String type) throws IOException { return null; } public DeclareOk exchangeDeclare(String exchange, String type, boolean durable) throws IOException { return null; } public DeclareOk exchangeDeclare(String exchange, String type, boolean durable, boolean autoDelete, Map<String, Object> arguments) throws IOException { return null; } public DeclareOk exchangeDeclare(String exchange, String type, boolean durable, boolean autoDelete, boolean internal, Map<String, Object> arguments) throws IOException { return null; } public DeclareOk exchangeDeclarePassive(String name) throws IOException { return null; } public DeleteOk exchangeDelete(String exchange, boolean ifUnused) throws IOException { return null; } public DeleteOk exchangeDelete(String exchange) throws IOException { return null; } public BindOk exchangeBind(String destination, String source, String routingKey) throws IOException { return null; } public BindOk exchangeBind(String destination, String source, String routingKey, Map<String, Object> arguments) throws IOException { return null; } public UnbindOk exchangeUnbind(String destination, String source, String routingKey) throws IOException { return null; } public UnbindOk exchangeUnbind(String destination, String source, String routingKey, Map<String, Object> arguments) throws IOException { return null; } public AMQP.Queue.DeclareOk queueDeclare() throws IOException { return null; } public AMQP.Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) throws IOException { return null; } public AMQP.Queue.DeclareOk queueDeclarePassive(String queue) throws IOException { return null; } public AMQP.Queue.DeleteOk queueDelete(String queue) throws IOException { return null; } public AMQP.Queue.DeleteOk queueDelete(String queue, boolean ifUnused, boolean ifEmpty) throws IOException { return null; } public AMQP.Queue.BindOk queueBind(String queue, String exchange, String routingKey) throws IOException { return null; } public AMQP.Queue.BindOk queueBind(String queue, String exchange, String routingKey, Map<String, Object> arguments) throws IOException { return null; } public AMQP.Queue.UnbindOk queueUnbind(String queue, String exchange, String routingKey) throws IOException { return null; } public AMQP.Queue.UnbindOk queueUnbind(String queue, String exchange, String routingKey, Map<String, Object> arguments) throws IOException { return null; } public PurgeOk queuePurge(String queue) throws IOException { return null; } public GetResponse basicGet(String queue, boolean autoAck) throws IOException { return null; } public void basicAck(long deliveryTag, boolean multiple) throws IOException { } public void basicNack(long deliveryTag, boolean multiple, boolean requeue) throws IOException { } public void basicReject(long deliveryTag, boolean requeue) throws IOException { } public String basicConsume(String queue, Consumer callback) throws IOException { return null; } public String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException { return null; } public String basicConsume(String queue, boolean autoAck, Map<String, Object> arguments, Consumer callback) throws IOException { return null; } public String basicConsume(String queue, boolean autoAck, String consumerTag, Consumer callback) throws IOException { return null; } public String basicConsume(String queue, boolean autoAck, String consumerTag, boolean noLocal, boolean exclusive, Map<String, Object> arguments, Consumer callback) throws IOException { return null; } public void basicCancel(String consumerTag) throws IOException { } public RecoverOk basicRecover() throws IOException { return null; } public RecoverOk basicRecover(boolean requeue) throws IOException { return null; } public void basicRecoverAsync(boolean requeue) throws IOException { } public AMQP.Tx.SelectOk txSelect() throws IOException { return null; } public CommitOk txCommit() throws IOException { return null; } public RollbackOk txRollback() throws IOException { return null; } public SelectOk confirmSelect() throws IOException { return null; } public long getNextPublishSeqNo() { return 0; } public boolean waitForConfirms() throws InterruptedException { return false; } public boolean waitForConfirms(long timeout) throws InterruptedException, TimeoutException { return false; } public void waitForConfirmsOrDie() throws IOException, InterruptedException { } public void waitForConfirmsOrDie(long timeout) throws IOException, InterruptedException, TimeoutException { } public void asyncRpc(Method method) throws IOException { } public Command rpc(Method method) throws IOException { return null; } public void addShutdownListener(ShutdownListener listener) { } public void removeShutdownListener(ShutdownListener listener) { } public ShutdownSignalException getCloseReason() { return null; } public void notifyListeners() { } public boolean isOpen() { return false; } } }