Package com.consol.citrus.actions

Source Code of com.consol.citrus.actions.SendMessageActionTest

/*
* Copyright 2006-2010 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.actions;

import com.consol.citrus.TestActor;
import com.consol.citrus.TestCase;
import com.consol.citrus.context.TestContext;
import com.consol.citrus.endpoint.Endpoint;
import com.consol.citrus.endpoint.EndpointConfiguration;
import com.consol.citrus.exceptions.CitrusRuntimeException;
import com.consol.citrus.message.*;
import com.consol.citrus.messaging.Producer;
import com.consol.citrus.testng.AbstractTestNGUnitTest;
import com.consol.citrus.validation.builder.PayloadTemplateMessageBuilder;
import com.consol.citrus.validation.interceptor.XpathMessageConstructionInterceptor;
import com.consol.citrus.validation.script.GroovyScriptMessageBuilder;
import com.consol.citrus.validation.xml.DomXmlMessageValidator;
import com.consol.citrus.validation.xml.XmlMessageValidationContext;
import com.consol.citrus.variable.MessageHeaderVariableExtractor;
import com.consol.citrus.variable.VariableExtractor;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.UnsupportedEncodingException;
import java.util.*;

import static org.easymock.EasyMock.*;

/**
* @author Christoph Deppisch
*/
public class SendMessageActionTest extends AbstractTestNGUnitTest {

    private Endpoint endpoint = EasyMock.createMock(Endpoint.class);
    private Producer producer = EasyMock.createMock(Producer.class);
    private EndpointConfiguration endpointConfiguration = EasyMock.createMock(EndpointConfiguration.class);
   
