From c5dc4d3328adec72fe2a21a6d67ce0a1070eaeb9 Mon Sep 17 00:00:00 2001 From: Matt Roberts <32040584+matrober-uk@users.noreply.github.com> Date: Sat, 5 Feb 2022 19:26:02 +0000 Subject: [PATCH] Prevent trimming of whitespace on receive - #45 --- mqjms/ConsumerImpl.go | 2 +- textmessage_test.go | 65 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/mqjms/ConsumerImpl.go b/mqjms/ConsumerImpl.go index b4af89a..b83b0c8 100644 --- a/mqjms/ConsumerImpl.go +++ b/mqjms/ConsumerImpl.go @@ -107,7 +107,7 @@ func (consumer ConsumerImpl) receiveInternal(gmo *ibmmq.MQGMO) (jms20subset.Mess var msgBodyStr *string if datalen > 0 { - strContent := strings.TrimSpace(string(buffer[:datalen])) + strContent := string(buffer[:datalen]) msgBodyStr = &strContent } diff --git a/textmessage_test.go b/textmessage_test.go index b070ce1..4e9c8d2 100644 --- a/textmessage_test.go +++ b/textmessage_test.go @@ -137,3 +137,68 @@ func TestTextMessageEmptyBody(t *testing.T) { } } + +/* + * Test the behaviour for send/receive of a text message with a body that starts + * and ends with spaces. Reported issue that the trailing spaces are trimmed from + * the returned message. + */ +func TestTextMessageWithSpaces(t *testing.T) { + + // Loads CF parameters from connection_info.json and applicationApiKey.json in the Downloads directory + cf, cfErr := mqjms.CreateConnectionFactoryFromDefaultJSONFiles() + assert.Nil(t, cfErr) + + // Creates a connection to the queue manager, using defer to close it automatically + // at the end of the function (if it was created successfully) + context, ctxErr := cf.CreateContext() + assert.Nil(t, ctxErr) + if context != nil { + defer context.Close() + } + + // Create a TextMessage + msgText := " This is some text with spaces before and after " + msg := context.CreateTextMessageWithString(msgText) + + // Now send the message and get it back again. + queue := context.CreateQueue("DEV.QUEUE.1") + producer := context.CreateProducer().SetTimeToLive(5000) + errSend := producer.Send(queue, msg) + assert.Nil(t, errSend) + + consumer, errCons := context.CreateConsumer(queue) + assert.Nil(t, errCons) + if consumer != nil { + defer consumer.Close() + } + + rcvMsg, errRvc := consumer.ReceiveNoWait() + assert.Nil(t, errRvc) + assert.NotNil(t, rcvMsg) + + switch msg := rcvMsg.(type) { + case jms20subset.TextMessage: + assert.Equal(t, msgText, *msg.GetText()) + default: + assert.Fail(t, "Got something other than a text message") + } + + // Create a TextMessage consisting of all spaces. + msgText2 := " " + msg2 := context.CreateTextMessageWithString(msgText2) + errSend = producer.Send(queue, msg2) + assert.Nil(t, errSend) + + rcvMsg2, errRvc2 := consumer.ReceiveNoWait() + assert.Nil(t, errRvc2) + assert.NotNil(t, rcvMsg2) + + switch msg := rcvMsg2.(type) { + case jms20subset.TextMessage: + assert.Equal(t, msgText2, *msg.GetText()) + default: + assert.Fail(t, "Got something other than a text message") + } + +}