Imported Upstream version 1.0.0
[platform/upstream/iotivity.git] / resource / csdk / security / unittest / credentialresource.cpp
index fcbb3ac..5421efe 100644 (file)
 
 #include "gtest/gtest.h"
 #include "ocstack.h"
+#include "ocpayload.h"
 #include "resourcemanager.h"
 #include "securevirtualresourcetypes.h"
 #include "credresource.h"
 #include "oic_malloc.h"
 #include "oic_string.h"
+#include "srmtestcommon.h"
+#include "srmutility.h"
 #include "logger.h"
 
-#define TAG PCF("SRM-CRED-UT")
+#define TAG "SRM-CRED-UT"
 
 #ifdef __cplusplus
 extern "C" {
@@ -40,46 +43,73 @@ OicSecCred_t * JSONToCredBin(const char * jsonStr);
 void InitSecCredInstance(OicSecCred_t * cred);
 void DeleteCredList(OicSecCred_t* cred);
 const OicSecCred_t* GetCredResourceData(const OicUuid_t* subject);
+
 #ifdef __cplusplus
 }
 #endif
 
+
 OicSecCred_t * getCredList()
 {
-    OicSecCred_t * cred = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
+
+    OicSecCred_t * cred = NULL;
+    size_t sz = 0;
+
+    cred = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
+    VERIFY_NON_NULL(TAG, cred, ERROR);
     cred->credId = 1234;
     OICStrcpy((char *)cred->subject.id, sizeof(cred->subject.id), "subject1");
 
 #if 0
     cred->roleIdsLen = 2;
     cred->roleIds = (OicSecRole_t *)OICCalloc(cred->roleIdsLen, sizeof(OicSecRole_t));
+    VERIFY_NON_NULL(TAG, cred->roleIds, ERROR);
     OICStrcpy((char *)cred->roleIds[0].id, sizeof(cred->roleIds[0].id), "role11");
     OICStrcpy((char *)cred->roleIds[1].id, sizeof(cred->roleIds[1].id), "role12");
+
 #endif
 
-    cred->credType = 1;
+    cred->credType = SYMMETRIC_PAIR_WISE_KEY;
+    cred->privateData.data = (char *)OICCalloc(1, strlen("My private Key11") + 1);
+    VERIFY_NON_NULL(TAG, cred->privateData.data, ERROR);
+    strcpy(cred->privateData.data, "My private Key11");
     cred->ownersLen = 1;
     cred->owners = (OicUuid_t*)OICCalloc(cred->ownersLen, sizeof(OicUuid_t));
+    VERIFY_NON_NULL(TAG, cred->owners, ERROR);
     OICStrcpy((char *)cred->owners[0].id, sizeof(cred->owners[0].id), "ownersId11");
 
     cred->next = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
+    VERIFY_NON_NULL(TAG, cred->next, ERROR);
     cred->next->credId = 5678;
     OICStrcpy((char *)cred->next->subject.id, sizeof(cred->next->subject.id), "subject2");
 #if 0
     cred->next->roleIdsLen = 0;
 #endif
-    cred->next->credType = 1;
-    size_t data_size = strlen("My private Key21") + 1;
-    cred->next->privateData.data = (char *)OICCalloc(1, data_size);
-    OICStrcpy(cred->next->privateData.data, data_size,"My private Key21");
+    cred->next->credType = SYMMETRIC_PAIR_WISE_KEY;
+    sz = strlen("My private Key21") + 1;
+    cred->next->privateData.data = (char *)OICCalloc(1, sz);
+    VERIFY_NON_NULL(TAG, cred->next->privateData.data, ERROR);
+    OICStrcpy(cred->next->privateData.data, sz,"My private Key21");
 #if 0
-    cred->next->publicData.data = (char *)OICCalloc(1, strlen("My Public Key123") + 1);
-    OICStrcpy(cred->next->publicData.data, sizeof(cred->next->publicData.data),"My Public Key123");
+    sz = strlen("My Public Key123") + 1
+    cred->next->publicData.data = (char *)OICCalloc(1, sz);
+    VERIFY_NON_NULL(TAG, cred->next->publicData.data, ERROR);
+    OICStrcpy(cred->next->publicData.data, sz,"My Public Key123");
 #endif
     cred->next->ownersLen = 2;
     cred->next->owners = (OicUuid_t*)OICCalloc(cred->next->ownersLen, sizeof(OicUuid_t));
+    VERIFY_NON_NULL(TAG, cred->next->owners, ERROR);
     OICStrcpy((char *)cred->next->owners[0].id, sizeof(cred->next->owners[0].id), "ownersId21");
     OICStrcpy((char *)cred->next->owners[1].id, sizeof(cred->next->owners[1].id), "ownersId22");
+
+    return cred;
+
+exit:
+    if(cred)
+    {
+        DeleteCredList(cred);
+        cred = NULL;
+    }
     return cred;
 }
 
