Merge branch 'master' into 'security-basecamp'
[platform/upstream/iotivity.git] / resource / csdk / security / unittest / credentialresource.cpp
1 // Copyright 2015 Intel Mobile Communications GmbH All Rights Reserved.
2 //
3 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
18
19 #include "gtest/gtest.h"
20 #include "ocstack.h"
21 #include "resourcemanager.h"
22 #include "securevirtualresourcetypes.h"
23 #include "credresource.h"
24 #include "oic_malloc.h"
25 #include "oic_string.h"
26 #include "logger.h"
27
28 #define TAG PCF("SRM-CRED-UT")
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 //Declare Cred resource methods for testing
35 OCStackResult CreateCredResource();
36 OCEntityHandlerResult CredEntityHandler (OCEntityHandlerFlag flag,
37                 OCEntityHandlerRequest * ehRequest);
38 char * BinToCredJSON(const OicSecCred_t * pstat);
39 OicSecCred_t * JSONToCredBin(const char * jsonStr);
40 void InitSecCredInstance(OicSecCred_t * cred);
41 void DeleteCredList(OicSecCred_t* cred);
42 const OicSecCred_t* GetCredResourceData(const OicUuid_t* subject);
43 #ifdef __cplusplus
44 }
45 #endif
46
47 OicSecCred_t * getCredList()
48 {
49     OicSecCred_t * cred = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
50     if(!cred)
51     {
52         return NULL;
53     }
54     cred->credId = 1234;
55     OICStrcpy((char *)cred->subject.id, sizeof(cred->subject.id), "subject1");
56
57 #if 0
58     cred->roleIdsLen = 2;
59     cred->roleIds = (OicSecRole_t *)OICCalloc(cred->roleIdsLen, sizeof(OicSecRole_t));
60     OICStrcpy((char *)cred->roleIds[0].id, sizeof(cred->roleIds[0].id), "role11");
61     OICStrcpy((char *)cred->roleIds[1].id, sizeof(cred->roleIds[1].id), "role12");
62 #endif
63
64     cred->credType = 1;
65     cred->ownersLen = 1;
66     cred->owners = (OicUuid_t*)OICCalloc(cred->ownersLen, sizeof(OicUuid_t));
67     if(!cred->owners)
68     {
69         OICFree(cred);
70         return NULL;
71     }
72     OICStrcpy((char *)cred->owners[0].id, sizeof(cred->owners[0].id), "ownersId11");
73
74     cred->next = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
75     if(!cred->next)
76     {
77         OICFree(cred->owners);
78         OICFree(cred);
79         return NULL;
80     }
81     cred->next->credId = 5678;
82     OICStrcpy((char *)cred->next->subject.id, sizeof(cred->next->subject.id), "subject2");
83 #if 0
84     cred->next->roleIdsLen = 0;
85 #endif
86     cred->next->credType = 1;
87     size_t data_size = strlen("My private Key21") + 1;
88     cred->next->privateData.data = (char *)OICCalloc(1, data_size);
89     if(!cred->next->privateData.data)
90     {
91         OICFree(cred->next);
92         OICFree(cred->owners);
93         OICFree(cred);
94         return NULL;
95     }
96     OICStrcpy(cred->next->privateData.data, data_size,"My private Key21");
97 #if 0
98     cred->next->publicData.data = (char *)OICCalloc(1, strlen("My Public Key123") + 1);
99     OICStrcpy(cred->next->publicData.data, sizeof(cred->next->publicData.data),"My Public Key123");
100 #endif
101     cred->next->ownersLen = 2;
102     cred->next->owners = (OicUuid_t*)OICCalloc(cred->next->ownersLen, sizeof(OicUuid_t));
103     if(!cred->next->owners)
104     {
105         OICFree(cred->next->privateData.data);
106         OICFree(cred->next);
107         OICFree(cred->owners);
108         OICFree(cred);
109         return NULL;
110     }
111     OICStrcpy((char *)cred->next->owners[0].id, sizeof(cred->next->owners[0].id), "ownersId21");
112     OICStrcpy((char *)cred->next->owners[1].id, sizeof(cred->next->owners[1].id), "ownersId22");
113     return cred;
114 }
115
116 static void printCred(const OicSecCred_t * cred)
117 {
118     EXPECT_TRUE(NULL != cred);
119
120     const OicSecCred_t *credTmp1 = NULL;
121     for(credTmp1 = cred; credTmp1; credTmp1 = credTmp1->next)
122     {
123         OC_LOG_V(INFO, TAG, PCF("\ncred->credId = %d"), credTmp1->credId);
124         OC_LOG_V(INFO, TAG, PCF("cred->subject.id = %s"), credTmp1->subject.id);
125         OC_LOG_V(INFO, TAG, PCF("cred->credType = %d"), credTmp1->credType);
126         if(credTmp1->privateData.data)
127         {
128             OC_LOG_V(INFO, TAG, PCF("cred->privateData.data = %s"), credTmp1->privateData.data);
129         }
130         if(credTmp1->publicData.data)
131         {
132            OC_LOG_V(INFO, TAG, PCF("cred->publicData.data = %s"), credTmp1->publicData.data);
133         }
134         OC_LOG_V(INFO, TAG, PCF("cred->ownersLen = %zd"), credTmp1->ownersLen);
135         for(size_t i = 0; i < cred->ownersLen; i++)
136         {
137             OC_LOG_V(INFO, TAG, PCF("cred->owners[%zd].id = %s"), i, credTmp1->owners[i].id);
138         }
139     }
140 }
141
142  //InitCredResource Tests
143 TEST(InitCredResourceTest, InitCredResource)
144 {
145     EXPECT_EQ(OC_STACK_INVALID_PARAM, InitCredResource());
146 }
147
148 //DeInitCredResource Tests
149 TEST(DeInitCredResourceTest, DeInitCredResource)
150 {
151     EXPECT_EQ(OC_STACK_INVALID_PARAM, DeInitCredResource());
152 }
153
154 //CreateCredResource Tests
155 TEST(CreateCredResourceTest, CreateCredResource)
156 {
157     EXPECT_EQ(OC_STACK_INVALID_PARAM, CreateCredResource());
158 }
159
160  //CredEntityHandler Tests
161 TEST(CredEntityHandlerTest, CredEntityHandlerWithDummyRequest)
162 {
163     OCEntityHandlerRequest req;
164     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
165 }
166
167 TEST(CredEntityHandlerTest, CredEntityHandlerWithNULLRequest)
168 {
169     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL));
170 }
171
172 TEST(CredEntityHandlerTest, CredEntityHandlerInvalidFlag)
173 {
174     OCEntityHandlerRequest req;
175     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req));
176 }
177
178 //BinToCredJSON Tests
179 TEST(BinToCredJSONTest, BinToCredJSONNullCred)
180 {
181     char* value = BinToCredJSON(NULL);
182     EXPECT_TRUE(value == NULL);
183 }
184
185 TEST(BinToCredJSONTest, BinToCredJSONValidCred)
186 {
187     char* json = NULL;
188     OicSecCred_t * cred = getCredList();
189
190     json = BinToCredJSON(cred);
191
192     EXPECT_TRUE(json != NULL);
193     DeleteCredList(cred);
194     OICFree(json);
195 }
196
197 //JSONToCredBin Tests
198 TEST(JSONToCredBinTest, JSONToCredBinValidJSON)
199 {
200     OicSecCred_t* cred1 = getCredList();
201     char* json = BinToCredJSON(cred1);
202
203     EXPECT_TRUE(json != NULL);
204     OicSecCred_t *cred2 = JSONToCredBin(json);
205     EXPECT_TRUE(cred2 == NULL);
206     DeleteCredList(cred1);
207     DeleteCredList(cred2);
208     OICFree(json);
209 }
210
211 TEST(JSONToCredBinTest, JSONToCredBinNullJSON)
212 {
213     OicSecCred_t *cred = JSONToCredBin(NULL);
214     EXPECT_TRUE(cred == NULL);
215 }
216
217 //GetCredResourceData Test
218 TEST(CredGetResourceDataTest, GetCredResourceDataNULLSubject)
219 {
220     EXPECT_TRUE(NULL == GetCredResourceData(NULL));
221 }
222
223 TEST(CredGenerateCredentialTest, GenerateCredentialValidInput)
224 {
225     OicUuid_t owners[1];
226     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId21");
227
228     OicUuid_t subject = {};
229     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
230
231     char privateKey[] = "My private Key11";
232
233     OicSecCred_t * cred  = NULL;
234
235     cred = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
236                              privateKey, 1, owners);
237     printCred(cred);
238
239     DeleteCredList(cred);
240 }
241
242 TEST(GenerateAndAddCredentialTest, GenerateAndAddCredentialValidInput)
243 {
244     OicUuid_t owners[1];
245     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId11");
246
247     OicUuid_t subject = {};
248     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
249
250     char privateKey[] = "My private Key11";
251
252     OicSecCred_t * cred1  = NULL;
253     OicSecCred_t * headCred = NULL;
254
255     cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
256                                  privateKey, 1, owners);
257
258     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred1));
259     headCred = cred1;
260
261     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId22");
262     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject22");
263     cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
264                                      privateKey, 1, owners);
265     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred1));
266
267     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId33");
268     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject33");
269     cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
270                                      privateKey, 1, owners);
271     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred1));
272
273     const OicSecCred_t* credList = GetCredResourceData(&headCred->subject);
274
275     printCred(credList);
276
277     DeleteCredList(headCred);
278
279 }
280
281 #if 0
282 TEST(CredGetResourceDataTest, GetCredResourceDataValidSubject)
283 {
284     OicSecCred_t* cred = getCredList();
285     EXPECT_TRUE(NULL != GetCredResourceData(cred->subject));
286 }
287 #endif
288
289