[IOT-1719] Restore empty UUID string conversion
authorDan Mihai <Daniel.Mihai@microsoft.com>
Fri, 30 Dec 2016 02:01:40 +0000 (18:01 -0800)
committerGreg Zaverucha <gregz@microsoft.com>
Mon, 9 Jan 2017 18:43:25 +0000 (18:43 +0000)
1. Empty strings were being rejected after commit
7c494d7b1a90349f353bf8f3d0f6cd17fe31df14.

2. Add unit test to catch this kind of regression.

3. Improve error logging for this kind of json2cbor failures.

Change-Id: I4608638a5ef952c2949b47ec21e7f610d50f3b82
Signed-off-by: Dan Mihai <Daniel.Mihai@microsoft.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/16019
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Chul Lee <chuls.lee@samsung.com>
Reviewed-by: Greg Zaverucha <gregz@microsoft.com>
resource/csdk/security/src/srmutility.c
resource/csdk/security/tool/json2cbor.c
resource/csdk/security/unittest/srmutility.cpp

index b1f7744..9a9b8c9 100644 (file)
@@ -140,6 +140,24 @@ exit:
 
 OCStackResult ConvertStrToUuid(const char* strUuid, OicUuid_t* uuid)
 {
-    bool result = OCConvertStringToUuid(strUuid, uuid->id);
-    return (result) ? OC_STACK_OK : OC_STACK_INVALID_PARAM;
+    bool result = true;
+    size_t strUuidLen = strlen(strUuid);
+
+    if (0 == strUuidLen)
+    {
+        OIC_LOG(INFO, TAG, "Converting empty UUID string to 00000000-0000-0000-0000-000000000000");
+        memset(uuid->id, 0, sizeof(uuid->id));
+    }
+    else
+    {
+        result = OCConvertStringToUuid(strUuid, uuid->id);
+    }
+
+    if (!result)
+    {
+        OIC_LOG_V(ERROR, TAG, "%s: Invalid parameter '%s'", __func__, strUuid);
+        return OC_STACK_INVALID_PARAM;
+    }
+
+    return OC_STACK_OK;
 }
index d0d9025..762845c 100644 (file)
@@ -670,7 +670,7 @@ exit:
         DeleteDoxmBinData(doxm);
         doxm = NULL;
     }
-    printf("OUT JSONToDoxmBin\n");
+    printf("OUT %s: %s\n", __func__, (doxm != NULL) ? "success" : "failure");
     return doxm;
 }
 
@@ -740,9 +740,10 @@ exit:
     cJSON_Delete(jsonRoot);
     if (OC_STACK_OK != ret)
     {
-        OIC_LOG(ERROR, TAG, "JSONToPstatBin failed");
+        DeletePstatBinData(pstat);
+        pstat = NULL;
     }
-    printf("OUT JSONToPstatBin\n");
+    printf("OUT %s: %s\n", __func__, (pstat != NULL) ? "success" : "failure");
     return pstat;
 }
 
index 0464d5a..a5df9f7 100644 (file)
@@ -21,6 +21,8 @@
 #include "srmutility.h"
 #include "oic_string.h"
 
+#define TEST_FILL_CHARACTER ((int)0xfb)
+
 //ParseRestQuery Tests
 TEST(ParseRestQueryTest, ParseRestQueryEmpty)
 {
@@ -64,3 +66,95 @@ TEST(ParseRestQueryTest, ParseRestMultipleQuery)
     }
     printf("\n");
 }
