Преглед изворни кода

added unit test for UA_Variant_decodeBinary with UA_ExtensionObject

FlorianPalm пре 9 година
родитељ
комит
bc5fb6e66c
1 измењених фајлова са 56 додато и 0 уклоњено
  1. 56 0
      tests/check_builtin.c

+ 56 - 0
tests/check_builtin.c

@@ -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);