Package com.consol.citrus.vertx.endpoint

Source Code of com.consol.citrus.vertx.endpoint.VertxSyncEndpointTest

/*
* Copyright 2006-2014 the original author or authors.
*
* 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.consol.citrus.vertx.endpoint;

import com.consol.citrus.message.DefaultMessage;
import com.consol.citrus.message.Message;
import com.consol.citrus.report.MessageListeners;
import com.consol.citrus.testng.AbstractTestNGUnitTest;
import com.consol.citrus.vertx.factory.SingleVertxInstanceFactory;
import com.consol.citrus.vertx.message.CitrusVertxMessageHeaders;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.vertx.java.core.Handler;
import org.vertx.java.core.Vertx;
import org.vertx.java.core.eventbus.EventBus;

import static org.easymock.EasyMock.*;

/**
* @author Christoph Deppisch
* @since 1.4.1
*/
public class VertxSyncEndpointTest extends AbstractTestNGUnitTest {

    private Vertx vertx = EasyMock.createMock(Vertx.class);
    private EventBus eventBus = EasyMock.createMock(EventBus.class);
    private MessageListeners messageListeners = EasyMock.createMock(MessageListeners.class);
    private org.vertx.java.core.eventbus.Message messageMock = EasyMock.createMock(org.vertx.java.core.eventbus.Message.class);

    private SingleVertxInstanceFactory instanceFactory = new SingleVertxInstanceFactory();

    @BeforeClass
    public void setup() {
        instanceFactory.setVertx(vertx);
    }

    @Test
    public void testVertxSyncEndpointProducer() {
        String eventBusAddress = "news-feed";
        VertxSyncEndpointConfiguration endpointConfiguration = new VertxSyncEndpointConfiguration();
        endpointConfiguration.setAddress(eventBusAddress);

        VertxSyncEndpoint vertxEndpoint = new VertxSyncEndpoint(endpointConfiguration);
        vertxEndpoint.setVertxInstanceFactory(instanceFactory);

        Message requestMessage = new DefaultMessage("Hello from Citrus!");

        reset(vertx, eventBus, messageMock);

        expect(vertx.eventBus()).andReturn(eventBus).once();
        expect(eventBus.send(eq(eventBusAddress), eq(requestMessage.getPayload()), anyObject(Handler.class))).andAnswer(new IAnswer<EventBus>() {
            @Override
            public EventBus answer() throws Throwable {
                Handler handler = (Handler) getCurrentArguments()[2];
                handler.handle(messageMock);
                return eventBus;
            }
        }).once();

        expect(messageMock.body()).andReturn("Hello from Vertx!").once();
        expect(messageMock.address()).andReturn(eventBusAddress).once();
        expect(messageMock.replyAddress()).andReturn("replyAddress").once();

        replay(vertx, eventBus, messageMock);

        vertxEndpoint.createProducer().send(requestMessage, context);
        Message reply = vertxEndpoint.createConsumer().receive(context, 5000L);

        Assert.assertEquals(reply.getPayload(), "Hello from Vertx!");
        Assert.assertEquals(reply.getHeader(CitrusVertxMessageHeaders.VERTX_ADDRESS), eventBusAddress);
        Assert.assertEquals(reply.getHeader(CitrusVertxMessageHeaders.VERTX_REPLY_ADDRESS), "replyAddress");

        verify(vertx, eventBus, messageMock);
    }

    @Test
    public void testVertxSyncEndpointConsumer() {
        String eventBusAddress = "news-feed";
        VertxSyncEndpointConfiguration endpointConfiguration = new VertxSyncEndpointConfiguration();
        endpointConfiguration.setAddress(eventBusAddress);

        VertxSyncEndpoint vertxEndpoint = new VertxSyncEndpoint(endpointConfiguration);
        vertxEndpoint.setVertxInstanceFactory(instanceFactory);

        Message replyMessage = new DefaultMessage("Hello from Citrus!");

        reset(vertx, eventBus, messageMock);

        expect(messageMock.body()).andReturn("Hello from Vertx!").once();
        expect(messageMock.address()).andReturn(eventBusAddress).once();
        expect(messageMock.replyAddress()).andReturn("replyAddress").once();

        expect(vertx.eventBus()).andReturn(eventBus).times(3);
        expect(eventBus.registerHandler(eq(eventBusAddress), anyObject(Handler.class))).andAnswer(new IAnswer<EventBus>() {
            @Override
            public EventBus answer() throws Throwable {
                Handler handler = (Handler) getCurrentArguments()[1];
                handler.handle(messageMock);
                return eventBus;
            }
        }).once();

        expect(eventBus.unregisterHandler(eq(eventBusAddress), anyObject(Handler.class))).andReturn(eventBus).once();

        expect(eventBus.send("replyAddress", replyMessage.getPayload())).andReturn(eventBus).once();

        replay(vertx, eventBus, messageMock);

        Message receivedMessage = vertxEndpoint.createConsumer().receive(context, endpointConfiguration.getTimeout());
        Assert.assertEquals(receivedMessage.getPayload(), "Hello from Vertx!");
        Assert.assertEquals(receivedMessage.getHeader(CitrusVertxMessageHeaders.VERTX_ADDRESS), eventBusAddress);
        Assert.assertEquals(receivedMessage.getHeader(CitrusVertxMessageHeaders.VERTX_REPLY_ADDRESS), "replyAddress");

        vertxEndpoint.createProducer().send(replyMessage, context);

        verify(vertx, eventBus, messageMock);
    }

    @Test
    public void testVertxSyncEndpointWithOutboundMessageListeners() {
        String eventBusAddress = "news-feed";
        VertxSyncEndpointConfiguration endpointConfiguration = new VertxSyncEndpointConfiguration();
        endpointConfiguration.setAddress(eventBusAddress);

        VertxSyncEndpoint vertxEndpoint = new VertxSyncEndpoint(endpointConfiguration);
        vertxEndpoint.setVertxInstanceFactory(instanceFactory);
        vertxEndpoint.setMessageListener(messageListeners);

        Message requestMessage = new DefaultMessage("Hello from Citrus!");

        reset(vertx, eventBus, messageListeners);

        expect(vertx.eventBus()).andReturn(eventBus).once();
        expect(eventBus.send(eq(eventBusAddress), eq(requestMessage.getPayload()), anyObject(Handler.class))).andReturn(eventBus).once();
        messageListeners.onOutboundMessage(requestMessage, context);
        expectLastCall().once();

        replay(vertx, eventBus, messageListeners);

        vertxEndpoint.createProducer().send(requestMessage, context);

        verify(vertx, eventBus, messageListeners);
    }
}
TOP

Related Classes of com.consol.citrus.vertx.endpoint.VertxSyncEndpointTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.