1 /* 2 * $Id: MuleEventTestCase.java 11894 2008-06-02 17:32:19Z dfeist $ 3 * -------------------------------------------------------------------------------------- 4 * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com 5 * 6 * The software in this package is published under the terms of the CPAL v1.0 7 * license, a copy of which has been included with this distribution in the 8 * LICENSE.txt file. 9 */ 10 11 package org.mule; 12 13 import org.mule.api.MuleEvent; 14 import org.mule.api.endpoint.ImmutableEndpoint; 15 import org.mule.api.transformer.Transformer; 16 import org.mule.api.transformer.TransformerException; 17 import org.mule.routing.filters.PayloadTypeFilter; 18 import org.mule.tck.AbstractMuleTestCase; 19 import org.mule.transformer.AbstractTransformer; 20 import org.mule.transformer.simple.ByteArrayToObject; 21 import org.mule.transformer.simple.SerializableToByteArray; 22 23 import java.io.Serializable; 24 import java.util.ArrayList; 25 import java.util.List; 26 27 public class MuleEventTestCase extends AbstractMuleTestCase 28 { 29 30 // public void testEventInitialise() throws Exception 31 // { 32 // String data = "Test Data"; 33 // 34 // DefaultMuleEvent event = (DefaultMuleEvent)getTestEvent(data, getTestService("orange", Orange.class)); 35 // RequestContext.setEvent(event); 36 // 37 // assertEquals("MuleEvent data should equal " + data, data, event.getMessage().getPayload()); 38 // assertEquals("MuleEvent data should equal " + data, data, event.getMessageAsString()); 39 // assertEquals("MuleEvent data should equal " + data, data, event.transformMessage()); 40 // assertEquals("MuleEvent data should be a byte array 9 bytes in length", 9, event 41 // .transformMessageToBytes().length); 42 // 43 // assertEquals("MuleEvent data should be a byte array 9 bytes in length", 9, 44 // event.getMessageAsBytes().length); 45 // assertEquals("MuleEvent data should equal " + data, data, event.getSource()); 46 // 47 // assertEquals("MuleBeanPropertiesRule", event.getMessage().getProperty("MuleBeanPropertiesRule", 48 // "MuleBeanPropertiesRule")); 49 // event.getMessage().setProperty("Test", "Test1"); 50 // 51 // assertFalse(event.getMessage().getPropertyNames().isEmpty()); 52 // assertEquals("bla2", event.getMessage().getProperty("bla2", "bla2")); 53 // assertEquals("Test1", event.getMessage().getProperty("Test")); 54 // assertEquals("Test1", event.getMessage().getProperty("Test", "bla2")); 55 // assertNotNull(event.getId()); 56 // } 57 // 58 // public void testEventTransformer() throws Exception 59 // { 60 // String data = "Test Data"; 61 // ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test",CollectionUtils.singletonList(new TestEventTransformer())); 62 // MuleEvent event = getTestEvent(data, endpoint); 63 // RequestContext.setEvent(event); 64 // 65 // assertEquals("MuleEvent data should equal " + data, data, event.getMessage().getPayload()); 66 // assertEquals("MuleEvent data should equal " + data, data, event.getMessageAsString()); 67 // assertEquals("MuleEvent data should equal 'Transformed Test Data'", "Transformed Test Data", event 68 // .transformMessage()); 69 // assertEquals("MuleEvent data should be a byte array 28 bytes in length", 21, event 70 // .transformMessageToBytes().length); 71 // } 72 // 73 // public void testEventRewrite() throws Exception 74 // { 75 // String data = "Test Data"; 76 // ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test", CollectionUtils.singletonList(new TestEventTransformer())); 77 // DefaultMuleEvent event = new DefaultMuleEvent(new DefaultMuleMessage(data), endpoint, 78 // getTestSession(getTestService("apple", Apple.class), muleContext), true, 79 // new ResponseOutputStream(System.out)); 80 // 81 // assertNotNull(event.getId()); 82 // assertNotNull(event.getSession()); 83 // assertNotNull(event.getEndpoint()); 84 // assertNotNull(event.getOutputStream()); 85 // assertNotNull(event.getMessage()); 86 // assertEquals(data, event.getMessageAsString()); 87 // 88 // MuleEvent event2 = new DefaultMuleEvent(new DefaultMuleMessage("New Data"), event); 89 // assertNotNull(event2.getId()); 90 // assertEquals(event.getId(), event2.getId()); 91 // assertNotNull(event2.getSession()); 92 // assertNotNull(event2.getEndpoint()); 93 // assertNotNull(event2.getOutputStream()); 94 // assertNotNull(event2.getMessage()); 95 // assertEquals("New Data", event2.getMessageAsString()); 96 // 97 // } 98 // 99 // public void testProperties() throws Exception 100 // { 101 // MuleEvent prevEvent; 102 // Properties props; 103 // MuleMessage msg; 104 // ImmutableEndpoint endpoint; 105 // MuleEvent event; 106 // 107 // // nowhere 108 // prevEvent = getTestEvent("payload"); 109 // props = new Properties(); 110 // msg = new DefaultMuleMessage("payload", props); 111 // props = new Properties(); 112 // endpoint = getTestOutboundEndpoint("Test", null, null, null, props); 113 // event = new DefaultMuleEvent(msg, endpoint, prevEvent.getService(), prevEvent); 114 // assertNull(event.getMessage().getProperty("prop")); 115 // 116 // // in previous event => previous event 117 // prevEvent.getMessage().setProperty("prop", "value0"); 118 // event = new DefaultMuleEvent(msg, endpoint, prevEvent.getService(), prevEvent); 119 // assertEquals("value0", event.getMessage().getProperty("prop")); 120 // 121 // // TODO check if this fragment can be removed 122 // // in previous event + endpoint => endpoint 123 // // This doesn't apply now as the previous event properties will be the same 124 // // as the current event props 125 // // props = new Properties(); 126 // // props.put("prop", "value2"); 127 // // endpoint.setProperties(props); 128 // // event = new DefaultMuleEvent(msg, endpoint, prevEvent.getComponent(), prevEvent); 129 // // assertEquals("value2", event.getProperty("prop")); 130 // 131 // // in previous event + message => message 132 // props = new Properties(); 133 // props.put("prop", "value1"); 134 // msg = new DefaultMuleMessage("payload", props); 135 // endpoint = getTestOutboundEndpoint("Test"); 136 // event = new DefaultMuleEvent(msg, endpoint, prevEvent.getService(), prevEvent); 137 // assertEquals("value1", event.getMessage().getProperty("prop")); 138 // 139 // // in previous event + endpoint + message => message 140 // props = new Properties(); 141 // props.put("prop", "value1"); 142 // msg = new DefaultMuleMessage("payload", props); 143 // 144 // Properties props2 = new Properties(); 145 // props2.put("prop", "value2"); 146 // endpoint = getTestOutboundEndpoint("Test", null, null, null, props2); 147 // event = new DefaultMuleEvent(msg, endpoint, prevEvent.getService(), prevEvent); 148 // assertEquals("value1", event.getMessage().getProperty("prop")); 149 // 150 // } 151 // 152 // /** 153 // * See http://mule.mulesource.org/jira/browse/MULE-384 for details. 154 // */ 155 // public void testNoPasswordNoNullPointerException() throws Exception 156 // { 157 // // provide the username, but not the password, as is the case for SMTP 158 // // cannot set SMTP endpoint type, because the module doesn't have this 159 // // dependency 160 // ImmutableEndpoint endpoint = getTestOutboundEndpoint("AuthTest", "test://john.doe@xyz.fr"); 161 // MuleEvent event = getTestEvent(new Object(), endpoint); 162 // Credentials credentials = event.getCredentials(); 163 // assertNull("Credentials must not be created for endpoints without a password.", credentials); 164 // } 165 166 public void testEventSerialization() throws Exception 167 { 168 Transformer trans1 = new TestEventTransformer(); 169 trans1.setName("OptimusPrime"); 170 171 Transformer trans2 = new TestEventTransformer(); 172 trans2.setName("Bumblebee"); 173 174 List transformers = new ArrayList(); 175 transformers.add(trans1); 176 transformers.add(trans2); 177 178 179 ImmutableEndpoint endpoint = getTestOutboundEndpoint("Test", null, transformers, new PayloadTypeFilter( 180 Object.class), null); 181 182 MuleEvent event = RequestContext.setEvent(getTestEvent("payload", endpoint)); 183 Serializable serialized = (Serializable) new SerializableToByteArray().transform(event); 184 assertNotNull(serialized); 185 186 MuleEvent deserialized = (MuleEvent) new ByteArrayToObject().transform(serialized); 187 188 // Assert that deserialized event is not null and has muleContext 189 assertNotNull(deserialized); 190 assertNotNull(deserialized.getMuleContext()); 191 192 // Assert that deserialized event has session with same id 193 assertNotNull(deserialized.getSession()); 194 assertEquals(event.getSession().getId(), deserialized.getSession().getId()); 195 196 // Assert that deserialized event has service and that the service is the same instance 197 assertNotNull(deserialized.getSession().getService()); 198 assertEquals(event.getSession().getService(), deserialized.getSession().getService()); 199 assertSame(event.getSession().getService(), deserialized.getSession().getService()); 200 201 // Assert that deserialized event has endpoint and that the endpoint is the same instance 202 assertNotNull(deserialized.getEndpoint()); 203 assertEquals(endpoint, deserialized.getEndpoint()); 204 205 List deserializedTransformers = deserialized.getEndpoint().getTransformers(); 206 assertEquals(2, deserializedTransformers.size()); 207 assertEquals(trans1.getName(), ((Transformer) deserializedTransformers.get(0)).getName()); 208 assertEquals(trans2.getName(), ((Transformer) deserializedTransformers.get(1)).getName()); 209 assertEquals(PayloadTypeFilter.class, deserialized.getEndpoint().getFilter().getClass()); 210 } 211 212 213 private class TestEventTransformer extends AbstractTransformer 214 { 215 public Object doTransform(Object src, String encoding) throws TransformerException 216 { 217 return "Transformed Test Data"; 218 } 219 } 220 221 }