1   /*
2    * $Id:SerializedUMOMessageTransformersTestCase.java 5937 2007-04-09 22:35:04Z rossmason $
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.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 SerializedUMOMessageTransformersTestCase extends AbstractTransformerTestCase
31  {
32      private MuleMessage testObject = null;
33  
34      // @Override
35      protected void doSetUp() throws Exception
36      {
37          Map props = new HashMap();
38          props.put("object", new Apple());
39          props.put("number", new Integer(1));
40          props.put("string", "hello");
41          testObject = new DefaultMuleMessage("test", props);
42          
43          RequestContext.setEvent(
44                  new DefaultMuleEvent(testObject, getTestOutboundEndpoint("test"),
45                  MuleTestUtils.getTestSession(muleContext), true));
46      }
47  
48      // @Override
49      protected void doTearDown() throws Exception
50      {
51          RequestContext.clear();
52      }
53  
54      // @Override
55  
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          //super.testTransform();
61      }
62  
63      public Transformer getTransformer() throws Exception
64      {
65          return new MuleMessageToByteArray();
66      }
67  
68      public Transformer getRoundTripTransformer() throws Exception
69      {
70          return new ByteArrayToMuleMessage();
71      }
72  
73      public Object getTestData()
74      {
75          return testObject;
76      }
77  
78      public Object getResultData()
79      {
80          try
81          {
82              ByteArrayOutputStream bs = null;
83              ObjectOutputStream os = null;
84  
85              bs = new ByteArrayOutputStream();
86              os = new ObjectOutputStream(bs);
87              os.writeObject(testObject);
88              os.flush();
89              os.close();
90              return bs.toByteArray();
91          }
92          catch (IOException e)
93          {
94              throw new IllegalStateException(e.getMessage());
95          }
96      }
97  
98      // @Override
99      public boolean compareResults(Object src, Object result)
100     {
101         if (src == null && result == null)
102         {
103             return true;
104         }
105         if (src == null || result == null)
106         {
107             return false;
108         }
109         return Arrays.equals((byte[])src, (byte[])result);
110     }
111 
112     // @Override
113     public boolean compareRoundtripResults(Object src, Object result)
114     {
115         if (src == null && result == null)
116         {
117             return true;
118         }
119         if (src == null || result == null)
120         {
121             return false;
122         }
123         if (src instanceof MuleMessage && result instanceof MuleMessage)
124         {
125             return ((MuleMessage)src).getPayload().equals(((MuleMessage)result).getPayload())
126                             && ((MuleMessage)src).getProperty("object").equals(
127                                 ((MuleMessage)result).getProperty("object"))
128                             && ((MuleMessage)src).getProperty("string").equals(
129                                 ((MuleMessage)result).getProperty("string"))
130                             && ((MuleMessage)src).getIntProperty("number", -1) == ((MuleMessage)result)
131                                 .getIntProperty("number", -2);
132         }
133         else
134         {
135             return false;
136         }
137     }
138 }