Imported Upstream version 0.9.2
[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     cred->credId = 1234;
51     OICStrcpy((char *)cred->subject.id, sizeof(cred->subject.id), "subject1");
52
53 #if 0
54     cred->roleIdsLen = 2;
55     cred->roleIds = (OicSecRole_t *)OICCalloc(cred->roleIdsLen, sizeof(OicSecRole_t));
56     OICStrcpy((char *)cred->roleIds[0].id, sizeof(cred->roleIds[0].id), "role11");
57     OICStrcpy((char *)cred->roleIds[1].id, sizeof(cred->roleIds[1].id), "role12");
58 #endif
59
60     cred->credType = 1;
61     cred->ownersLen = 1;
62     cred->owners = (OicUuid_t*)OICCalloc(cred->ownersLen, sizeof(OicUuid_t));
63     OICStrcpy((char *)cred->owners[0].id, sizeof(cred->owners[0].id), "ownersId11");
64
65     cred->next = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
66     cred->next->credId = 5678;
67     OICStrcpy((char *)cred->next->subject.id, sizeof(cred->next->subject.id), "subject2");
68 #if 0
69     cred->next->roleIdsLen = 0;
70 #endif
71     cred->next->credType = 1;
72     size_t data_size = strlen("My private Key21") + 1;
73     cred->next->privateData.data = (char *)OICCalloc(1, data_size);
74     OICStrcpy(cred->next->privateData.data, data_size,"My private Key21");
75 #if 0
76     cred->next->publicData.data = (char *)OICCalloc(1, strlen("My Public Key123") + 1);
77     OICStrcpy(cred->next->publicData.data, sizeof(cred->next->publicData.data),"My Public Key123");
78 #endif
79     cred->next->ownersLen = 2;
80     cred->next->owners = (OicUuid_t*)OICCalloc(cred->next->ownersLen, sizeof(OicUuid_t));
81     OICStrcpy((char *)cred->next->owners[0].id, sizeof(cred->next->owners[0].id), "ownersId21");
82     OICStrcpy((char *)cred->next->owners[1].id, sizeof(cred->next->owners[1].id), "ownersId22");
83     return cred;
84 }
85
86 static void printCred(const OicSecCred_t * cred)
87 {
88     EXPECT_TRUE(NULL != cred);
89
90     const OicSecCred_t *credTmp1 = NULL;
91     for(credTmp1 = cred; credTmp1; credTmp1 = credTmp1->next)
92     {
93         OC_LOG_V(INFO, TAG, PCF("\ncred->credId = %d"), credTmp1->credId);
94         OC_LOG_V(INFO, TAG, PCF("cred->subject.id = %s"), credTmp1->subject.id);
95         OC_LOG_V(INFO, TAG, PCF("cred->credType = %d"), credTmp1->credType);
96         if(credTmp1->privateData.data)
97         {
98             OC_LOG_V(INFO, TAG, PCF("cred->privateData.data = %s"), credTmp1->privateData.data);
99         }
100         if(credTmp1->publicData.data)
101         {
102            OC_LOG_V(INFO, TAG, PCF("cred->publicData.data = %s"), credTmp1->publicData.data);
103         }
104         OC_LOG_V(INFO, TAG, PCF("cred->ownersLen = %zd"), credTmp1->ownersLen);
105         for(size_t i = 0; i < cred->ownersLen; i++)
106         {
107             OC_LOG_V(INFO, TAG, PCF("cred->owners[%zd].id = %s"), i, credTmp1->owners[i].id);
108         }
109     }
110 }
111
112  //InitCredResource Tests
113 TEST(InitCredResourceTest, InitCredResource)
114 {
115     EXPECT_EQ(OC_STACK_INVALID_PARAM, InitCredResource());
116 }
117
118 //DeInitCredResource Tests
119 TEST(DeInitCredResourceTest, DeInitCredResource)
120 {
121     EXPECT_EQ(OC_STACK_INVALID_PARAM, DeInitCredResource());
122 }
123
124 //CreateCredResource Tests
125 TEST(CreateCredResourceTest, CreateCredResource)
126 {
127     EXPECT_EQ(OC_STACK_INVALID_PARAM, CreateCredResource());
128 }
129
130  //CredEntityHandler Tests
131 TEST(CredEntityHandlerTest, CredEntityHandlerWithDummyRequest)
132 {
133     OCEntityHandlerRequest req;
134     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
135 }
136
137 TEST(CredEntityHandlerTest, CredEntityHandlerWithNULLRequest)
138 {
139     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL));
140 }
141
142 TEST(CredEntityHandlerTest, CredEntityHandlerInvalidFlag)
143 {
144     OCEntityHandlerRequest req;
145     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req));
146 }
147
148 //BinToCredJSON Tests
149 TEST(BinToCredJSONTest, BinToCredJSONNullCred)
150 {
151     char* value = BinToCredJSON(NULL);
152     EXPECT_TRUE(value == NULL);
153 }
154
155 TEST(BinToCredJSONTest, BinToCredJSONValidCred)
156 {
157     char* json = NULL;
158     OicSecCred_t * cred = getCredList();
159
160     json = BinToCredJSON(cred);
161
162     printf("BinToCredJSON:%s\n", json);
163     EXPECT_TRUE(json != NULL);
164     DeleteCredList(cred);
165     OICFree(json);
166 }
167
168 //JSONToCredBin Tests
169 TEST(JSONToCredBinTest, JSONToCredBinValidJSON)
170 {
171     OicSecCred_t* cred1 = getCredList();
172     char* json = BinToCredJSON(cred1);
173
174     EXPECT_TRUE(json != NULL);
175     OicSecCred_t *cred2 = JSONToCredBin(json);
176     EXPECT_TRUE(cred2 == NULL);
177     DeleteCredList(cred1);
178     DeleteCredList(cred2);
179     OICFree(json);
180 }
181
182 TEST(JSONToCredBinTest, JSONToCredBinNullJSON)
183 {
184     OicSecCred_t *cred = JSONToCredBin(NULL);
185     EXPECT_TRUE(cred == NULL);
186 }
187
188 //GetCredResourceData Test
189 TEST(CredGetResourceDataTest, GetCredResourceDataNULLSubject)
190 {
191     EXPECT_TRUE(NULL == GetCredResourceData(NULL));
192 }
193
194 TEST(CredGenerateCredentialTest, GenerateCredentialValidInput)
195 {
196     OicUuid_t owners[1];
197     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId21");
198
199     OicUuid_t subject = {};
200     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
201
202     char privateKey[] = "My private Key11";
203
204     OicSecCred_t * cred  = NULL;
205
206     cred = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
207                              privateKey, 1, owners);
208     printCred(cred);
209
210     DeleteCredList(cred);
211 }
212
213 TEST(GenerateAndAddCredentialTest, GenerateAndAddCredentialValidInput)
214 {
215     OicUuid_t owners[1];
216     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId11");
217
218     OicUuid_t subject = {};
219     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject11");
220
221     char privateKey[] = "My private Key11";
222
223     OicSecCred_t * cred1  = NULL;
224     OicSecCred_t * headCred = NULL;
225
226     cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
227                                  privateKey, 1, owners);
228
229     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred1));
230     headCred = cred1;
231
232     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId22");
233     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject22");
234     cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
235                                      privateKey, 1, owners);
236     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred1));
237
238     OICStrcpy((char *)owners[0].id, sizeof(owners[0].id), "ownersId33");
239     OICStrcpy((char *)subject.id, sizeof(subject.id), "subject33");
240     cred1 = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
241                                      privateKey, 1, owners);
242     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred1));
243
244     const OicSecCred_t* credList = GetCredResourceData(&headCred->subject);
245
246     printCred(credList);
247
248     DeleteCredList(headCred);
249
250 }
251
252 #if 0
253 TEST(CredGetResourceDataTest, GetCredResourceDataValidSubject)
254 {
255     OicSecCred_t* cred = getCredList();
256     EXPECT_TRUE(NULL != GetCredResourceData(cred->subject));
257 }
258 #endif
259
260