+
+TEST(ConvertStrToUuidTest, LowCase)
+{
+    OicUuid_t uuid;
+    memset(&uuid, TEST_FILL_CHARACTER, sizeof(uuid));
+
+    const char *uuidString1 = "ca5bfba0-c0f1-4906-b995-f139d626dfbd";
+    EXPECT_EQ(OC_STACK_OK, ConvertStrToUuid(uuidString1, &uuid));
+
+    EXPECT_EQ((uint8_t)0xca, uuid.id[0]);
+    EXPECT_EQ((uint8_t)0x5b, uuid.id[1]);
+    EXPECT_EQ((uint8_t)0xfb, uuid.id[2]);
+    EXPECT_EQ((uint8_t)0xa0, uuid.id[3]);
+    EXPECT_EQ((uint8_t)0xc0, uuid.id[4]);
+    EXPECT_EQ((uint8_t)0xf1, uuid.id[5]);
+    EXPECT_EQ((uint8_t)0x49, uuid.id[6]);
+    EXPECT_EQ((uint8_t)0x06, uuid.id[7]);
+    EXPECT_EQ((uint8_t)0xb9, uuid.id[8]);
+    EXPECT_EQ((uint8_t)0x95, uuid.id[9]);
+    EXPECT_EQ((uint8_t)0xf1, uuid.id[10]);
+    EXPECT_EQ((uint8_t)0x39, uuid.id[11]);
+    EXPECT_EQ((uint8_t)0xd6, uuid.id[12]);
+    EXPECT_EQ((uint8_t)0x26, uuid.id[13]);
+    EXPECT_EQ((uint8_t)0xdf, uuid.id[14]);
+    EXPECT_EQ((uint8_t)0xbd, uuid.id[15]);
+}
+
+TEST(ConvertStrToUuidTest, UpCase)
+{
+    OicUuid_t uuid;
+    memset(&uuid, TEST_FILL_CHARACTER, sizeof(uuid));
+
+    const char *uuidString1 = "2320EF4B-D714-4936-93E5-846E1B5DA202";
+    EXPECT_EQ(OC_STACK_OK, ConvertStrToUuid(uuidString1, &uuid));
+
+    EXPECT_EQ((uint8_t)0x23, uuid.id[0]);
+    EXPECT_EQ((uint8_t)0x20, uuid.id[1]);
+    EXPECT_EQ((uint8_t)0xef, uuid.id[2]);
+    EXPECT_EQ((uint8_t)0x4b, uuid.id[3]);
+    EXPECT_EQ((uint8_t)0xd7, uuid.id[4]);
+    EXPECT_EQ((uint8_t)0x14, uuid.id[5]);
+    EXPECT_EQ((uint8_t)0x49, uuid.id[6]);
+    EXPECT_EQ((uint8_t)0x36, uuid.id[7]);
+    EXPECT_EQ((uint8_t)0x93, uuid.id[8]);
+    EXPECT_EQ((uint8_t)0xe5, uuid.id[9]);
+    EXPECT_EQ((uint8_t)0x84, uuid.id[10]);
+    EXPECT_EQ((uint8_t)0x6e, uuid.id[11]);
+    EXPECT_EQ((uint8_t)0x1b, uuid.id[12]);
+    EXPECT_EQ((uint8_t)0x5d, uuid.id[13]);
+    EXPECT_EQ((uint8_t)0xa2, uuid.id[14]);
+    EXPECT_EQ((uint8_t)0x02, uuid.id[15]);
+}
+
+TEST(ConvertStrToUuidTest, MixedCase)
+{
+    OicUuid_t uuid;
+    memset(&uuid, TEST_FILL_CHARACTER, sizeof(uuid));
+
+    const char *uuidString1 = "6905485c-9693-4CF7-9350-4eB39022af7d";
+    EXPECT_EQ(OC_STACK_OK, ConvertStrToUuid(uuidString1, &uuid));
+
+    EXPECT_EQ((uint8_t)0x69, uuid.id[0]);
+    EXPECT_EQ((uint8_t)0x05, uuid.id[1]);
+    EXPECT_EQ((uint8_t)0x48, uuid.id[2]);
+    EXPECT_EQ((uint8_t)0x5c, uuid.id[3]);
+    EXPECT_EQ((uint8_t)0x96, uuid.id[4]);
+    EXPECT_EQ((uint8_t)0x93, uuid.id[5]);
+    EXPECT_EQ((uint8_t)0x4c, uuid.id[6]);
+    EXPECT_EQ((uint8_t)0xf7, uuid.id[7]);
+    EXPECT_EQ((uint8_t)0x93, uuid.id[8]);
+    EXPECT_EQ((uint8_t)0x50, uuid.id[9]);
+    EXPECT_EQ((uint8_t)0x4e, uuid.id[10]);
+    EXPECT_EQ((uint8_t)0xb3, uuid.id[11]);
+    EXPECT_EQ((uint8_t)0x90, uuid.id[12]);
+    EXPECT_EQ((uint8_t)0x22, uuid.id[13]);
+    EXPECT_EQ((uint8_t)0xaf, uuid.id[14]);
+    EXPECT_EQ((uint8_t)0x7d, uuid.id[15]);
+}
+
+TEST(ConvertStrToUuidTest, EmptyStringConversion)
+{
+    OicUuid_t uuid;
+    memset(&uuid, TEST_FILL_CHARACTER, sizeof(uuid));
+
+    const char *uuidString1 = "";
+    EXPECT_EQ(OC_STACK_OK, ConvertStrToUuid(uuidString1, &uuid));
+
+    for (size_t i = 0; i < sizeof(uuid.id); i++)
+    {
+        EXPECT_EQ((uint8_t)0, uuid.id[i]);
+    }
+}