@@ -90,21 +120,21 @@ static void printCred(const OicSecCred_t * cred)
     const OicSecCred_t *credTmp1 = NULL;
     for(credTmp1 = cred; credTmp1; credTmp1 = credTmp1->next)
     {
-        OC_LOG_V(INFO, TAG, PCF("\ncred->credId = %d"), credTmp1->credId);
-        OC_LOG_V(INFO, TAG, PCF("cred->subject.id = %s"), credTmp1->subject.id);
-        OC_LOG_V(INFO, TAG, PCF("cred->credType = %d"), credTmp1->credType);
+        OC_LOG_V(INFO, TAG, "\ncred->credId = %d", credTmp1->credId);
+        OC_LOG_V(INFO, TAG, "cred->subject.id = %s", credTmp1->subject.id);
+        OC_LOG_V(INFO, TAG, "cred->credType = %d", credTmp1->credType);
         if(credTmp1->privateData.data)
         {
-            OC_LOG_V(INFO, TAG, PCF("cred->privateData.data = %s"), credTmp1->privateData.data);
+            OC_LOG_V(INFO, TAG, "cred->privateData.data = %s", credTmp1->privateData.data);
         }
         if(credTmp1->publicData.data)
         {
-           OC_LOG_V(INFO, TAG, PCF("cred->publicData.data = %s"), credTmp1->publicData.data);
+           OC_LOG_V(INFO, TAG, "cred->publicData.data = %s", credTmp1->publicData.data);
         }
-        OC_LOG_V(INFO, TAG, PCF("cred->ownersLen = %zd"), credTmp1->ownersLen);
+        OC_LOG_V(INFO, TAG, "cred->ownersLen = %zd", credTmp1->ownersLen);
         for(size_t i = 0; i < cred->ownersLen; i++)
         {
-            OC_LOG_V(INFO, TAG, PCF("cred->owners[%zd].id = %s"), i, credTmp1->owners[i].id);
+            OC_LOG_V(INFO, TAG, "cred->owners[%zd].id = %s", i, credTmp1->owners[i].id);
         }
     }
 }