    @Test
    @SuppressWarnings("rawtypes")
  public void testSendMessageWithMessagePayloadData() {
    SendMessageAction sendAction = new SendMessageAction();
    sendAction.setEndpoint(endpoint);
   
    TestActor testActor = new TestActor();
        testActor.setName("TESTACTOR");
       
        sendAction.setActor(testActor);
       
    PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
    messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
   
    sendAction.setMessageBuilder(messageBuilder);
   
    final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

    producer.send(anyObject(Message.class), anyObject(TestContext.class));
    expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
   
    sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
  }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessagePayloadResource() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);
       
        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadResourcePath("classpath:com/consol/citrus/actions/test-request-payload.xml");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
  public void testSendMessageWithMessageBuilderScriptData() {
    SendMessageAction sendAction = new SendMessageAction();
    sendAction.setEndpoint(endpoint);
    StringBuilder sb = new StringBuilder();
    sb.append("markupBuilder.TestRequest(){\n");
    sb.append("Message('Hello World!')\n");
    sb.append("}");
   
    GroovyScriptMessageBuilder scriptMessageBuidler = new GroovyScriptMessageBuilder();
    scriptMessageBuidler.setScriptData(sb.toString());
   
    sendAction.setMessageBuilder(scriptMessageBuidler);
   
    final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
    expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
   
    sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
  }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessageBuilderScriptDataVariableSupport() {
        context.setVariable("text", "Hello World!");
       
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);
        StringBuilder sb = new StringBuilder();
        sb.append("markupBuilder.TestRequest(){\n");
        sb.append("Message('${text}')\n");
        sb.append("}");
       
        GroovyScriptMessageBuilder scriptMessageBuidler = new GroovyScriptMessageBuilder();
        scriptMessageBuidler.setScriptData(sb.toString());
       
        sendAction.setMessageBuilder(scriptMessageBuidler);
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessageBuilderScriptResource() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);
       
        GroovyScriptMessageBuilder scriptMessageBuidler = new GroovyScriptMessageBuilder();
        scriptMessageBuidler.setScriptResourcePath("classpath:com/consol/citrus/actions/test-request-payload.groovy");
       
        sendAction.setMessageBuilder(scriptMessageBuidler);
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessagePayloadDataVariablesSupport() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);
       
        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>${myText}</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        context.setVariable("myText", "Hello World!");
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessagePayloadResourceVariablesSupport() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadResourcePath("classpath:com/consol/citrus/actions/test-request-payload-with-variables.xml");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        context.setVariable("myText", "Hello World!");
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessagePayloadResourceFunctionsSupport() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadResourcePath("classpath:com/consol/citrus/actions/test-request-payload-with-functions.xml");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageOverwriteMessageElementsXPath() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>?</Message></TestRequest>");
       
        Map<String, String> overwriteElements = new HashMap<String, String>();
        overwriteElements.put("/TestRequest/Message", "Hello World!");
       
        XpathMessageConstructionInterceptor interceptor = new XpathMessageConstructionInterceptor(overwriteElements);
        messageBuilder.add(interceptor);
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageOverwriteMessageElementsDotNotation() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>?</Message></TestRequest>");
       
        Map<String, String> overwriteElements = new HashMap<String, String>();
        overwriteElements.put("TestRequest.Message", "Hello World!");
       
        XpathMessageConstructionInterceptor interceptor = new XpathMessageConstructionInterceptor(overwriteElements);
        messageBuilder.add(interceptor);
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageOverwriteMessageElementsXPathWithNamespace() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<ns0:TestRequest xmlns:ns0=\"http://citrusframework.org/unittest\">" +
                "<ns0:Message>?</ns0:Message></ns0:TestRequest>");
       
        Map<String, String> overwriteElements = new HashMap<String, String>();
        overwriteElements.put("/ns0:TestRequest/ns0:Message", "Hello World!");

        XpathMessageConstructionInterceptor interceptor = new XpathMessageConstructionInterceptor(overwriteElements);
        messageBuilder.add(interceptor);
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<ns0:TestRequest xmlns:ns0=\"http://citrusframework.org/unittest\"><ns0:Message>Hello World!</ns0:Message></ns0:TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
                validationContext.setSchemaValidation(false);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageOverwriteMessageElementsXPathWithDefaultNamespace() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest xmlns=\"http://citrusframework.org/unittest\">" +
                "<Message>?</Message></TestRequest>");
       
        Map<String, String> overwriteElements = new HashMap<String, String>();
        overwriteElements.put("/:TestRequest/:Message", "Hello World!");

        XpathMessageConstructionInterceptor interceptor = new XpathMessageConstructionInterceptor(overwriteElements);
        messageBuilder.add(interceptor);
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<TestRequest xmlns=\"http://citrusframework.org/unittest\"><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
                validationContext.setSchemaValidation(false);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessageHeaders() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
       
        final Map<String, Object> controlHeaders = new HashMap<String, Object>();
        controlHeaders.put("Operation", "sayHello");
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>", controlHeaders);

        final Map<String, Object> headers = new HashMap<String, Object>();
        headers.put("Operation", "sayHello");
        messageBuilder.setMessageHeaders(headers);
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithHeaderValuesVariableSupport() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
       
        context.setVariable("myOperation", "sayHello");
       
        final Map<String, Object> controlHeaders = new HashMap<String, Object>();
        controlHeaders.put("Operation", "sayHello");
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>", controlHeaders);

        final Map<String, Object> headers = new HashMap<String, Object>();
        headers.put("Operation", "${myOperation}");
        messageBuilder.setMessageHeaders(headers);
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    public void testSendMessageWithUnknwonVariableInMessagePayload() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>${myText}</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();
        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        try {
            sendAction.execute(context);
        } catch(CitrusRuntimeException e) {
            Assert.assertEquals(e.getMessage(), "Unknown variable 'myText'");
            return;
        }
       
        Assert.fail("Missing " + CitrusRuntimeException.class + " with unknown variable error message");
    }
   
    @Test
    public void testSendMessageWithUnknwonVariableInHeaders() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
       
        final Map<String, Object> headers = new HashMap<String, Object>();
        headers.put("Operation", "${myOperation}");
        messageBuilder.setMessageHeaders(headers);
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();
        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        try {
            sendAction.execute(context);
        } catch(CitrusRuntimeException e) {
            Assert.assertEquals(e.getMessage(), "Unknown variable 'myOperation'");
            return;
        }
       
        Assert.fail("Missing " + CitrusRuntimeException.class + " with unknown variable error message");
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithExtractHeaderValues() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
       
        final Map<String, Object> controlHeaders = new HashMap<String, Object>();
        controlHeaders.put("Operation", "sayHello");
        final Message controlMessage = new DefaultMessage("<TestRequest><Message>Hello World!</Message></TestRequest>", controlHeaders);

        final Map<String, Object> headers = new HashMap<String, Object>();
        headers.put("Operation", "sayHello");
        messageBuilder.setMessageHeaders(headers);
       
        sendAction.setMessageBuilder(messageBuilder);
       
        Map<String, String> extractVars = new HashMap<String, String>();
        extractVars.put("Operation", "myOperation");
        extractVars.put(MessageHeaders.ID, "correlationId");
       
        List<VariableExtractor> variableExtractors = new ArrayList<VariableExtractor>();
        MessageHeaderVariableExtractor variableExtractor = new MessageHeaderVariableExtractor();
        variableExtractor.setHeaderMappings(extractVars);
       
        variableExtractors.add(variableExtractor);
        sendAction.setVariableExtractors(variableExtractors);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);
       
        Assert.assertNotNull(context.getVariable("myOperation"));
        Assert.assertNotNull(context.getVariable("correlationId"));

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testMissingMessagePayload() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(new DefaultMessage(""));
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithXmlDeclaration() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<?xml version=\"1.0\" encoding=\"UTF-8\"?><TestRequest><Message>Hello World!</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<?xml version=\"1.0\" encoding=\"UTF-8\"?><TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithUTF16Encoding() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<?xml version=\"1.0\" encoding=\"UTF-16\"?><TestRequest><Message>Hello World!</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<?xml version=\"1.0\" encoding=\"UTF-16\"?><TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithISOEncoding() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><TestRequest><Message>Hello World!</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithUnsupportedEncoding() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<?xml version=\"1.0\" encoding=\"MyUnsupportedEncoding\"?><TestRequest><Message>Hello World!</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        try {
            sendAction.execute(context);
        } catch (CitrusRuntimeException e) {
            Assert.assertTrue(e.getCause() instanceof UnsupportedEncodingException);
        }

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    @SuppressWarnings("rawtypes")
    public void testSendMessageWithMessagePayloadResourceISOEncoding() {
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);

        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadResourcePath("classpath:com/consol/citrus/actions/test-request-iso-encoding.xml");
       
        sendAction.setMessageBuilder(messageBuilder);
       
        final Message controlMessage = new DefaultMessage("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><TestRequest><Message>Hello World!</Message></TestRequest>");

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();

        producer.send(anyObject(Message.class), anyObject(TestContext.class));
        expectLastCall().andAnswer(new IAnswer<Object>() {
            public Object answer() throws Throwable {
                DomXmlMessageValidator validator = new DomXmlMessageValidator();
                XmlMessageValidationContext validationContext = new XmlMessageValidationContext();
                validationContext.setControlMessage(controlMessage);
               
                validator.validateMessage(((Message)EasyMock.getCurrentArguments()[0]), context, validationContext);
                return null;
            }
        }).once();

        expect(endpoint.getActor()).andReturn(null).anyTimes();

        replay(endpoint, producer, endpointConfiguration);
       
        sendAction.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    public void testDisabledSendMessage() {
        TestCase testCase = new TestCase();
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);
       
        TestActor disabledActor = new TestActor();
        disabledActor.setDisabled(true);
        sendAction.setActor(disabledActor);
       
        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();
        expect(endpoint.getActor()).andReturn(null).anyTimes();
        replay(endpoint, producer, endpointConfiguration);

        testCase.addTestAction(sendAction);
        testCase.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
    @Test
    public void testDisabledSendMessageByEndpointActor() {
        TestCase testCase = new TestCase();
        SendMessageAction sendAction = new SendMessageAction();
        sendAction.setEndpoint(endpoint);
       
        TestActor disabledActor = new TestActor();
        disabledActor.setDisabled(true);
       
        PayloadTemplateMessageBuilder messageBuilder = new PayloadTemplateMessageBuilder();
        messageBuilder.setPayloadData("<TestRequest><Message>Hello World!</Message></TestRequest>");
       
        sendAction.setMessageBuilder(messageBuilder);

        reset(endpoint, producer, endpointConfiguration);
        expect(endpoint.createProducer()).andReturn(producer).anyTimes();
        expect(endpoint.getEndpointConfiguration()).andReturn(endpointConfiguration).anyTimes();
        expect(endpoint.getActor()).andReturn(disabledActor).times(2);
        replay(endpoint, producer, endpointConfiguration);

        testCase.addTestAction(sendAction);
        testCase.execute(context);

        verify(endpoint, producer, endpointConfiguration);
    }
   
}
TOP

Related Classes of com.consol.citrus.actions.SendMessageActionTest

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.