@@ -28,6 +28,9 @@ import (
28
28
* https://github.com/eclipse-ee4j/messaging/blob/master/api/src/main/java/jakarta/jms/Message.java#L1119
29
29
*
30
30
* JMS: PropertyExists, ClearProperties, GetPropertyNames
31
+ * boolean propertyExists(String name) throws JMSException;
32
+ * void clearProperties() throws JMSException;
33
+ * Enumeration getPropertyNames() throws JMSException;
31
34
*/
32
35
33
36
/*
@@ -116,6 +119,313 @@ func TestStringPropertyTextMsg(t *testing.T) {
116
119
117
120
}
118
121
122
+ /*
123
+ * Test the Exists and GetNames functions for message properties
124
+ */
125
+ func TestPropertyExistsGetNames (t * testing.T ) {
126
+
127
+ // Loads CF parameters from connection_info.json and applicationApiKey.json in the Downloads directory
128
+ cf , cfErr := mqjms .CreateConnectionFactoryFromDefaultJSONFiles ()
129
+ assert .Nil (t , cfErr )
130
+
131
+ // Creates a connection to the queue manager, using defer to close it automatically
132
+ // at the end of the function (if it was created successfully)
133
+ context , ctxErr := cf .CreateContext ()
134
+ assert .Nil (t , ctxErr )
135
+ if context != nil {
136
+ defer context .Close ()
137
+ }
138
+
139
+ // Create a TextMessage and check that we can populate it
140
+ msgBody := "ExistsGetNames-test"
141
+ txtMsg := context .CreateTextMessage ()
142
+ txtMsg .SetText (msgBody )
143
+
144
+ propName := "myProperty"
145
+ propValue := "myValue"
146
+
147
+ // Test the empty value before the property is set.
148
+ assert .Nil (t , txtMsg .GetStringProperty (propName ))
149
+ propExists , propErr := txtMsg .PropertyExists (propName )
150
+ assert .Nil (t , propErr )
151
+ assert .False (t , propExists )
152
+ allPropNames , getNamesErr := txtMsg .GetPropertyNames ()
153
+ assert .Nil (t , getNamesErr )
154
+ assert .Equal (t , 0 , len (allPropNames ))
155
+
156
+ // Test the ability to set properties before the message is sent.
157
+ retErr := txtMsg .SetStringProperty (propName , & propValue )
158
+ assert .Nil (t , retErr )
159
+ assert .Equal (t , propValue , * txtMsg .GetStringProperty (propName ))
160
+ propExists , propErr = txtMsg .PropertyExists (propName )
161
+ assert .Nil (t , propErr )
162
+ assert .True (t , propExists ) // now exists
163
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
164
+ assert .Nil (t , getNamesErr )
165
+ assert .Equal (t , 1 , len (allPropNames ))
166
+ assert .Equal (t , propName , allPropNames [0 ])
167
+
168
+ propName2 := "myPropertyTwo"
169
+ propValue2 := "myValueTwo"
170
+ retErr = txtMsg .SetStringProperty (propName2 , & propValue2 )
171
+ assert .Nil (t , retErr )
172
+ assert .Equal (t , propValue2 , * txtMsg .GetStringProperty (propName2 ))
173
+ propExists , propErr = txtMsg .PropertyExists (propName2 )
174
+ assert .Nil (t , propErr )
175
+ assert .True (t , propExists ) // now exists
176
+ // Check the first property again to be sure
177
+ propExists , propErr = txtMsg .PropertyExists (propName )
178
+ assert .Nil (t , propErr )
179
+ assert .True (t , propExists ) // now exists
180
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
181
+ assert .Nil (t , getNamesErr )
182
+ assert .Equal (t , 2 , len (allPropNames ))
183
+ assert .Equal (t , propName , allPropNames [0 ])
184
+ assert .Equal (t , propName2 , allPropNames [1 ])
185
+
186
+ // Set a property then try to unset it by setting to nil
187
+ unsetPropName := "mySendThenRemovedString"
188
+ unsetPropValue := "someValueThatWillBeOverwritten"
189
+ retErr = txtMsg .SetStringProperty (unsetPropName , & unsetPropValue )
190
+ assert .Nil (t , retErr )
191
+ assert .Equal (t , unsetPropValue , * txtMsg .GetStringProperty (unsetPropName ))
192
+ propExists , propErr = txtMsg .PropertyExists (unsetPropName )
193
+ assert .Nil (t , propErr )
194
+ assert .True (t , propExists )
195
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
196
+ assert .Nil (t , getNamesErr )
197
+ assert .Equal (t , 3 , len (allPropNames ))
198
+ retErr = txtMsg .SetStringProperty (unsetPropName , nil )
199
+ assert .Nil (t , retErr )
200
+ assert .Nil (t , txtMsg .GetStringProperty (unsetPropName ))
201
+ propExists , propErr = txtMsg .PropertyExists (unsetPropName )
202
+ assert .Nil (t , propErr )
203
+ assert .False (t , propExists )
204
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
205
+ assert .Nil (t , getNamesErr )
206
+ assert .Equal (t , 2 , len (allPropNames ))
207
+
208
+ // Set up objects for send/receive
209
+ queue := context .CreateQueue ("DEV.QUEUE.1" )
210
+ consumer , errCons := context .CreateConsumer (queue )
211
+ if consumer != nil {
212
+ defer consumer .Close ()
213
+ }
214
+ assert .Nil (t , errCons )
215
+
216
+ // Now send the message and get it back again, to check that it roundtripped.
217
+ errSend := context .CreateProducer ().SetTimeToLive (10000 ).Send (queue , txtMsg )
218
+ assert .Nil (t , errSend )
219
+
220
+ rcvMsg , errRvc := consumer .ReceiveNoWait ()
221
+ assert .Nil (t , errRvc )
222
+ assert .NotNil (t , rcvMsg )
223
+
224
+ switch msg := rcvMsg .(type ) {
225
+ case jms20subset.TextMessage :
226
+ assert .Equal (t , msgBody , * msg .GetText ())
227
+ default :
228
+ assert .Fail (t , "Got something other than a text message" )
229
+ }
230
+
231
+ // Check property is available on received message.
232
+ propExists , propErr = rcvMsg .PropertyExists (propName )
233
+ assert .Nil (t , propErr )
234
+ assert .True (t , propExists ) // now exists
235
+
236
+ propExists , propErr = rcvMsg .PropertyExists (propName2 )
237
+ assert .Nil (t , propErr )
238
+ assert .True (t , propExists ) // now exists
239
+
240
+ // Check GetPropertyNames
241
+ allPropNames , getNamesErr = rcvMsg .GetPropertyNames ()
242
+ assert .Nil (t , getNamesErr )
243
+ assert .Equal (t , 2 , len (allPropNames ))
244
+ assert .Equal (t , propName , allPropNames [0 ])
245
+ assert .Equal (t , propName2 , allPropNames [1 ])
246
+
247
+ // Properties that are not set should return nil
248
+ nonExistentPropName := "nonExistentProperty"
249
+ assert .Nil (t , rcvMsg .GetStringProperty (nonExistentPropName ))
250
+ propExists , propErr = rcvMsg .PropertyExists (nonExistentPropName )
251
+ assert .Nil (t , propErr )
252
+ assert .False (t , propExists )
253
+
254
+ // Check for the unset property
255
+ propExists , propErr = rcvMsg .PropertyExists (unsetPropName )
256
+ assert .Nil (t , propErr )
257
+ assert .False (t , propExists )
258
+
259
+ }
260
+
261
+ /*
262
+ * Test the ClearProperties function for message properties
263
+ */
264
+ func TestPropertyClearProperties (t * testing.T ) {
265
+
266
+ // Loads CF parameters from connection_info.json and applicationApiKey.json in the Downloads directory
267
+ cf , cfErr := mqjms .CreateConnectionFactoryFromDefaultJSONFiles ()
268
+ assert .Nil (t , cfErr )
269
+
270
+ // Creates a connection to the queue manager, using defer to close it automatically
271
+ // at the end of the function (if it was created successfully)
272
+ context , ctxErr := cf .CreateContext ()
273
+ assert .Nil (t , ctxErr )
274
+ if context != nil {
275
+ defer context .Close ()
276
+ }
277
+
278
+ // Create a TextMessage and check that we can populate it
279
+ msgBody := "ExistsClearProperties-test"
280
+ txtMsg := context .CreateTextMessage ()
281
+ txtMsg .SetText (msgBody )
282
+
283
+ propName := "myProperty"
284
+ propValue := "myValue"
285
+
286
+ // Test the ability to set properties before the message is sent.
287
+ retErr := txtMsg .SetStringProperty (propName , & propValue )
288
+ assert .Nil (t , retErr )
289
+ assert .Equal (t , propValue , * txtMsg .GetStringProperty (propName ))
290
+ propExists , propErr := txtMsg .PropertyExists (propName )
291
+ assert .Nil (t , propErr )
292
+ assert .True (t , propExists ) // now exists
293
+ allPropNames , getNamesErr := txtMsg .GetPropertyNames ()
294
+ assert .Nil (t , getNamesErr )
295
+ assert .Equal (t , 1 , len (allPropNames ))
296
+ assert .Equal (t , propName , allPropNames [0 ])
297
+
298
+ clearErr := txtMsg .ClearProperties ()
299
+ assert .Nil (t , clearErr )
300
+ assert .Nil (t , txtMsg .GetStringProperty (propName ))
301
+ propExists , propErr = txtMsg .PropertyExists (propName )
302
+ assert .Nil (t , propErr )
303
+ assert .False (t , propExists )
304
+
305
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
306
+ assert .Nil (t , getNamesErr )
307
+ assert .Equal (t , 0 , len (allPropNames ))
308
+
309
+ propName2 := "myPropertyTwo"
310
+ propValue2 := "myValueTwo"
311
+
312
+ // Set multiple properties
313
+ retErr = txtMsg .SetStringProperty (propName , & propValue )
314
+ assert .Nil (t , retErr )
315
+ assert .Equal (t , propValue , * txtMsg .GetStringProperty (propName ))
316
+ retErr = txtMsg .SetStringProperty (propName2 , & propValue2 )
317
+ assert .Nil (t , retErr )
318
+ assert .Equal (t , propValue2 , * txtMsg .GetStringProperty (propName2 ))
319
+ propExists , propErr = txtMsg .PropertyExists (propName2 )
320
+ assert .Nil (t , propErr )
321
+ assert .True (t , propExists ) // now exists
322
+ // Check the first property again to be sure
323
+ propExists , propErr = txtMsg .PropertyExists (propName )
324
+ assert .Nil (t , propErr )
325
+ assert .True (t , propExists ) // now exists
326
+
327
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
328
+ assert .Nil (t , getNamesErr )
329
+ assert .Equal (t , 2 , len (allPropNames ))
330
+
331
+ // Set a property then try to unset it by setting to nil
332
+ unsetPropName := "mySendThenRemovedString"
333
+ unsetPropValue := "someValueThatWillBeOverwritten"
334
+ retErr = txtMsg .SetStringProperty (unsetPropName , & unsetPropValue )
335
+ assert .Nil (t , retErr )
336
+ assert .Equal (t , unsetPropValue , * txtMsg .GetStringProperty (unsetPropName ))
337
+ propExists , propErr = txtMsg .PropertyExists (unsetPropName )
338
+ assert .Nil (t , propErr )
339
+ assert .True (t , propExists )
340
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
341
+ assert .Nil (t , getNamesErr )
342
+ assert .Equal (t , 3 , len (allPropNames ))
343
+ assert .Equal (t , propName , allPropNames [0 ])
344
+ assert .Equal (t , propName2 , allPropNames [1 ])
345
+ assert .Equal (t , unsetPropName , allPropNames [2 ])
346
+ retErr = txtMsg .SetStringProperty (unsetPropName , nil )
347
+ assert .Nil (t , retErr )
348
+ assert .Nil (t , txtMsg .GetStringProperty (unsetPropName ))
349
+ propExists , propErr = txtMsg .PropertyExists (unsetPropName )
350
+ assert .Nil (t , propErr )
351
+ assert .False (t , propExists )
352
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
353
+ assert .Nil (t , getNamesErr )
354
+ assert .Equal (t , 2 , len (allPropNames ))
355
+ assert .Equal (t , propName , allPropNames [0 ])
356
+ assert .Equal (t , propName2 , allPropNames [1 ])
357
+
358
+ clearErr = txtMsg .ClearProperties ()
359
+ assert .Nil (t , clearErr )
360
+ assert .Nil (t , txtMsg .GetStringProperty (propName ))
361
+ propExists , propErr = txtMsg .PropertyExists (propName )
362
+ assert .Nil (t , propErr )
363
+ assert .False (t , propExists )
364
+ allPropNames , getNamesErr = txtMsg .GetPropertyNames ()
365
+ assert .Nil (t , getNamesErr )
366
+ assert .Equal (t , 0 , len (allPropNames ))
367
+
368
+ // Set up objects for send/receive
369
+ queue := context .CreateQueue ("DEV.QUEUE.1" )
370
+ consumer , errCons := context .CreateConsumer (queue )
371
+ if consumer != nil {
372
+ defer consumer .Close ()
373
+ }
374
+ assert .Nil (t , errCons )
375
+
376
+ // Now send the message and get it back again, to check that it roundtripped.
377
+ errSend := context .CreateProducer ().SetTimeToLive (10000 ).Send (queue , txtMsg )
378
+ assert .Nil (t , errSend )
379
+
380
+ rcvMsg , errRvc := consumer .ReceiveNoWait ()
381
+ assert .Nil (t , errRvc )
382
+ assert .NotNil (t , rcvMsg )
383
+
384
+ switch msg := rcvMsg .(type ) {
385
+ case jms20subset.TextMessage :
386
+ assert .Equal (t , msgBody , * msg .GetText ())
387
+ default :
388
+ assert .Fail (t , "Got something other than a text message" )
389
+ }
390
+
391
+ // Check property is available on received message.
392
+ propExists , propErr = rcvMsg .PropertyExists (propName )
393
+ assert .Nil (t , propErr )
394
+ assert .False (t , propExists )
395
+
396
+ propExists , propErr = rcvMsg .PropertyExists (propName2 )
397
+ assert .Nil (t , propErr )
398
+ assert .False (t , propExists )
399
+
400
+ allPropNames , getNamesErr = rcvMsg .GetPropertyNames ()
401
+ assert .Nil (t , getNamesErr )
402
+ assert .Equal (t , 0 , len (allPropNames ))
403
+
404
+ // Properties that are not set should return nil
405
+ nonExistentPropName := "nonExistentProperty"
406
+ assert .Nil (t , rcvMsg .GetStringProperty (nonExistentPropName ))
407
+ propExists , propErr = rcvMsg .PropertyExists (nonExistentPropName )
408
+ assert .Nil (t , propErr )
409
+ assert .False (t , propExists )
410
+
411
+ // Check for the unset property
412
+ propExists , propErr = rcvMsg .PropertyExists (unsetPropName )
413
+ assert .Nil (t , propErr )
414
+ assert .False (t , propExists )
415
+
416
+ // Finally try clearing everything on the received message
417
+ clearErr = rcvMsg .ClearProperties ()
418
+ assert .Nil (t , clearErr )
419
+ assert .Nil (t , rcvMsg .GetStringProperty (propName ))
420
+ propExists , propErr = rcvMsg .PropertyExists (propName )
421
+ assert .Nil (t , propErr )
422
+ assert .False (t , propExists )
423
+ allPropNames , getNamesErr = rcvMsg .GetPropertyNames ()
424
+ assert .Nil (t , getNamesErr )
425
+ assert .Equal (t , 0 , len (allPropNames ))
426
+
427
+ }
428
+
119
429
/*
120
430
* Test send and receive of a text message with a string property and no content.
121
431
*/
0 commit comments