|
@@ -727,6 +727,61 @@ START_TEST(UA_Variant_decodeWithArrayFlagSetShallSetVTAndAllocateMemoryForArray)
|
|
}
|
|
}
|
|
END_TEST
|
|
END_TEST
|
|
|
|
|
|
|
|
+START_TEST(UA_Variant_decodeSingleExtensionObjectShallSetVTAndAllocateMemory){
|
|
|
|
+ // given
|
|
|
|
+ size_t pos = 0;
|
|
|
|
+ UA_Variant dst;
|
|
|
|
+ UA_NodeId tmpNodeId;
|
|
|
|
+ UA_ByteString srcByteString;
|
|
|
|
+
|
|
|
|
+ UA_NodeId_init(&tmpNodeId);
|
|
|
|
+ tmpNodeId.identifier.numeric = 22;
|
|
|
|
+ tmpNodeId.namespaceIndex = 2;
|
|
|
|
+ tmpNodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
|
|
|
|
+
|
|
|
|
+ UA_ExtensionObject tmpExtensionObject;
|
|
|
|
+ UA_ExtensionObject_init(&tmpExtensionObject);
|
|
|
|
+ UA_ByteString_newMembers(&tmpExtensionObject.body,3);
|
|
|
|
+ tmpExtensionObject.body.data[0]= 10;
|
|
|
|
+ tmpExtensionObject.body.data[1]= 20;
|
|
|
|
+ tmpExtensionObject.body.data[2]= 30;
|
|
|
|
+ tmpExtensionObject.encoding = UA_EXTENSIONOBJECT_ENCODINGMASK_BODYISBYTESTRING;
|
|
|
|
+ tmpExtensionObject.typeId = tmpNodeId;
|
|
|
|
+
|
|
|
|
+ UA_Variant tmpVariant;
|
|
|
|
+ UA_Variant_init(&tmpVariant);
|
|
|
|
+ tmpVariant.arrayDimensions = UA_NULL;
|
|
|
|
+ tmpVariant.arrayDimensionsSize = -1;
|
|
|
|
+ tmpVariant.arrayLength = -1;
|
|
|
|
+ tmpVariant.storageType = UA_VARIANT_DATA_NODELETE;
|
|
|
|
+ tmpVariant.type = &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
|
|
|
|
+ tmpVariant.data = &tmpExtensionObject;
|
|
|
|
+
|
|
|
|
+ UA_ByteString_newMembers(&srcByteString,200);
|
|
|
|
+ pos = 0;
|
|
|
|
+ UA_Variant_encodeBinary(&tmpVariant,&srcByteString,&pos);
|
|
|
|
+
|
|
|
|
+ // when
|
|
|
|
+ pos = 0;
|
|
|
|
+ UA_StatusCode retval = UA_Variant_decodeBinary(&srcByteString, &pos, &dst);
|
|
|
|
+ // then
|
|
|
|
+ ck_assert_int_eq(retval, UA_STATUSCODE_GOOD);
|
|
|
|
+ ck_assert_int_eq((uintptr_t)dst.type, (uintptr_t)&UA_TYPES[UA_TYPES_EXTENSIONOBJECT]);
|
|
|
|
+ ck_assert_int_eq(dst.arrayLength, -1);
|
|
|
|
+ ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.data[0], 10);
|
|
|
|
+ ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.data[1], 20);
|
|
|
|
+ ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.data[2], 30);
|
|
|
|
+ ck_assert_int_eq(((UA_ExtensionObject *)dst.data)->body.length, 3);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // finally
|
|
|
|
+ UA_Variant_deleteMembers(&dst);
|
|
|
|
+ UA_ByteString_deleteMembers(&srcByteString);
|
|
|
|
+ UA_ExtensionObject_deleteMembers(&tmpExtensionObject);
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+END_TEST
|
|
|
|
+
|
|
START_TEST(UA_Variant_decodeWithOutDeleteMembersShallFailInCheckMem) {
|
|
START_TEST(UA_Variant_decodeWithOutDeleteMembersShallFailInCheckMem) {
|
|
// given
|
|
// given
|
|
size_t pos = 0;
|
|
size_t pos = 0;
|
|
@@ -1710,6 +1765,7 @@ static Suite *testSuite_builtin(void) {
|
|
tcase_add_test(tc_decode, UA_NodeId_decodeTwoByteShallReadTwoBytesAndSetNamespaceToZero);
|
|
tcase_add_test(tc_decode, UA_NodeId_decodeTwoByteShallReadTwoBytesAndSetNamespaceToZero);
|
|
tcase_add_test(tc_decode, UA_NodeId_decodeFourByteShallReadFourBytesAndRespectNamespace);
|
|
tcase_add_test(tc_decode, UA_NodeId_decodeFourByteShallReadFourBytesAndRespectNamespace);
|
|
tcase_add_test(tc_decode, UA_NodeId_decodeStringShallAllocateMemory);
|
|
tcase_add_test(tc_decode, UA_NodeId_decodeStringShallAllocateMemory);
|
|
|
|
+ tcase_add_test(tc_decode, UA_Variant_decodeSingleExtensionObjectShallSetVTAndAllocateMemory);
|
|
tcase_add_test(tc_decode, UA_Variant_decodeWithOutArrayFlagSetShallSetVTAndAllocateMemoryForArray);
|
|
tcase_add_test(tc_decode, UA_Variant_decodeWithOutArrayFlagSetShallSetVTAndAllocateMemoryForArray);
|
|
tcase_add_test(tc_decode, UA_Variant_decodeWithArrayFlagSetShallSetVTAndAllocateMemoryForArray);
|
|
tcase_add_test(tc_decode, UA_Variant_decodeWithArrayFlagSetShallSetVTAndAllocateMemoryForArray);
|
|
tcase_add_test(tc_decode, UA_Variant_decodeWithOutDeleteMembersShallFailInCheckMem);
|
|
tcase_add_test(tc_decode, UA_Variant_decodeWithOutDeleteMembersShallFailInCheckMem);
|