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 }