View Javadoc

1   /*
2    * $Id:SerializedMuleMessageTransformersTestCase.java 5937 2007-04-09 22:35:04Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.transformer.simple;
12  
13  import org.mule.DefaultMuleEvent;
14  import org.mule.DefaultMuleMessage;
15  import org.mule.RequestContext;
16  import org.mule.api.MuleMessage;
17  import org.mule.api.transformer.Transformer;
18  import org.mule.tck.MuleTestUtils;
19  import org.mule.tck.testmodels.fruit.Apple;
20  import org.mule.transformer.AbstractTransformerTestCase;
21  
22  import java.io.IOException;
23  import java.io.ObjectOutputStream;
24  import java.util.Arrays;
25  import java.util.HashMap;
26  import java.util.Map;
27  
28  import org.apache.commons.io.output.ByteArrayOutputStream;
29  
30  public class SerializedMuleMessageTransformersTestCase extends AbstractTransformerTestCase
31  {
32      
33      private MuleMessage testObject = null;
34  
35      @Override
36      protected void doSetUp() throws Exception
37      {
38          Map<String, Object> props = new HashMap<String, Object>();
39          props.put("object", new Apple());
40          props.put("number", 1);
41          props.put("string", "hello");
42          testObject = new DefaultMuleMessage("test", props, muleContext);
43          
44          RequestContext.setEvent(
45                  new DefaultMuleEvent(testObject, getTestOutboundEndpoint("test"),
46                  MuleTestUtils.getTestSession(muleContext)));
47      }
48  
49      @Override
50      protected void doTearDown() throws Exception
51      {
52          RequestContext.clear();
53      }
54  
55      @Override
56      public void testTransform() throws Exception
57      {
58          // this depends on the ordering of properties in the map.
59          // because we now make a copy of maps in RequestContext this order can change
60      }
61  
62      @Override
63      public Transformer getTransformer() throws Exception
64      {
65          return createObject(MuleMessageToByteArray.class);
66      }
67  
68      @Override
69      public Transformer getRoundTripTransformer() throws Exception
70      {
71          return createObject(ByteArrayToMuleMessage.class);
72      }
73  
74      @Override
75      public Object getTestData()
76      {
77          return testObject;
78      }
79  
80      @Override
81      public Object getResultData()
82      {
83          try
84          {
85              ByteArrayOutputStream bs;
86              ObjectOutputStream os;
87  
88              bs = new ByteArrayOutputStream();
89              os = new ObjectOutputStream(bs);
90              os.writeObject(testObject);
91              os.flush();
92              os.close();
93              return bs.toByteArray();
94          }
95          catch (IOException e)
96          {
97              throw new IllegalStateException(e.getMessage());
98          }
99      }
100 
101     @Override
102     public boolean compareResults(Object src, Object result)
103     {
104         if (src == null && result == null)
105         {
106             return true;
107         }
108         if (src == null || result == null)
109         {
110             return false;
111         }
112         return Arrays.equals((byte[])src, (byte[])result);
113     }
114 
115     @Override
116     public boolean compareRoundtripResults(Object src, Object result)
117     {
118         if (src == null && result == null)
119         {
120             return true;
121         }
122         if (src == null || result == null)
123         {
124             return false;
125         }
126         if (src instanceof MuleMessage && result instanceof MuleMessage)
127         {
128             MuleMessage sourceMuleMessage = (MuleMessage) src;
129             MuleMessage resultMuleMessage = (MuleMessage) result;
130             
131             boolean payloadsAreEqual = comparePayloads(sourceMuleMessage, resultMuleMessage);
132             boolean objectPropertiesAreEqual = compareObjectProperties(sourceMuleMessage, resultMuleMessage);
133             boolean stringPropertiesAreEqual = compareStringProperties(sourceMuleMessage, resultMuleMessage);
134             boolean intPropertiesAreEqual = compareIntProperties(sourceMuleMessage, resultMuleMessage);
135                         
136             return payloadsAreEqual 
137                 && objectPropertiesAreEqual
138                 && stringPropertiesAreEqual 
139                 && intPropertiesAreEqual;
140         }
141         else
142         {
143             return false;
144         }
145     }
146     
147     private boolean comparePayloads(MuleMessage src, MuleMessage result)
148     {
149         Object sourcePayload = src.getPayload();
150         Object resultPayload = result.getPayload();
151         return sourcePayload.equals(resultPayload);
152     }
153     
154     private boolean compareObjectProperties(MuleMessage src, MuleMessage result)
155     {
156         Object sourceObjectProperty = src.getOutboundProperty("object");
157         Object resultObjectProperty = result.getOutboundProperty("object");
158         return sourceObjectProperty.equals(resultObjectProperty);
159     }
160     
161     private boolean compareStringProperties(MuleMessage src, MuleMessage result)
162     {
163         Object sourceStringProperty = src.getOutboundProperty("string");
164         Object resultStringProperty = result.getOutboundProperty("string");
165         return sourceStringProperty.equals(resultStringProperty);
166     }
167 
168     private boolean compareIntProperties(MuleMessage src, MuleMessage result)
169     {
170         int sourceIntProperty = src.getOutboundProperty("number", -1);
171         int resultIntProperty = result.getOutboundProperty("number", -2);
172         return (sourceIntProperty == resultIntProperty);
173     }
174 
175 }