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