net.roboconf.messaging.rabbitmq.internal.impl.RoboconfConsumerTest.java Source code

Java tutorial

Introduction

Here is the source code for net.roboconf.messaging.rabbitmq.internal.impl.RoboconfConsumerTest.java

Source

/**
 * Copyright 2016-2017 Linagora, Universit Joseph Fourier, Floralis
 *
 * The present code is developed in the scope of the joint LINAGORA -
 * Universit Joseph Fourier - Floralis research program and is designated
 * as a "Result" pursuant to the terms and conditions of the LINAGORA
 * - Universit Joseph Fourier - Floralis research program. Each copyright
 * holder of Results enumerated here above fully & independently holds complete
 * ownership of the complete Intellectual Property rights applicable to the whole
 * of said Results, and may freely exploit it in any manner which does not infringe
 * the moral rights of the other copyright holders.
 *
 * 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 net.roboconf.messaging.rabbitmq.internal.impl;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;

import net.roboconf.core.internal.tests.TestUtils;
import net.roboconf.core.internal.tests.TestUtils.StringHandler;
import net.roboconf.core.utils.Utils;
import net.roboconf.messaging.api.jmx.RoboconfMessageQueue;

/**
 * @author Vincent Zurczak - Linagora
 */
public class RoboconfConsumerTest {

    @Test
    public void testBasicLogging_forCodeCoverage() throws Exception {

        RoboconfMessageQueue messageQueue = new RoboconfMessageQueue();
        Channel channel = Mockito.mock(Channel.class);
        RoboconfConsumer rc = new RoboconfConsumer("DM", channel, messageQueue);

        rc.handleCancel("tag");
        rc.handleCancelOk("tag");
    }

    @Test
    public void testShutdownSignal() throws Exception {

        RoboconfMessageQueue messageQueue = new RoboconfMessageQueue();
        Channel channel = Mockito.mock(Channel.class);
        RoboconfConsumer rc = new RoboconfConsumer("DM", channel, messageQueue);

        final StringHandler logHandler = new StringHandler();
        Logger logger = TestUtils.getInternalField(rc, "logger", Logger.class);
        logger.setUseParentHandlers(false);
        logger.setLevel(Level.FINE);
        logger.addHandler(logHandler);

        // Depending on the shutdown signal, we do not log the same message.
        ShutdownSignalException sig = Mockito.mock(ShutdownSignalException.class);
        Mockito.when(sig.isInitiatedByApplication()).thenReturn(true);
        rc.handleShutdownSignal("tag", sig);
        String log1 = logHandler.getLogs();

        // Not initiated by the application, but the source is a channel.
        Mockito.reset(sig);
        Mockito.when(sig.isInitiatedByApplication()).thenReturn(false);
        Mockito.when(sig.getReference()).thenReturn(channel);
        logHandler.getStringBuilder().setLength(0);

        rc.handleShutdownSignal("tag", sig);
        String log2 = logHandler.getLogs();

        // Not initiated by the application and the source is not a channel.
        Mockito.reset(sig);
        Mockito.when(sig.isInitiatedByApplication()).thenReturn(false);
        logHandler.getStringBuilder().setLength(0);

        rc.handleShutdownSignal("tag", sig);
        String log3 = logHandler.getLogs();

        // The 3 messages should be different
        Assert.assertFalse(Utils.isEmptyOrWhitespaces(log1));
        Assert.assertFalse(Utils.isEmptyOrWhitespaces(log2));
        Assert.assertFalse(Utils.isEmptyOrWhitespaces(log3));

        Assert.assertFalse(log1.equals(log2));
        Assert.assertFalse(log1.equals(log3));
        Assert.assertFalse(log3.equals(log2));
    }

    @Test
    public void testHandleDeliveryWithDeserializationError() throws Exception {

        RoboconfMessageQueue messageQueue = new RoboconfMessageQueue();
        Channel channel = Mockito.mock(Channel.class);
        RoboconfConsumer rc = new RoboconfConsumer("DM", channel, messageQueue);

        final StringHandler logHandler = new StringHandler();
        Logger logger = TestUtils.getInternalField(rc, "logger", Logger.class);
        logger.setUseParentHandlers(false);
        logger.addHandler(logHandler);

        rc.handleDelivery("tag", Mockito.mock(Envelope.class), null, new byte[1]);
        Assert.assertTrue(logHandler.getLogs().startsWith("DM: a message could not be deserialized."));
    }
}