1 //******************************************************************
3 // Copyright 2015 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "gtest/gtest.h"
23 #include "ocpayload.h"
25 #include "oic_malloc.h"
26 #include "oic_string.h"
27 #include "resourcemanager.h"
28 #include "credresource.h"
29 #include "securevirtualresourcetypes.h"
30 #include "srmtestcommon.h"
31 #include "srmutility.h"
32 #include "psinterface.h"
33 #include "security_internals.h"
35 #define TAG "SRM-CRED-UT"
37 OicSecCred_t * getCredList()
40 OicSecCred_t *cred = (OicSecCred_t *)OICCalloc(1, sizeof(*cred));
41 VERIFY_NON_NULL(TAG, cred, ERROR);
43 OICStrcpy((char *)cred->subject.id, sizeof(cred->subject.id)+1, "1111111111111111");
47 cred->roleIds = (OicSecRole_t *)OICCalloc(cred->roleIdsLen, sizeof(OicSecRole_t));
48 VERIFY_NON_NULL(TAG, cred->roleIds, ERROR);
49 OICStrcpy((char *)cred->roleIds[0].id, sizeof(cred->roleIds[0].id), "role11");
50 OICStrcpy((char *)cred->roleIds[1].id, sizeof(cred->roleIds[1].id), "role12");
54 cred->credType = SYMMETRIC_PAIR_WISE_KEY;
55 cred->privateData.data = (uint8_t *)OICCalloc(1, strlen("My private Key11") + 1);
56 VERIFY_NON_NULL(TAG, cred->privateData.data, ERROR);
57 OICStrcpy((char *)cred->privateData.data, strlen("My private Key11")+1,"My private Key11");
58 OICStrcpy((char *)cred->rownerID.id, sizeof(cred->rownerID.id), "aaaaaaaaaaaaaaaa");
59 cred->next = (OicSecCred_t*)OICCalloc(1, sizeof(*cred->next));
60 VERIFY_NON_NULL(TAG, cred->next, ERROR);
61 cred->next->credId = 5678;
62 OICStrcpy((char *)cred->next->subject.id, sizeof(cred->next->subject.id)+1, "2222222222222222");
64 cred->next->roleIdsLen = 0;
66 cred->next->credType = SYMMETRIC_PAIR_WISE_KEY;
67 sz = strlen("My private Key21") + 1;
68 cred->next->privateData.data = (uint8_t *)OICCalloc(1, sz);
69 VERIFY_NON_NULL(TAG, cred->next->privateData.data, ERROR);
70 OICStrcpy((char *)cred->next->privateData.data, sz, "My private Key21");
72 sz = strlen("My Public Key123") + 1
73 cred->next->publicData.data = (char *)OICCalloc(1, sz);
74 VERIFY_NON_NULL(TAG, cred->next->publicData.data, ERROR);
75 OICStrcpy(cred->next->publicData.data, sz,"My Public Key123");
77 OICStrcpy((char *)cred->next->rownerID.id, sizeof(cred->next->rownerID.id), "bbbbbbbbbbbbbbbb");
90 static void printCred(const OicSecCred_t * cred)
92 EXPECT_TRUE(NULL != cred);
94 const OicSecCred_t *credTmp1 = NULL;
95 for (credTmp1 = cred; credTmp1; credTmp1 = credTmp1->next)
97 OIC_LOG_V(INFO, TAG, "\ncred->credId = %d", credTmp1->credId);
98 OIC_LOG_V(INFO, TAG, "cred->subject.id = %s", credTmp1->subject.id);
99 OIC_LOG_V(INFO, TAG, "cred->credType = %d", credTmp1->credType);
100 if(credTmp1->privateData.data)
102 OIC_LOG_V(INFO, TAG, "cred->privateData.data = %s", credTmp1->privateData.data);
105 if(credTmp1->publicData.data)
107 OIC_LOG_V(INFO, TAG, "cred->publicData.data = %s", credTmp1->publicData.data);
109 #endif /* __WITH_X509__ */
110 OIC_LOG_V(INFO, TAG, "cred->rownerID = %s", credTmp1->rownerID.id);
114 //InitCredResource Tests
115 TEST(CredResourceTest, InitCredResource)
117 EXPECT_EQ(OC_STACK_INVALID_PARAM, InitCredResource());
120 //DeInitCredResource Tests
121 TEST(CredResourceTest, DeInitCredResource)
123 EXPECT_EQ(OC_STACK_INVALID_PARAM, DeInitCredResource());
126 //CreateCredResource Tests
127 TEST(CredResourceTest, CreateCredResource)
129 EXPECT_EQ(OC_STACK_INVALID_PARAM, CreateCredResource());
132 //CredEntityHandler Tests
133 TEST(CredResourceTest, CredEntityHandlerWithDummyRequest)
135 OCEntityHandlerRequest req = OCEntityHandlerRequest();
136 EXPECT_EQ(OC_EH_ERROR,
137 CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req, NULL));
140 TEST(CredResourceTest, CredEntityHandlerWithNULLRequest)
142 EXPECT_EQ(OC_EH_ERROR,
143 CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL, NULL));
146 TEST(CredResourceTest, CredEntityHandlerInvalidFlag)
148 OCEntityHandlerRequest req = OCEntityHandlerRequest();
149 EXPECT_EQ(OC_EH_ERROR,
150 CredEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req, NULL));
153 //Cred DELETE request
154 TEST(CredResourceTest, CredEntityHandlerDeleteTest)
156 OCEntityHandlerRequest ehReq = OCEntityHandlerRequest();
157 static OCPersistentStorage ps = OCPersistentStorage();
158 const OicSecCred_t* subjectCred1 = NULL;
159 const OicSecCred_t* subjectCred2 = NULL;
160 OCEntityHandlerResult ehRet = OC_EH_ERROR;
161 char query[] = "subjectuuid=31313131-3131-3131-3131-313131313131"; //canonical uuid of subject1
163 SetPersistentHandler(&ps, true);
165 OicSecCred_t *cred = getCredList();
166 ASSERT_TRUE(NULL != cred);
167 uint8_t *payload = NULL;
169 EXPECT_EQ(OC_STACK_OK, CredToCBORPayload(cred, &payload, &size));
172 DeleteCredList(cred);
174 ASSERT_TRUE(NULL != payload);
176 // Create Entity Handler POST request payload
177 ehReq.method = OC_REST_POST;
178 ehReq.payload = (OCPayload *)OCSecurityPayloadCBORCreate(payload, size);
182 DeleteCredList(cred);
184 ASSERT_TRUE( NULL != ehReq.payload);
185 EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OC_REQUEST_FLAG, &ehReq, NULL));
187 // Verify if SRM contains Credential for the subject
188 subjectCred1 = GetCredResourceData(&cred->subject);
189 EXPECT_TRUE(NULL != subjectCred1);
191 // Create Entity Handler DELETE request
192 ehReq.method = OC_REST_DELETE;
193 ehReq.query = (char *)OICCalloc(1, strlen(query)+1);
197 DeleteCredList(cred);
199 ASSERT_TRUE(NULL != ehReq.query);
200 OICStrcpy(ehReq.query, strlen(query)+1, query);
202 ehRet = CredEntityHandler(OC_REQUEST_FLAG, &ehReq, NULL);
203 EXPECT_EQ(OC_EH_ERROR, ehRet);
205 // Verify if SRM has deleted ACE for the subject
206 subjectCred2 = GetCredResourceData(&cred->subject);
207 EXPECT_TRUE(NULL == subjectCred2);
210 OICFree(ehReq.query);
212 DeInitCredResource();
213 DeleteCredList(cred);
214 OCPayloadDestroy((OCPayload *)ehReq.payload);
217 TEST(CredResourceTest, CredToCBORPayloadNULL)
219 OicSecCred_t *cred = getCredList();
220 EXPECT_EQ(OC_STACK_INVALID_PARAM, CredToCBORPayload(NULL, NULL, 0));
222 uint8_t *cborPayload = (uint8_t *) OICCalloc(1, 10);
225 DeleteCredList(cred);
227 ASSERT_TRUE(NULL != cborPayload);
228 EXPECT_EQ(OC_STACK_INVALID_PARAM, CredToCBORPayload(cred, &cborPayload, &size));
229 OICFree(cborPayload);
231 EXPECT_EQ(OC_STACK_INVALID_PARAM, CredToCBORPayload(NULL, &cborPayload, &size));
232 EXPECT_EQ(OC_STACK_INVALID_PARAM, CredToCBORPayload(cred, &cborPayload, 0));
233 EXPECT_EQ(OC_STACK_INVALID_PARAM, CredToCBORPayload(cred, NULL, &size));
234 DeleteCredList(cred);
237 TEST(CredResourceTest, CredToCBORPayloadVALID)
239 uint8_t* payload = NULL;
241 OicSecCred_t *cred = getCredList();
243 EXPECT_EQ(OC_STACK_OK, CredToCBORPayload(cred, &payload, &size));
246 DeleteCredList(cred);
248 ASSERT_TRUE(NULL != payload);
250 DeleteCredList(cred);
254 TEST(CredResourceTest, CBORPayloadToCredVALID)
256 OicSecCred_t *cred1 = getCredList();
258 uint8_t *payload = NULL;
260 EXPECT_EQ(OC_STACK_OK, CredToCBORPayload(cred1, &payload, &size));
261 DeleteCredList(cred1);
262 ASSERT_TRUE(NULL != payload);
264 OicSecCred_t *cred2 = NULL;
265 EXPECT_EQ(OC_STACK_OK, CBORPayloadToCred(payload, size, &cred2));
267 ASSERT_TRUE(cred2 != NULL);
268 DeleteCredList(cred2);
271 TEST(CredResourceTest, CBORPayloadToCredNULL)
273 OicSecCred_t *cred = NULL;
274 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToCred(NULL, 0, NULL));
275 uint8_t *cborPayload = (uint8_t *) OICCalloc(1, 10);
276 ASSERT_TRUE(NULL != cborPayload);
277 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToCred(NULL, 0, &cred));
278 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToCred(cborPayload, 0, NULL));
279 cred = getCredList();
280 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToCred(cborPayload, 0, &cred));
281 DeleteCredList(cred);
282 OICFree(cborPayload);
285 //GetCredResourceData Test
286 TEST(CredResourceTest, GetCredResourceDataNULLSubject)
288 EXPECT_EQ(NULL, GetCredResourceData(NULL));
291 TEST(CredResourceTest, GenerateCredentialValidInput)
293 OicUuid_t rownerID = {{0}};
294 OICStrcpy((char *)rownerID.id, strlen("ownersId21"), "ownersId21");
296 OicUuid_t subject = {{0}};
297 OICStrcpy((char *)subject.id, strlen("subject11"), "subject11");
299 uint8_t privateKey[] = "My private Key11";
300 OicSecKey_t key = {privateKey, sizeof(privateKey)};
302 OicSecCred_t * cred = NULL;
303 cred = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
307 ASSERT_TRUE(NULL != cred);
308 DeleteCredList(cred);
311 TEST(CredResourceTest, GenerateAndAddCredentialValidInput)
313 OicUuid_t rownerID = {{0}};
314 OICStrcpy((char *)rownerID.id, sizeof(rownerID.id), "ownersId11");
316 OicUuid_t subject = {{0}};
317 OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
319 uint8_t privateKey[] = "My private Key11";
320 OicSecKey_t key = {privateKey, sizeof(privateKey)};
322 OicSecCred_t *cred1 = NULL;
323 OicSecCred_t *headCred = NULL;
325 cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
328 EXPECT_EQ(OC_STACK_OK, AddCredential(cred1));
331 OICStrcpy((char *)rownerID.id, sizeof(rownerID.id), "ownersId22");
332 OICStrcpy((char *)subject.id, sizeof(subject.id), "subject22");
333 cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
335 EXPECT_EQ(OC_STACK_OK, AddCredential(cred1));
337 OICStrcpy((char *)rownerID.id, sizeof(rownerID.id), "ownersId33");
338 OICStrcpy((char *)subject.id, sizeof(subject.id), "subject33");
339 cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
341 EXPECT_EQ(OC_STACK_OK, AddCredential(cred1));
343 const OicSecCred_t* credList = GetCredResourceData(&headCred->subject);
347 DeleteCredList(headCred);
351 TEST(CredGetResourceDataTest, GetCredResourceDataValidSubject)
353 OicSecCred_t* cred = getCredList();
354 EXPECT_TRUE(NULL != GetCredResourceData(cred->subject));