1   /*
2    * $Id: MuleEventTestCase.java 7976 2007-08-21 14:26:13Z dirk.olmes $
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.mule;
12  
13  import org.mule.impl.MuleDescriptor;
14  import org.mule.impl.MuleEvent;
15  import org.mule.impl.MuleMessage;
16  import org.mule.impl.ResponseOutputStream;
17  import org.mule.impl.endpoint.MuleEndpointURI;
18  import org.mule.tck.AbstractMuleTestCase;
19  import org.mule.tck.testmodels.fruit.Apple;
20  import org.mule.tck.testmodels.fruit.Orange;
21  import org.mule.transformers.AbstractTransformer;
22  import org.mule.umo.UMOEvent;
23  import org.mule.umo.UMOMessage;
24  import org.mule.umo.endpoint.UMOEndpoint;
25  import org.mule.umo.security.UMOCredentials;
26  import org.mule.umo.transformer.TransformerException;
27  
28  import java.util.Properties;
29  
30  public class MuleEventTestCase extends AbstractMuleTestCase
31  {
32  
33      public void testEventInitialise() throws Exception
34      {
35          String data = "Test Data";
36          MuleDescriptor descriptor = getTestDescriptor("orange", Orange.class.getName());
37  
38          MuleEvent event = (MuleEvent)getTestEvent(data, descriptor);
39  
40          assertEquals("Event data should equal " + data, data, event.getMessage().getPayload());
41          assertEquals("Event data should equal " + data, data, event.getMessageAsString(null));
42          assertEquals("Event data should equal " + data, data, event.getTransformedMessage());
43          assertEquals("Event data should be a byte array 9 bytes in length", 9, event
44              .getTransformedMessageAsBytes().length);
45  
46          assertEquals("Event data should be a byte array 9 bytes in length", 9,
47              event.getMessageAsBytes().length);
48          assertEquals("Event data should equal " + data, data, event.getSource());
49  
50          assertEquals("MuleBeanPropertiesRule", event.getMessage().getProperty("MuleBeanPropertiesRule",
51              "MuleBeanPropertiesRule"));
52          event.getMessage().setProperty("Test", "Test1");
53  
54          assertFalse(event.getMessage().getPropertyNames().isEmpty());
55          assertEquals("bla2", event.getMessage().getProperty("bla2", "bla2"));
56          assertEquals("Test1", event.getMessage().getProperty("Test"));
57          assertEquals("Test1", event.getMessage().getProperty("Test", "bla2"));
58          assertNotNull(event.getId());
59      }
60  
61      public void testEventTransformer() throws Exception
62      {
63          String data = "Test Data";
64          UMOEndpoint endpoint = getTestEndpoint("Test", UMOEndpoint.ENDPOINT_TYPE_SENDER);
65          endpoint.setTransformer(new TestEventTransformer());
66          UMOEvent event = getTestEvent(data, endpoint);
67  
68          assertEquals("Event data should equal " + data, data, event.getMessage().getPayload());
69          assertEquals("Event data should equal " + data, data, event.getMessageAsString(null));
70          assertEquals("Event data should equal 'Transformed Test Data'", "Transformed Test Data", event
71              .getTransformedMessage());
72          assertEquals("Event data should be a byte array 28 bytes in length", 21, event
73              .getTransformedMessageAsBytes().length);
74      }
75  
76      public void testEventRewrite() throws Exception
77      {
78          String data = "Test Data";
79          UMOEndpoint endpoint = getTestEndpoint("Test", UMOEndpoint.ENDPOINT_TYPE_SENDER);
80          endpoint.setTransformer(new TestEventTransformer());
81          MuleEvent event = new MuleEvent(new MuleMessage(data), endpoint,
82              getTestSession(getTestComponent(getTestDescriptor("apple", Apple.class.getName()))), true,
83              new ResponseOutputStream(System.out));
84  
85          assertNotNull(event.getId());
86          assertNotNull(event.getSession());
87          assertNotNull(event.getEndpoint());
88          assertNotNull(event.getOutputStream());
89          assertNotNull(event.getMessage());
90          assertEquals(data, event.getMessageAsString(null));
91  
92          UMOEvent event2 = new MuleEvent(new MuleMessage("New Data"), event);
93          assertNotNull(event2.getId());
94          assertEquals(event.getId(), event2.getId());
95          assertNotNull(event2.getSession());
96          assertNotNull(event2.getEndpoint());
97          assertNotNull(event2.getOutputStream());
98          assertNotNull(event2.getMessage());
99          assertEquals("New Data", event2.getMessageAsString(null));
100 
101     }
102 
103     public void testProperties() throws Exception
104     {
105         UMOEvent prevEvent;
106         Properties props;
107         UMOMessage msg;
108         UMOEndpoint endpoint;
109         UMOEvent event;
110 
111         // nowhere
112         prevEvent = getTestEvent("payload");
113         props = new Properties();
114         msg = new MuleMessage("payload", props);
115         endpoint = getTestEndpoint("Test", UMOEndpoint.ENDPOINT_TYPE_SENDER);
116         props = new Properties();
117         endpoint.setProperties(props);
118         event = new MuleEvent(msg, endpoint, prevEvent.getComponent(), prevEvent);
119         assertNull(event.getMessage().getProperty("prop"));
120 
121         // in previous event => previous event
122         prevEvent.getMessage().setProperty("prop", "value0");
123         event = new MuleEvent(msg, endpoint, prevEvent.getComponent(), prevEvent);
124         assertEquals("value0", event.getMessage().getProperty("prop"));
125 
126         // TODO check if this fragment can be removed
127         // in previous event + endpoint => endpoint
128         // This doesn't apply now as the previous event properties will be the same
129         // as the current event props
130         // props = new Properties();
131         // props.put("prop", "value2");
132         // endpoint.setProperties(props);
133         // event = new MuleEvent(msg, endpoint, prevEvent.getComponent(), prevEvent);
134         // assertEquals("value2", event.getProperty("prop"));
135 
136         // in previous event + message => message
137         props = new Properties();
138         props.put("prop", "value1");
139         msg = new MuleMessage("payload", props);
140         endpoint = getTestEndpoint("Test", UMOEndpoint.ENDPOINT_TYPE_SENDER);
141         event = new MuleEvent(msg, endpoint, prevEvent.getComponent(), prevEvent);
142         assertEquals("value1", event.getMessage().getProperty("prop"));
143 
144         // in previous event + endpoint + message => message
145         props = new Properties();
146         props.put("prop", "value1");
147         msg = new MuleMessage("payload", props);
148 
149         Properties props2 = new Properties();
150         props2.put("prop", "value2");
151         endpoint.setProperties(props2);
152         event = new MuleEvent(msg, endpoint, prevEvent.getComponent(), prevEvent);
153         assertEquals("value1", event.getMessage().getProperty("prop"));
154 
155     }
156 
157     /**
158      * See http://mule.mulesource.org/jira/browse/MULE-384 for details.
159      */
160     public void testNoPasswordNoNullPointerException() throws Exception
161     {
162         UMOEndpoint endpoint = getTestEndpoint("AuthTest", UMOEndpoint.ENDPOINT_TYPE_SENDER);
163         // provide the username, but not the password, as is the case for SMTP
164         // cannot set SMTP endpoint type, because the module doesn't have this
165         // dependency
166         endpoint.setEndpointURI(new MuleEndpointURI("test://john.doe@xyz.fr"));
167         UMOEvent event = getTestEvent(new Object(), endpoint);
168         UMOCredentials credentials = event.getCredentials();
169         assertNull("Credentials must not be created for endpoints without a password.", credentials);
170     }
171 
172     private class TestEventTransformer extends AbstractTransformer
173     {
174         /*
175          * (non-Javadoc)
176          * 
177          * @see org.mule.transformers.AbstractTransformer#doTransform(java.lang.Object)
178          */
179         public Object doTransform(Object src, String encoding) throws TransformerException
180         {
181             return "Transformed Test Data";
182         }
183     }
184 
185 }