28
28
import com .amazon .sqs .javamessaging .acknowledge .Acknowledger ;
29
29
import com .amazon .sqs .javamessaging .message .SQSMessage ;
30
30
import com .amazonaws .services .sqs .model .MessageAttributeValue ;
31
+
32
+ import org .junit .Assert ;
31
33
import org .junit .Before ;
32
34
import org .junit .Test ;
33
35
34
36
import javax .jms .Message ;
35
37
import javax .jms .MessageFormatException ;
36
38
import javax .jms .MessageNotWriteableException ;
37
39
38
- import junit .framework .Assert ;
39
-
40
+ import java .nio .ByteBuffer ;
40
41
import java .util .*;
41
42
42
43
/**
43
44
* Test the SQSMessageTest class
44
45
*/
45
46
public class SQSMessageTest {
46
47
private SQSSession mockSQSSession ;
48
+ final String myNumber = "myNumber" ;
49
+ final String myBinary = "myBinary" ;
47
50
final String myTrueBoolean = "myTrueBoolean" ;
48
51
final String myFalseBoolean = "myFalseBoolean" ;
49
52
final String myInteger = "myInteger" ;
@@ -67,65 +70,66 @@ public void testProperty() throws JMSException {
67
70
when (mockSQSSession .createMessage ()).thenReturn (new SQSMessage ());
68
71
Message message = mockSQSSession .createMessage ();
69
72
70
- message .setBooleanProperty (" myTrueBoolean" , true );
71
- message .setBooleanProperty (" myFalseBoolean" , false );
72
- message .setIntProperty (" myInteger" , 100 );
73
- message .setDoubleProperty (" myDouble" , 2.1768 );
74
- message .setFloatProperty (" myFloat" , 3.1457f );
75
- message .setLongProperty (" myLong" , 1290772974281L );
76
- message .setShortProperty (" myShort" , (short ) 123 );
77
- message .setByteProperty ("myByteProperty" , (byte ) 'a' );
78
- message .setStringProperty (" myString" , "StringValue" );
79
-
80
- Assert .assertTrue (message .propertyExists (" myTrueBoolean" ));
81
- Assert .assertEquals (message .getObjectProperty (" myTrueBoolean" ), true );
82
- Assert .assertEquals (message .getBooleanProperty (" myTrueBoolean" ), true );
73
+ message .setBooleanProperty (myTrueBoolean , true );
74
+ message .setBooleanProperty (myFalseBoolean , false );
75
+ message .setIntProperty (myInteger , 100 );
76
+ message .setDoubleProperty (myDouble , 2.1768 );
77
+ message .setFloatProperty (myFloat , 3.1457f );
78
+ message .setLongProperty (myLong , 1290772974281L );
79
+ message .setShortProperty (myShort , (short ) 123 );
80
+ message .setByteProperty (myByte , (byte ) 'a' );
81
+ message .setStringProperty (myString , "StringValue" );
82
+
83
+ Assert .assertTrue (message .propertyExists (myTrueBoolean ));
84
+ Assert .assertEquals (message .getObjectProperty (myTrueBoolean ), true );
85
+ Assert .assertEquals (message .getBooleanProperty (myTrueBoolean ), true );
83
86
84
- Assert .assertTrue (message .propertyExists (" myFalseBoolean" ));
85
- Assert .assertEquals (message .getObjectProperty (" myFalseBoolean" ), false );
86
- Assert .assertEquals (message .getBooleanProperty (" myFalseBoolean" ), false );
87
+ Assert .assertTrue (message .propertyExists (myFalseBoolean ));
88
+ Assert .assertEquals (message .getObjectProperty (myFalseBoolean ), false );
89
+ Assert .assertEquals (message .getBooleanProperty (myFalseBoolean ), false );
87
90
88
- Assert .assertTrue (message .propertyExists (" myInteger" ));
89
- Assert .assertEquals (message .getObjectProperty (" myInteger" ), 100 );
90
- Assert .assertEquals (message .getIntProperty (" myInteger" ), 100 );
91
+ Assert .assertTrue (message .propertyExists (myInteger ));
92
+ Assert .assertEquals (message .getObjectProperty (myInteger ), 100 );
93
+ Assert .assertEquals (message .getIntProperty (myInteger ), 100 );
91
94
92
- Assert .assertTrue (message .propertyExists (" myDouble" ));
93
- Assert .assertEquals (message .getObjectProperty (" myDouble" ), 2.1768 );
94
- Assert .assertEquals (message .getDoubleProperty (" myDouble" ), 2.1768 );
95
+ Assert .assertTrue (message .propertyExists (myDouble ));
96
+ Assert .assertEquals (( double ) message .getObjectProperty (myDouble ), 2.1768 , 0 );
97
+ Assert .assertEquals (message .getDoubleProperty (myDouble ), 2.1768 , 0 );
95
98
96
- Assert .assertTrue (message .propertyExists (" myFloat" ));
97
- Assert .assertEquals (message .getObjectProperty (" myFloat" ), 3.1457f );
98
- Assert .assertEquals (message .getFloatProperty (" myFloat" ), 3.1457f );
99
+ Assert .assertTrue (message .propertyExists (myFloat ));
100
+ Assert .assertEquals (( float ) message .getObjectProperty (myFloat ), 3.1457f , 0 );
101
+ Assert .assertEquals (message .getFloatProperty (myFloat ), 3.1457f , 0 );
99
102
100
- Assert .assertTrue (message .propertyExists (" myLong" ));
101
- Assert .assertEquals (message .getObjectProperty (" myLong" ), 1290772974281L );
102
- Assert .assertEquals (message .getLongProperty (" myLong" ), 1290772974281L );
103
+ Assert .assertTrue (message .propertyExists (myLong ));
104
+ Assert .assertEquals (message .getObjectProperty (myLong ), 1290772974281L );
105
+ Assert .assertEquals (message .getLongProperty (myLong ), 1290772974281L );
103
106
104
- Assert .assertTrue (message .propertyExists (" myShort" ));
105
- Assert .assertEquals (message .getObjectProperty (" myShort" ), (short ) 123 );
106
- Assert .assertEquals (message .getShortProperty (" myShort" ), (short ) 123 );
107
+ Assert .assertTrue (message .propertyExists (myShort ));
108
+ Assert .assertEquals (message .getObjectProperty (myShort ), (short ) 123 );
109
+ Assert .assertEquals (message .getShortProperty (myShort ), (short ) 123 );
107
110
108
- Assert .assertTrue (message .propertyExists ("myByteProperty" ));
109
- Assert .assertEquals (message .getObjectProperty ("myByteProperty" ), (byte ) 'a' );
110
- Assert .assertEquals (message .getByteProperty ("myByteProperty" ), (byte ) 'a' );
111
+ Assert .assertTrue (message .propertyExists (myByte ));
112
+ Assert .assertEquals (message .getObjectProperty (myByte ), (byte ) 'a' );
113
+ Assert .assertEquals (message .getByteProperty (myByte ), (byte ) 'a' );
111
114
112
- Assert .assertTrue (message .propertyExists (" myString" ));
113
- Assert .assertEquals (message .getObjectProperty (" myString" ), "StringValue" );
114
- Assert .assertEquals (message .getStringProperty (" myString" ), "StringValue" );
115
+ Assert .assertTrue (message .propertyExists (myString ));
116
+ Assert .assertEquals (message .getObjectProperty (myString ), "StringValue" );
117
+ Assert .assertEquals (message .getStringProperty (myString ), "StringValue" );
115
118
116
119
// Validate property names
117
120
Set <String > propertyNamesSet = new HashSet <String >(Arrays .asList (
118
- " myTrueBoolean" ,
119
- " myFalseBoolean" ,
120
- " myInteger" ,
121
- " myDouble" ,
122
- " myFloat" ,
123
- " myLong" ,
124
- " myShort" ,
125
- "myByteProperty" ,
126
- " myString" ));
121
+ myTrueBoolean ,
122
+ myFalseBoolean ,
123
+ myInteger ,
124
+ myDouble ,
125
+ myFloat ,
126
+ myLong ,
127
+ myShort ,
128
+ myByte ,
129
+ myString ));
127
130
128
- Enumeration <String > propertyNames = message .getPropertyNames ();
131
+ @ SuppressWarnings ("unchecked" )
132
+ Enumeration <String > propertyNames = message .getPropertyNames ();
129
133
int counter = 0 ;
130
134
while (propertyNames .hasMoreElements ()) {
131
135
assertTrue (propertyNamesSet .contains (propertyNames .nextElement ()));
@@ -134,14 +138,9 @@ public void testProperty() throws JMSException {
134
138
assertEquals (propertyNamesSet .size (), counter );
135
139
136
140
message .clearProperties ();
137
- Assert .assertFalse (message .propertyExists ("myTrueBoolean" ));
138
- Assert .assertFalse (message .propertyExists ("myInteger" ));
139
- Assert .assertFalse (message .propertyExists ("myDouble" ));
140
- Assert .assertFalse (message .propertyExists ("myFloat" ));
141
- Assert .assertFalse (message .propertyExists ("myLong" ));
142
- Assert .assertFalse (message .propertyExists ("myShort" ));
143
- Assert .assertFalse (message .propertyExists ("myByteProperty" ));
144
- Assert .assertFalse (message .propertyExists ("myString" ));
141
+ for (String propName : propertyNamesSet ) {
142
+ Assert .assertFalse (message .propertyExists (propName ));
143
+ }
145
144
146
145
propertyNames = message .getPropertyNames ();
147
146
assertFalse (propertyNames .hasMoreElements ());
@@ -272,11 +271,22 @@ public void testSQSMessageAttributeToProperty() throws JMSException {
272
271
273
272
Acknowledger ack = mock (Acknowledger .class );
274
273
274
+ final ByteBuffer binaryValue = ByteBuffer .wrap (new byte [] {(byte )0xDE , (byte )0xAD , (byte )0xBE , (byte )0xEF });
275
+
275
276
Map <String ,String > systemAttributes = new HashMap <String , String >();
276
277
systemAttributes .put (APPROXIMATE_RECEIVE_COUNT , "100" );
277
278
278
279
Map <String , MessageAttributeValue > messageAttributes = new HashMap <String , MessageAttributeValue >();
279
280
281
+ /* SQS Supports Logical Data Types: String, Number, and Binary so we'd best know what to do with those at the very minimum! */
282
+ messageAttributes .put (myNumber , new MessageAttributeValue ()
283
+ .withDataType (SQSMessagingClientConstants .NUMBER )
284
+ .withStringValue ("4" ));
285
+ messageAttributes .put (myBinary , new MessageAttributeValue ()
286
+ .withDataType (SQSMessagingClientConstants .BINARY )
287
+ .withBinaryValue (binaryValue ));
288
+
289
+
280
290
messageAttributes .put (myTrueBoolean , new MessageAttributeValue ()
281
291
.withDataType (SQSMessagingClientConstants .BOOLEAN )
282
292
.withStringValue ("1" ));
@@ -312,6 +322,7 @@ public void testSQSMessageAttributeToProperty() throws JMSException {
312
322
messageAttributes .put (myString , new MessageAttributeValue ()
313
323
.withDataType (SQSMessagingClientConstants .STRING )
314
324
.withStringValue ("StringValue" ));
325
+
315
326
316
327
com .amazonaws .services .sqs .model .Message sqsMessage = new com .amazonaws .services .sqs .model .Message ()
317
328
.withMessageAttributes (messageAttributes )
@@ -321,6 +332,14 @@ public void testSQSMessageAttributeToProperty() throws JMSException {
321
332
322
333
SQSMessage message = new SQSMessage (ack , "QueueUrl" , sqsMessage );
323
334
335
+ // SQS "Number" data type must use StringValue, may be a floating point number
336
+ Assert .assertTrue (message .propertyExists (myNumber ));
337
+ Assert .assertEquals (4.0 , (double )message .getObjectProperty (myNumber ), 0 );
338
+ Assert .assertEquals (4.0 , message .getDoubleProperty (myNumber ), 0 );
339
+
340
+ Assert .assertTrue (message .propertyExists (myBinary ));
341
+ Assert .assertEquals (binaryValue , message .getObjectProperty (myBinary ));
342
+
324
343
Assert .assertTrue (message .propertyExists (myTrueBoolean ));
325
344
Assert .assertEquals (message .getObjectProperty (myTrueBoolean ), true );
326
345
Assert .assertEquals (message .getBooleanProperty (myTrueBoolean ), true );
@@ -334,12 +353,12 @@ public void testSQSMessageAttributeToProperty() throws JMSException {
334
353
Assert .assertEquals (message .getIntProperty (myInteger ), 100 );
335
354
336
355
Assert .assertTrue (message .propertyExists (myDouble ));
337
- Assert .assertEquals (message .getObjectProperty (myDouble ), 2.1768 );
338
- Assert .assertEquals (message .getDoubleProperty (myDouble ), 2.1768 );
356
+ Assert .assertEquals (( double ) message .getObjectProperty (myDouble ), 2.1768 , 0 );
357
+ Assert .assertEquals (message .getDoubleProperty (myDouble ), 2.1768 , 0 );
339
358
340
359
Assert .assertTrue (message .propertyExists (myFloat ));
341
- Assert .assertEquals (message .getObjectProperty (myFloat ), 3.1457f );
342
- Assert .assertEquals (message .getFloatProperty (myFloat ), 3.1457f );
360
+ Assert .assertEquals (( float ) message .getObjectProperty (myFloat ), 3.1457f , 0 );
361
+ Assert .assertEquals (message .getFloatProperty (myFloat ), 3.1457f , 0 );
343
362
344
363
Assert .assertTrue (message .propertyExists (myLong ));
345
364
Assert .assertEquals (message .getObjectProperty (myLong ), 1290772974281L );
@@ -360,6 +379,8 @@ public void testSQSMessageAttributeToProperty() throws JMSException {
360
379
361
380
// Validate property names
362
381
Set <String > propertyNamesSet = new HashSet <String >(Arrays .asList (
382
+ myBinary ,
383
+ myNumber ,
363
384
myTrueBoolean ,
364
385
myFalseBoolean ,
365
386
myInteger ,
@@ -374,7 +395,8 @@ public void testSQSMessageAttributeToProperty() throws JMSException {
374
395
Enumeration <String > propertyNames = message .getPropertyNames ();
375
396
int counter = 0 ;
376
397
while (propertyNames .hasMoreElements ()) {
377
- assertTrue (propertyNamesSet .contains (propertyNames .nextElement ()));
398
+ String propName = propertyNames .nextElement ();
399
+ Assert .assertTrue ("Found Unknown Property: " + propName , propertyNamesSet .contains (propName ));
378
400
counter ++;
379
401
}
380
402
assertEquals (propertyNamesSet .size (), counter );
0 commit comments