Package org.mule.transformers.simple

Source Code of org.mule.transformers.simple.MessagePropertiesTransformerTestCase

/*
* $Id: MessagePropertiesTransformerTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
* --------------------------------------------------------------------------------------
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
*
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/

package org.mule.transformers.simple;

import org.mule.DefaultMuleMessage;
import org.mule.api.MuleEventContext;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.TransformerException;
import org.mule.api.transport.PropertyScope;
import org.mule.tck.FunctionalTestCase;
import org.mule.transformer.simple.MessagePropertiesTransformer;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class MessagePropertiesTransformerTestCase extends FunctionalTestCase
{
    protected String getConfigResources()
    {
        return "message-properties-transformer-config.xml";
    }

    @Test
    public void testOverwriteFlagEnabledByDefault() throws Exception
    {
        MessagePropertiesTransformer t = new MessagePropertiesTransformer();
        Map<String, Object> add = new HashMap<String, Object>();
        add.put("addedProperty", "overwrittenValue");
        t.setAddProperties(add);
        t.setMuleContext(muleContext);

        MuleMessage msg = new DefaultMuleMessage("message", muleContext);
        msg.setOutboundProperty("addedProperty", "originalValue");
        MuleEventContext ctx = getTestEventContext(msg);
        // context clones message
        msg = ctx.getMessage();
        DefaultMuleMessage transformed = (DefaultMuleMessage) t.transform(msg, (String)null);
        assertSame(msg, transformed);
        assertEquals(msg.getUniqueId(), transformed.getUniqueId());
        assertEquals(msg.getPayload(), transformed.getPayload());
        compareProperties(msg, transformed);

        assertEquals("overwrittenValue", transformed.getOutboundProperty("addedProperty"));
    }

    @Test
    public void testOverwriteFalsePreservesOriginal() throws Exception
    {
        MessagePropertiesTransformer t = new MessagePropertiesTransformer();
        Map<String, Object> add = new HashMap<String, Object>();
        add.put("addedProperty", "overwrittenValue");
        t.setAddProperties(add);
        t.setOverwrite(false);
        t.setMuleContext(muleContext);

        DefaultMuleMessage msg = new DefaultMuleMessage("message", muleContext);
        msg.setProperty("addedProperty", "originalValue", PropertyScope.INVOCATION);
        DefaultMuleMessage transformed = (DefaultMuleMessage) t.transform(msg, (String)null);
        assertSame(msg, transformed);
        assertEquals(msg.getUniqueId(), transformed.getUniqueId());
        assertEquals(msg.getPayload(), transformed.getPayload());
        compareProperties(msg, transformed);

        assertEquals("originalValue", transformed.getInvocationProperty("addedProperty"));
    }

    @Test
    public void testExpressionsInAddProperties() throws Exception
    {
        MessagePropertiesTransformer t = new MessagePropertiesTransformer();
        Map<String, Object> add = new HashMap<String, Object>();
        add.put("Foo", "#[header:public-house]");
        t.setAddProperties(add);
        t.setMuleContext(muleContext);

        DefaultMuleMessage msg = new DefaultMuleMessage("message", muleContext);
        msg.setOutboundProperty("public-house", "Bar");
        DefaultMuleMessage transformed = (DefaultMuleMessage) t.transform(msg, (String)null);
        assertSame(msg, transformed);
        assertEquals(msg.getUniqueId(), transformed.getUniqueId());
        assertEquals(msg.getPayload(), transformed.getPayload());
        compareProperties(msg, transformed);

        assertEquals("Bar", transformed.getOutboundProperty("Foo"));
    }

    @Test
    public void testRenameProperties() throws Exception
    {
        MessagePropertiesTransformer t = new MessagePropertiesTransformer();
        Map<String, String> add = new HashMap<String, String>();
        add.put("Foo", "Baz");
        t.setRenameProperties(add);
        t.setScope(PropertyScope.INVOCATION);
        t.setMuleContext(muleContext);

        DefaultMuleMessage msg = new DefaultMuleMessage("message", muleContext);
        msg.setInvocationProperty("Foo", "Bar");
        DefaultMuleMessage transformed = (DefaultMuleMessage) t.transform(msg);
        assertSame(msg, transformed);
        assertEquals(msg.getUniqueId(), transformed.getUniqueId());
        assertEquals(msg.getPayload(), transformed.getPayload());
        compareProperties(msg, transformed);

        assertEquals("Bar", transformed.getInvocationProperty("Baz"));
    }

    @Test
    public void testDelete() throws Exception
    {
        MessagePropertiesTransformer t = new MessagePropertiesTransformer();
        t.setDeleteProperties("badProperty");
        t.setMuleContext(muleContext);

        DefaultMuleMessage msg = new DefaultMuleMessage("message", muleContext);
        msg.setOutboundProperty("badProperty", "badValue");
        assertEquals("badValue", msg.<Object>getOutboundProperty("badProperty"));
        DefaultMuleMessage transformed = (DefaultMuleMessage) t.transform(msg, (String)null);
        assertSame(msg, transformed);
        assertEquals(msg.getUniqueId(), transformed.getUniqueId());
        assertEquals(msg.getPayload(), transformed.getPayload());
        compareProperties(msg, transformed);

        assertFalse(transformed.getInvocationPropertyNames().contains("badValue"));
        assertFalse(transformed.getInboundPropertyNames().contains("badValue"));
        assertFalse(transformed.getOutboundPropertyNames().contains("badValue"));
        assertFalse(transformed.getSessionPropertyNames().contains("badValue"));
    }

    @Test
    public void testTransformerConfig() throws Exception
    {
        MessagePropertiesTransformer transformer = (MessagePropertiesTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
        transformer.setMuleContext(muleContext);
        assertNotNull(transformer);
        assertNotNull(transformer.getAddProperties());
        assertNotNull(transformer.getDeleteProperties());
        assertEquals(2, transformer.getAddProperties().size());
        assertEquals(2, transformer.getDeleteProperties().size());
        assertEquals(1, transformer.getRenameProperties().size());
        assertTrue(transformer.isOverwrite());
        assertEquals("text/baz;charset=UTF-16BE", transformer.getAddProperties().get("Content-Type"));
        assertEquals("value", transformer.getAddProperties().get("key"));
        assertEquals("test-property1", transformer.getDeleteProperties().get(0));
        assertEquals("test-property2", transformer.getDeleteProperties().get(1));
        assertEquals("Faz", transformer.getRenameProperties().get("Foo"));
        assertEquals(PropertyScope.OUTBOUND, transformer.getScope());
    }

    public void testDeleteUsingPropertyName() throws Exception
    {
        final String expression = "badProperty";
        final String[] validProperties = new String[] {"somethingnotsobad"};
        final String[] invalidProperties = new String[] {"badProperty"};

        doTestMessageTransformationWithExpression(expression, validProperties, invalidProperties);
    }

    public void testDeletePropertiesStartingWithExpression() throws Exception
    {
        final String expression = "^bad.*";
        final String[] validProperties = new String[] {"somethingnotsobad"};
        final String[] invalidProperties = new String[] {"badProperty", "badThing"};

        doTestMessageTransformationWithExpression(expression, validProperties, invalidProperties);
    }

    public void testDeletePropertiesCaseInsensitiveRegex() throws Exception
    {
        final String expression = "(?i)^BAD.*";
        final String[] validProperties = new String[] {"somethingnotsobad"};
        final String[] invalidProperties = new String[] {"badProperty", "badThing"};

        doTestMessageTransformationWithExpression(expression, validProperties, invalidProperties);
    }

    public void testDeletePropertiesEndingWithExpression() throws Exception
    {
        final String expression = ".*bad$";
        final String[] validProperties = new String[] {"badProperty", "badThing"};
        final String[] invalidProperties = new String[] {"somethingnotsobad"};

        doTestMessageTransformationWithExpression(expression, validProperties, invalidProperties);
    }

    public void testDeletePropertiesContainingExpression() throws Exception
    {
        final String expression = ".*bad.*";
        final String[] validProperties = new String[] {};
        final String[] invalidProperties = new String[] {"badProperty", "badThing", "somethingnotsobad"};

        doTestMessageTransformationWithExpression(expression, validProperties, invalidProperties);
    }

    public void testDeletePropertiesUsingWildcard() throws Exception
    {
        final String expression = "bad*";
        final String[] validProperties = new String[] {"somethingnotsobad"};
        final String[] invalidProperties = new String[] {"badProperty", "badThing"};

        doTestMessageTransformationWithExpression(expression, validProperties, invalidProperties);
    }

    private void doTestMessageTransformationWithExpression(String expression, String[] validProperties, String[] invalidProperties)
            throws TransformerException
    {
        MessagePropertiesTransformer t = createTransformerWithExpression(expression);

        DefaultMuleMessage msg = new DefaultMuleMessage("message", muleContext);
        addPropertiesToMessage(validProperties, msg);
        addPropertiesToMessage(invalidProperties, msg);

        DefaultMuleMessage transformed = (DefaultMuleMessage) t.transform(msg);
        assertSame(msg, transformed);
        assertEquals(msg.getUniqueId(), transformed.getUniqueId());
        assertEquals(msg.getPayload(), transformed.getPayload());
        assertMessageContainsExpectedProperties(validProperties, invalidProperties, transformed);
    }

    private void assertMessageContainsExpectedProperties(String[] validProperties, String[] invalidProperties, DefaultMuleMessage transformed)
    {
        for (String property : validProperties)
        {
            assertTrue("Should contain property: " + property, transformed.getOutboundPropertyNames().contains(property));
        }

        for (String property : invalidProperties)
        {
            assertFalse("Should not contain property: " + property, transformed.getOutboundPropertyNames().contains(property));
        }
    }

    private MessagePropertiesTransformer createTransformerWithExpression(String expression)
    {
        MessagePropertiesTransformer t = new MessagePropertiesTransformer();
        t.setDeleteProperties(expression);
        t.setMuleContext(muleContext);
        return t;
    }

    private void addPropertiesToMessage(String[] validProperties, DefaultMuleMessage msg)
    {
        for (String property : validProperties)
        {
            msg.setOutboundProperty(property, "defaultPropertyValue");
        }
    }

    private void compareProperties(MuleMessage msg, MuleMessage transformed)
    {
        assertEquals(msg.getInvocationPropertyNames(), transformed.getInvocationPropertyNames());
        assertEquals(msg.getInboundPropertyNames(), transformed.getInboundPropertyNames());
        assertEquals(msg.getOutboundPropertyNames(), transformed.getOutboundPropertyNames());
        assertEquals(msg.getSessionPropertyNames(), transformed.getSessionPropertyNames());
    }

}
TOP

Related Classes of org.mule.transformers.simple.MessagePropertiesTransformerTestCase

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.