1
2
3
4
5
6
7
8
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, getTestInboundEndpoint("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
59
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 }