@@ -1088,3 +1088,212 @@ func TestPropertyBytesMsg(t *testing.T) {
10881088 assert .Equal (t , 5 , len (allPropNames ))
10891089
10901090}
1091+
1092+ /*
1093+ * Test the conversion between different message property data types.
1094+ */
1095+ func TestPropertyTypesStringConversion (t * testing.T ) {
1096+
1097+ // Loads CF parameters from connection_info.json and applicationApiKey.json in the Downloads directory
1098+ cf , cfErr := mqjms .CreateConnectionFactoryFromDefaultJSONFiles ()
1099+ assert .Nil (t , cfErr )
1100+
1101+ // Creates a connection to the queue manager, using defer to close it automatically
1102+ // at the end of the function (if it was created successfully)
1103+ context , ctxErr := cf .CreateContext ()
1104+ assert .Nil (t , ctxErr )
1105+ if context != nil {
1106+ defer context .Close ()
1107+ }
1108+
1109+ msg := context .CreateTextMessage ()
1110+
1111+ unsetPropName := "thisPropertyIsNotSet"
1112+
1113+ // Set up some different string properties
1114+ stringOfStringPropName := "stringOfString"
1115+ stringOfStringValue := "myValue"
1116+ stringOfEmptyStrPropName := "stringOfEmptyStr"
1117+ stringOfEmptyValue := ""
1118+
1119+ stringOfIntPropName := "stringOfInt"
1120+ stringOfIntValue := "245"
1121+ stringOfIntPropName2 := "stringOfInt2"
1122+ stringOfIntValue2 := "-34678"
1123+
1124+ stringOfBoolPropName := "stringOfBool"
1125+ stringOfBoolValue := "true"
1126+ stringOfBoolPropName2 := "stringOfBool2"
1127+ stringOfBoolValue2 := "false"
1128+
1129+ stringOfDoublePropName := "stringOfDouble"
1130+ stringOfDoubleValue := "2.718527453"
1131+ stringOfDoublePropName2 := "stringOfDouble2"
1132+ stringOfDoubleValue2 := "-25675752.212345678"
1133+
1134+ msg .SetStringProperty (stringOfStringPropName , & stringOfStringValue )
1135+ msg .SetStringProperty (stringOfEmptyStrPropName , & stringOfEmptyValue )
1136+ msg .SetStringProperty (stringOfIntPropName , & stringOfIntValue )
1137+ msg .SetStringProperty (stringOfIntPropName2 , & stringOfIntValue2 )
1138+ msg .SetStringProperty (stringOfBoolPropName , & stringOfBoolValue )
1139+ msg .SetStringProperty (stringOfBoolPropName2 , & stringOfBoolValue2 )
1140+ msg .SetStringProperty (stringOfDoublePropName , & stringOfDoubleValue )
1141+ msg .SetStringProperty (stringOfDoublePropName2 , & stringOfDoubleValue2 )
1142+
1143+ // Now an int property
1144+ intPropName := "myIntProperty"
1145+ intPropValue := 553786
1146+ retErr := msg .SetIntProperty (intPropName , intPropValue )
1147+ assert .Nil (t , retErr )
1148+
1149+ // Now a double property
1150+ doublePropName := "myDoubleProperty"
1151+ doublePropValue := float64 (3.1415926535 )
1152+ retErr = msg .SetDoubleProperty (doublePropName , doublePropValue )
1153+ assert .Nil (t , retErr )
1154+
1155+ // Now a bool property
1156+ boolPropName := "myBoolProperty"
1157+ boolPropValue := true
1158+ retErr = msg .SetBooleanProperty (boolPropName , boolPropValue )
1159+ assert .Nil (t , retErr )
1160+
1161+ // Set up objects for send/receive
1162+ queue := context .CreateQueue ("DEV.QUEUE.1" )
1163+ consumer , errCons := context .CreateConsumer (queue )
1164+ if consumer != nil {
1165+ defer consumer .Close ()
1166+ }
1167+ assert .Nil (t , errCons )
1168+
1169+ // Now send the message and get it back again, to check that it roundtripped.
1170+ errSend := context .CreateProducer ().SetTimeToLive (10000 ).Send (queue , msg )
1171+ assert .Nil (t , errSend )
1172+
1173+ rcvMsg , errRvc := consumer .ReceiveNoWait ()
1174+ assert .Nil (t , errRvc )
1175+ assert .NotNil (t , rcvMsg )
1176+
1177+ // Check string properties were set correctly
1178+ gotStringPropValue , gotStringErr := rcvMsg .GetStringProperty (stringOfStringPropName )
1179+ gotEmptyStrPropValue , gotEmptyStrErr := rcvMsg .GetStringProperty (stringOfEmptyStrPropName )
1180+ gotIntPropValue , gotIntErr := rcvMsg .GetStringProperty (stringOfIntPropName )
1181+ gotIntPropValue2 , gotIntErr2 := rcvMsg .GetStringProperty (stringOfIntPropName2 )
1182+ gotBoolPropValue , gotBoolErr := rcvMsg .GetStringProperty (stringOfBoolPropName )
1183+ gotBoolPropValue2 , gotBoolErr2 := rcvMsg .GetStringProperty (stringOfBoolPropName2 )
1184+ gotDoublePropValue , gotDoubleErr := rcvMsg .GetStringProperty (stringOfDoublePropName )
1185+ gotDoublePropValue2 , gotDoubleErr2 := rcvMsg .GetStringProperty (stringOfDoublePropName2 )
1186+ gotUnsetPropValue , gotUnsetErr := rcvMsg .GetStringProperty (unsetPropName )
1187+ assert .Nil (t , gotStringErr )
1188+ assert .Nil (t , gotEmptyStrErr )
1189+ assert .Nil (t , gotIntErr )
1190+ assert .Nil (t , gotIntErr2 )
1191+ assert .Nil (t , gotBoolErr )
1192+ assert .Nil (t , gotBoolErr2 )
1193+ assert .Nil (t , gotDoubleErr )
1194+ assert .Nil (t , gotDoubleErr2 )
1195+ assert .Nil (t , gotUnsetErr )
1196+ assert .Equal (t , stringOfStringValue , * gotStringPropValue )
1197+ assert .Equal (t , stringOfEmptyValue , * gotEmptyStrPropValue )
1198+ assert .Equal (t , stringOfIntValue , * gotIntPropValue )
1199+ assert .Equal (t , stringOfIntValue2 , * gotIntPropValue2 )
1200+ assert .Equal (t , stringOfBoolValue , * gotBoolPropValue )
1201+ assert .Equal (t , stringOfBoolValue2 , * gotBoolPropValue2 )
1202+ assert .Equal (t , stringOfDoubleValue , * gotDoublePropValue )
1203+ assert .Equal (t , stringOfDoubleValue2 , * gotDoublePropValue2 )
1204+ assert .Nil (t , gotUnsetPropValue )
1205+
1206+ // Get the string properties back as int.
1207+ gotStrAsIntValue , gotStringErr := rcvMsg .GetIntProperty (stringOfStringPropName )
1208+ gotEmptyStrAsIntValue , gotEmptyStrErr := rcvMsg .GetIntProperty (stringOfEmptyStrPropName )
1209+ gotStrIntAsIntValue , gotIntErr := rcvMsg .GetIntProperty (stringOfIntPropName )
1210+ gotStrIntAsIntValue2 , gotIntErr2 := rcvMsg .GetIntProperty (stringOfIntPropName2 )
1211+ gotStrBoolAsIntValue , gotBoolErr := rcvMsg .GetIntProperty (stringOfBoolPropName )
1212+ gotStrBoolAsIntValue2 , gotBoolErr2 := rcvMsg .GetIntProperty (stringOfBoolPropName2 )
1213+ gotStrDoubleAsIntValue , gotDoubleErr := rcvMsg .GetIntProperty (stringOfDoublePropName )
1214+ gotStrDoubleAsIntValue2 , gotDoubleErr2 := rcvMsg .GetIntProperty (stringOfDoublePropName2 )
1215+ gotUnsetAsIntValue , gotUnsetErr := rcvMsg .GetIntProperty (unsetPropName )
1216+ assert .NotNil (t , gotStringErr )
1217+ assert .Equal (t , "1055" , gotStringErr .GetErrorCode ())
1218+ assert .Equal (t , "MQJMS_E_BAD_TYPE" , gotStringErr .GetReason ())
1219+ assert .NotNil (t , gotEmptyStrErr )
1220+ assert .Nil (t , gotIntErr )
1221+ assert .Nil (t , gotIntErr2 )
1222+ assert .NotNil (t , gotBoolErr )
1223+ assert .NotNil (t , gotBoolErr2 )
1224+ assert .NotNil (t , gotDoubleErr )
1225+ assert .NotNil (t , gotDoubleErr2 )
1226+ assert .Nil (t , gotUnsetErr )
1227+ assert .Equal (t , 0 , gotStrAsIntValue ) // non-nil err
1228+ assert .Equal (t , 0 , gotEmptyStrAsIntValue ) // non-nil err
1229+ assert .Equal (t , 245 , gotStrIntAsIntValue )
1230+ assert .Equal (t , - 34678 , gotStrIntAsIntValue2 )
1231+ assert .Equal (t , 0 , gotStrBoolAsIntValue ) // non-nil err
1232+ assert .Equal (t , 0 , gotStrBoolAsIntValue2 ) // non-nil err
1233+ assert .Equal (t , 0 , gotStrDoubleAsIntValue ) // non-nil err
1234+ assert .Equal (t , 0 , gotStrDoubleAsIntValue2 ) // non-nil err
1235+ assert .Equal (t , 0 , gotUnsetAsIntValue )
1236+
1237+ // Get the string properties back as bool.
1238+ gotStrAsBoolValue , gotStringErr := rcvMsg .GetBooleanProperty (stringOfStringPropName )
1239+ gotEmptyStrAsBoolValue , gotEmptyStrErr := rcvMsg .GetBooleanProperty (stringOfEmptyStrPropName )
1240+ gotStrIntAsBoolValue , gotIntErr := rcvMsg .GetBooleanProperty (stringOfIntPropName )
1241+ gotStrIntAsBoolValue2 , gotIntErr2 := rcvMsg .GetBooleanProperty (stringOfIntPropName2 )
1242+ gotStrBoolAsBoolValue , gotBoolErr := rcvMsg .GetBooleanProperty (stringOfBoolPropName )
1243+ gotStrBoolAsBoolValue2 , gotBoolErr2 := rcvMsg .GetBooleanProperty (stringOfBoolPropName2 )
1244+ gotStrDoubleAsBoolValue , gotDoubleErr := rcvMsg .GetBooleanProperty (stringOfDoublePropName )
1245+ gotStrDoubleAsBoolValue2 , gotDoubleErr2 := rcvMsg .GetBooleanProperty (stringOfDoublePropName2 )
1246+ gotUnsetAsBoolValue , gotUnsetErr := rcvMsg .GetBooleanProperty (unsetPropName )
1247+ assert .NotNil (t , gotStringErr )
1248+ assert .Equal (t , "1055" , gotStringErr .GetErrorCode ())
1249+ assert .Equal (t , "MQJMS_E_BAD_TYPE" , gotStringErr .GetReason ())
1250+ assert .NotNil (t , gotEmptyStrErr )
1251+ assert .NotNil (t , gotIntErr )
1252+ assert .NotNil (t , gotIntErr2 )
1253+ assert .Nil (t , gotBoolErr )
1254+ assert .Nil (t , gotBoolErr2 )
1255+ assert .NotNil (t , gotDoubleErr )
1256+ assert .NotNil (t , gotDoubleErr2 )
1257+ assert .Nil (t , gotUnsetErr )
1258+ assert .Equal (t , false , gotStrAsBoolValue ) // non-nil err
1259+ assert .Equal (t , false , gotEmptyStrAsBoolValue ) // non-nil err
1260+ assert .Equal (t , false , gotStrIntAsBoolValue ) // non-nil err
1261+ assert .Equal (t , false , gotStrIntAsBoolValue2 ) // non-nil err
1262+ assert .Equal (t , true , gotStrBoolAsBoolValue )
1263+ assert .Equal (t , false , gotStrBoolAsBoolValue2 )
1264+ assert .Equal (t , false , gotStrDoubleAsBoolValue ) // non-nil err
1265+ assert .Equal (t , false , gotStrDoubleAsBoolValue2 ) // non-nil err
1266+ assert .Equal (t , false , gotUnsetAsBoolValue )
1267+
1268+ // Get the string properties back as double.
1269+ gotStrAsDoubleValue , gotStringErr := rcvMsg .GetDoubleProperty (stringOfStringPropName )
1270+ gotEmptyStrAsDoubleValue , gotEmptyStrErr := rcvMsg .GetDoubleProperty (stringOfEmptyStrPropName )
1271+ gotStrIntAsDoubleValue , gotIntErr := rcvMsg .GetDoubleProperty (stringOfIntPropName )
1272+ gotStrIntAsDoubleValue2 , gotIntErr2 := rcvMsg .GetDoubleProperty (stringOfIntPropName2 )
1273+ gotStrBoolAsDoubleValue , gotBoolErr := rcvMsg .GetDoubleProperty (stringOfBoolPropName )
1274+ gotStrBoolAsDoubleValue2 , gotBoolErr2 := rcvMsg .GetDoubleProperty (stringOfBoolPropName2 )
1275+ gotStrDoubleAsDoubleValue , gotDoubleErr := rcvMsg .GetDoubleProperty (stringOfDoublePropName )
1276+ gotStrDoubleAsDoubleValue2 , gotDoubleErr2 := rcvMsg .GetDoubleProperty (stringOfDoublePropName2 )
1277+ gotUnsetAsDoubleValue , gotUnsetErr := rcvMsg .GetDoubleProperty (unsetPropName )
1278+ assert .NotNil (t , gotStringErr )
1279+ assert .Equal (t , "1055" , gotStringErr .GetErrorCode ())
1280+ assert .Equal (t , "MQJMS_E_BAD_TYPE" , gotStringErr .GetReason ())
1281+ assert .NotNil (t , gotEmptyStrErr )
1282+ assert .Nil (t , gotIntErr )
1283+ assert .Nil (t , gotIntErr2 )
1284+ assert .NotNil (t , gotBoolErr )
1285+ assert .NotNil (t , gotBoolErr2 )
1286+ assert .Nil (t , gotDoubleErr )
1287+ assert .Nil (t , gotDoubleErr2 )
1288+ assert .Nil (t , gotUnsetErr )
1289+ assert .Equal (t , float64 (0 ), gotStrAsDoubleValue ) // non-nil err
1290+ assert .Equal (t , float64 (0 ), gotEmptyStrAsDoubleValue ) // non-nil err
1291+ assert .Equal (t , float64 (245 ), gotStrIntAsDoubleValue )
1292+ assert .Equal (t , float64 (- 34678 ), gotStrIntAsDoubleValue2 )
1293+ assert .Equal (t , float64 (0 ), gotStrBoolAsDoubleValue ) // non-nil err
1294+ assert .Equal (t , float64 (0 ), gotStrBoolAsDoubleValue2 ) // non-nil err
1295+ assert .Equal (t , float64 (2.718527453 ), gotStrDoubleAsDoubleValue )
1296+ assert .Equal (t , float64 (- 25675752.212345678 ), gotStrDoubleAsDoubleValue2 )
1297+ assert .Equal (t , float64 (0 ), gotUnsetAsDoubleValue )
1298+
1299+ }
0 commit comments