1 /***
2 *
3 * Copyright 2004 Protique Ltd
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.codehaus.activemq.message;
19
20 import junit.framework.TestCase;
21
22 import javax.jms.DeliveryMode;
23 import javax.jms.JMSException;
24 import java.io.ByteArrayInputStream;
25 import java.io.ByteArrayOutputStream;
26 import java.io.DataInputStream;
27 import java.io.DataOutputStream;
28 import java.io.IOException;
29
30 /***
31 * @version $Revision: 1.1 $
32 */
33 public abstract class WireFormatTestSupport extends TestCase {
34 protected WireFormat wireFormat;
35
36 public void testMessage() throws Exception {
37 ActiveMQMessage expected = createMessage();
38 Packet actual = writeThenReadPacket(expected);
39 assertMessage(expected, (ActiveMQMessage) actual);
40 }
41
42 public void testTextMessage() throws Exception {
43 ActiveMQTextMessage expected = createTextMessage();
44 Packet actual = writeThenReadPacket(expected);
45 assertTextMessage(expected, (ActiveMQTextMessage) actual);
46 }
47
48 public void testObjectMessage() throws Exception {
49 ActiveMQObjectMessage expected = createObjectMessage();
50 Packet actual = writeThenReadPacket(expected);
51 assertObjectMessage(expected, (ActiveMQObjectMessage) actual);
52 }
53
54 public void testMapMessage() throws Exception {
55 ActiveMQMapMessage expected = createMapMessage();
56 Packet actual = writeThenReadPacket(expected);
57 assertMapMessage(expected, (ActiveMQMapMessage) actual);
58 }
59
60 protected void assertTextMessage(ActiveMQTextMessage expected, ActiveMQTextMessage actual) throws JMSException {
61 assertMessage(expected, actual);
62 assertEquals("text", expected.getText(), actual.getText());
63 }
64
65 protected ActiveMQTextMessage createTextMessage() throws JMSException {
66 ActiveMQTextMessage answer = new ActiveMQTextMessage();
67 answer.setText("This is some text");
68 configureMessage(answer);
69 return answer;
70 }
71
72 protected void assertObjectMessage(ActiveMQObjectMessage expected, ActiveMQObjectMessage actual) throws JMSException {
73 assertMessage(expected, actual);
74 assertEquals("object", expected.getObject(), actual.getObject());
75 }
76
77 protected ActiveMQObjectMessage createObjectMessage() throws JMSException {
78 ActiveMQObjectMessage answer = new ActiveMQObjectMessage();
79 answer.setObject("This is some text");
80 configureMessage(answer);
81 return answer;
82 }
83
84 protected void assertMapMessage(ActiveMQMapMessage expected, ActiveMQMapMessage actual) throws JMSException {
85 assertMessage(expected, actual);
86 assertEquals("propertyBool", expected.getBooleanProperty("propertyBool"), actual.getBooleanProperty("propertyBool"));
87 assertEquals("propertyByte", expected.getByteProperty("propertyByte"), actual.getByteProperty("propertyByte"));
88 assertEquals("propertyDouble", expected.getDoubleProperty("propertyDouble"), actual.getDoubleProperty("propertyDouble"));
89 assertEquals("propertyFloat", expected.getFloatProperty("propertyFloat"), actual.getFloatProperty("propertyFloat"));
90 assertEquals("propertyInt", expected.getIntProperty("propertyInt"), actual.getIntProperty("propertyInt"));
91 assertEquals("propertyLong", expected.getLongProperty("propertyLong"), actual.getLongProperty("propertyLong"));
92 assertEquals("propertyShort", expected.getShortProperty("propertyShort"), actual.getShortProperty("propertyShort"));
93 assertEquals("propertyString", expected.getStringProperty("propertyString"), actual.getStringProperty("propertyString"));
94 }
95
96 protected ActiveMQMapMessage createMapMessage() throws JMSException {
97 ActiveMQMapMessage answer = new ActiveMQMapMessage();
98 answer.setBooleanProperty("propertyBool", true);
99 answer.setByteProperty("propertyByte", (byte) 44);
100 answer.setDoubleProperty("propertyDouble", 123.456);
101 answer.setFloatProperty("propertyFloat", (float) 22.223456);
102 answer.setIntProperty("propertyInt", 1234567);
103 answer.setLongProperty("propertyLong", 1234567890L);
104 answer.setShortProperty("propertyShort", (short) 1234);
105 answer.setStringProperty("propertyString", "This is some text");
106 configureMessage(answer);
107 return answer;
108 }
109
110 protected void assertMessage(ActiveMQMessage expected, ActiveMQMessage actual) throws JMSException {
111 assertEquals("getBooleanProperty", expected.getBooleanProperty("fooBool"), actual.getBooleanProperty("fooBool"));
112 assertEquals("getByteProperty", expected.getByteProperty("fooByte"), actual.getByteProperty("fooByte"));
113
114 assertEquals("getEntryBrokerName", expected.getEntryBrokerName(), actual.getEntryBrokerName());
115 assertEquals("getJMSClientID", expected.getJMSClientID(), actual.getJMSClientID());
116 assertEquals("getJMSCorrelationID", expected.getJMSCorrelationID(), actual.getJMSCorrelationID());
117 assertEquals("getJMSDeliveryMode", expected.getJMSDeliveryMode(), actual.getJMSDeliveryMode());
118 assertEquals("getJMSDestination", expected.getJMSDestination(), actual.getJMSDestination());
119 assertEquals("getJMSExpiration", expected.getJMSExpiration(), actual.getJMSExpiration());
120 assertEquals("getJMSMessageID", expected.getJMSMessageID(), actual.getJMSMessageID());
121 assertEquals("getJMSPriority", expected.getJMSPriority(), actual.getJMSPriority());
122 assertEquals("getJMSReplyTo", expected.getJMSReplyTo(), actual.getJMSReplyTo());
123 assertEquals("getJMSType", expected.getJMSType(), actual.getJMSType());
124 assertEquals("getProducerID", expected.getProducerID(), actual.getProducerID());
125 assertEquals("getStringProperty", expected.getStringProperty("fooString"), actual.getStringProperty("fooString"));
126 assertEquals("getTransactionId", expected.getTransactionId(), actual.getTransactionId());
127 }
128
129 protected ActiveMQMessage createMessage() throws JMSException {
130 ActiveMQMessage answer = new ActiveMQMessage();
131 configureMessage(answer);
132 return answer;
133 }
134
135 protected void configureMessage(ActiveMQMessage answer) throws JMSException {
136 answer.setBooleanProperty("fooBool", true);
137 answer.setByteProperty("fooByte", (byte) 12);
138 answer.setConsumerId("consumerId");
139 answer.setEntryBrokerName("entryBroker");
140 answer.setJMSClientID("myClientID");
141 answer.setJMSCorrelationID("myCorrelationID");
142 answer.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
143 answer.setJMSDestination(new ActiveMQTopic("FOO.BAR"));
144 answer.setJMSExpiration(1234);
145 answer.setJMSMessageID("message:123");
146 answer.setJMSPriority(2);
147 answer.setJMSReplyTo(new ActiveMQQueue("BAR.REPLY"));
148 answer.setJMSType("Cheddar");
149 answer.setProducerID("myProducerID");
150 answer.setStringProperty("fooString", "Whatnot");
151 answer.setTransactionId("myTxnID");
152 }
153
154 protected void setUp() throws Exception {
155 wireFormat = createWireFormat();
156 }
157
158 protected abstract WireFormat createWireFormat();
159
160
161 protected void assertEquals(String message, double expected, double actual) {
162 assertEquals(message, new Double(expected), new Double(actual));
163 }
164
165 protected Packet writeThenReadPacket(ActiveMQMessage expected) throws IOException, JMSException {
166 ByteArrayOutputStream buffer = new ByteArrayOutputStream();
167 wireFormat.writePacket(expected, new DataOutputStream(buffer));
168 Packet actual = wireFormat.readPacket(createDataIn(buffer));
169 return actual;
170 }
171
172 protected DataInputStream createDataIn(ByteArrayOutputStream buffer) {
173 return new DataInputStream(new ByteArrayInputStream(buffer.toByteArray()));
174 }
175 }