@@ -131,18 +161,75 @@ TEST(CreateCredResourceTest, CreateCredResource)
 TEST(CredEntityHandlerTest, CredEntityHandlerWithDummyRequest)
 {
     OCEntityHandlerRequest req;
-    EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
+    EXPECT_EQ(OC_EH_ERROR,
+            CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
 }
 
 TEST(CredEntityHandlerTest, CredEntityHandlerWithNULLRequest)
 {
-    EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL));
+    EXPECT_EQ(OC_EH_ERROR,
+            CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL));
 }
 
 TEST(CredEntityHandlerTest, CredEntityHandlerInvalidFlag)
 {
     OCEntityHandlerRequest req;
-    EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req));
+    EXPECT_EQ(OC_EH_ERROR,
+            CredEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req));
+}
+
+//Cred DELETE request
+TEST(CredEntityHandlerTest, CredEntityHandlerDeleteTest)
+{
+    OCEntityHandlerRequest ehReq =  OCEntityHandlerRequest();
+    static OCPersistentStorage ps =  OCPersistentStorage();
+    const OicSecCred_t* subjectCred1 = NULL;
+    const OicSecCred_t* subjectCred2 = NULL;
+    char *jsonStr = NULL;
+    OCEntityHandlerResult ehRet = OC_EH_ERROR;
+    char query[] = "sub=c3ViamVjdDE=";
+
+    SetPersistentHandler(&ps, true);
+
+    OicSecCred_t *cred = getCredList();
+    VERIFY_NON_NULL(TAG, cred, ERROR);
+
+    jsonStr = BinToCredJSON(cred);
+    VERIFY_NON_NULL(TAG, jsonStr, ERROR);
+
+    // Create Entity Handler POST request payload
+    ehReq.method = OC_REST_POST;
+    ehReq.payload = (OCPayload*)OCSecurityPayloadCreate(jsonStr);
+    ehRet = CredEntityHandler(OC_REQUEST_FLAG, &ehReq);
+    EXPECT_TRUE(OC_EH_ERROR == ehRet);
+
+    // Verify if SRM contains Credential for the subject
+    subjectCred1 = GetCredResourceData(&cred->subject);
+    EXPECT_TRUE(NULL != subjectCred1);
+
+   // Create Entity Handler DELETE request
+   ehReq.method = OC_REST_DELETE;
+   ehReq.query = (char*)OICMalloc(strlen(query)+1);
+   VERIFY_NON_NULL(TAG, ehReq.query, ERROR);
+   OICStrcpy(ehReq.query, strlen(query)+1, query);
+
+   ehRet = CredEntityHandler(OC_REQUEST_FLAG, &ehReq);
+   EXPECT_TRUE(OC_EH_ERROR == ehRet);
+
+   // Verify if SRM has deleted ACE for the subject
+   subjectCred2 = GetCredResourceData(&cred->subject);
+   EXPECT_TRUE(NULL == subjectCred2);
+
+exit:
+   // Perform cleanup
+   OICFree(ehReq.query);
+   OICFree(jsonStr);
+   OCPayloadDestroy(ehReq.payload);
+   if(NULL != cred)
+   {
+       DeInitCredResource();
+       DeleteCredList(cred);
+   }
 }
 
 //BinToCredJSON Tests
@@ -159,7 +246,7 @@ TEST(BinToCredJSONTest, BinToCredJSONValidCred)
 
     json = BinToCredJSON(cred);
 
-    printf("BinToCredJSON:%s\n", json);
+    OC_LOG_V(INFO, TAG, "BinToCredJSON:%s\n", json);
     EXPECT_TRUE(json != NULL);
     DeleteCredList(cred);
     OICFree(json);
@@ -173,7 +260,7 @@ TEST(JSONToCredBinTest, JSONToCredBinValidJSON)
 
     EXPECT_TRUE(json != NULL);
     OicSecCred_t *cred2 = JSONToCredBin(json);
-    EXPECT_TRUE(cred2 == NULL);
+    EXPECT_TRUE(cred2 != NULL);
     DeleteCredList(cred1);
     DeleteCredList(cred2);
     OICFree(json);
@@ -196,7 +283,7 @@ TEST(CredGenerateCredentialTest, GenerateCredentialValidInput)
     OicUuid_t owners[1];
     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId21");
 
-    OicUuid_t subject = {};
+    OicUuid_t subject = {{0}};
     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
 
     char privateKey[] = "My private Key11";
@@ -207,6 +294,7 @@ TEST(CredGenerateCredentialTest, GenerateCredentialValidInput)
                              privateKey, 1, owners);
     printCred(cred);
 
+    EXPECT_TRUE(NULL != cred);
     DeleteCredList(cred);
 }
 
@@ -215,7 +303,7 @@ TEST(GenerateAndAddCredentialTest, GenerateAndAddCredentialValidInput)
     OicUuid_t owners[1];
     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId11");
 
-    OicUuid_t subject = {};
+    OicUuid_t subject = {{0}};
     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
 
     char privateKey[] = "My private Key11";