Merging security-M3 to master
[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
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 //Declare Cred resource methods for testing
31 OCStackResult CreateCredResource();
32 OCEntityHandlerResult CredEntityHandler (OCEntityHandlerFlag flag,
33                 OCEntityHandlerRequest * ehRequest);
34 char * BinToCredJSON(const OicSecCred_t * pstat);
35 OicSecCred_t * JSONToCredBin(const char * jsonStr);
36 void InitSecCredInstance(OicSecCred_t * cred);
37 void DeleteCredList(OicSecCred_t* cred);
38 #ifdef __cplusplus
39 }
40 #endif
41
42 OicSecCred_t * getCredList()
43 {
44     OicSecCred_t * cred = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
45     cred->credId = 1234;
46     strcpy((char *)cred->subject.id, "subject1");
47
48 #if 0
49     cred->roleIdsLen = 2;
50     cred->roleIds = (OicSecRole_t *)OICCalloc(cred->roleIdsLen, sizeof(OicSecRole_t));
51     strcpy((char *)cred->roleIds[0].id, "role11");
52     strcpy((char *)cred->roleIds[1].id, "role12");
53 #endif
54
55     cred->credType = 1;
56     cred->ownersLen = 1;
57     cred->owners = (OicUuid_t*)OICCalloc(cred->ownersLen, sizeof(OicUuid_t));
58     strcpy((char *)cred->owners[0].id, "ownersId11");
59
60     cred->next = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));
61     cred->next->credId = 5678;
62     strcpy((char *)cred->next->subject.id, "subject2");
63 #if 0
64     cred->next->roleIdsLen = 0;
65 #endif
66     cred->next->credType = 1;
67     cred->next->privateData.data = (char *)OICCalloc(1, strlen("My private Key21") + 1);
68     strcpy(cred->next->privateData.data, "My private Key21");
69 #if 0
70     cred->next->publicData.data = (char *)OICCalloc(1, strlen("My Public Key123") + 1);
71     strcpy(cred->next->publicData.data, "My Public Key123");
72 #endif
73     cred->next->ownersLen = 2;
74     cred->next->owners = (OicUuid_t*)OICCalloc(cred->next->ownersLen, sizeof(OicUuid_t));
75     strcpy((char *)cred->next->owners[0].id, "ownersId21");
76     strcpy((char *)cred->next->owners[1].id, "ownersId22");
77     return cred;
78 }
79
80  //InitCredResource Tests
81 TEST(InitCredResourceTest, InitCredResource)
82 {
83     EXPECT_EQ(OC_STACK_INVALID_PARAM, InitCredResource());
84 }
85
86 //DeInitCredResource Tests
87 TEST(DeInitCredResourceTest, DeInitCredResource)
88 {
89     EXPECT_EQ(OC_STACK_INVALID_PARAM, DeInitCredResource());
90 }
91
92 //CreateCredResource Tests
93 TEST(CreateCredResourceTest, CreateCredResource)
94 {
95     EXPECT_EQ(OC_STACK_INVALID_PARAM, CreateCredResource());
96 }
97
98  //CredEntityHandler Tests
99 TEST(CredEntityHandlerTest, CredEntityHandlerWithDummyRequest)
100 {
101     OCEntityHandlerRequest req;
102     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, &req));
103 }
104
105 TEST(CredEntityHandlerTest, CredEntityHandlerWithNULLRequest)
106 {
107     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_REQUEST_FLAG, NULL));
108 }
109
110 TEST(CredEntityHandlerTest, CredEntityHandlerInvalidFlag)
111 {
112     OCEntityHandlerRequest req;
113     EXPECT_EQ(OC_EH_ERROR, CredEntityHandler(OCEntityHandlerFlag::OC_OBSERVE_FLAG, &req));
114 }
115
116 //BinToCredJSON Tests
117 TEST(BinToCredJSONTest, BinToCredJSONNullCred)
118 {
119     char* value = BinToCredJSON(NULL);
120     EXPECT_TRUE(value == NULL);
121 }
122
123 TEST(BinToCredJSONTest, BinToCredJSONValidCred)
124 {
125     char* json = NULL;
126     OicSecCred_t * cred = getCredList();
127
128     json = BinToCredJSON(cred);
129
130     printf("BinToCredJSON:%s\n", json);
131     EXPECT_TRUE(json != NULL);
132     DeleteCredList(cred);
133     OICFree(json);
134 }
135
136 //JSONToCredBin Tests
137 TEST(JSONToCredBinTest, JSONToCredBinValidJSON)
138 {
139     OicSecCred_t* cred1 = getCredList();
140     char* json = BinToCredJSON(cred1);
141
142     EXPECT_TRUE(json != NULL);
143     OicSecCred_t *cred2 = JSONToCredBin(json);
144     EXPECT_TRUE(cred2 == NULL);
145     DeleteCredList(cred1);
146     DeleteCredList(cred2);
147     OICFree(json);
148 }
149
150 TEST(JSONToCredBinTest, JSONToCredBinNullJSON)
151 {
152     OicSecCred_t *cred = JSONToCredBin(NULL);
153     EXPECT_TRUE(cred == NULL);
154 }
155
156 //GetCredResourceData Test
157 TEST(CredGetResourceDataTest, GetCredResourceDataNULLSubject)
158 {
159     EXPECT_TRUE(NULL == GetCredResourceData(NULL));
160 }
161
162 TEST(CredGenerateCredentialTest, GenerateCredentialValidInput)
163 {
164     OicUuid_t owners[1];
165    strcpy((char *)owners[0].id, "ownersId21");
166
167     OicUuid_t subject = {};
168     strcpy((char *)subject.id, "subject11");
169
170     char privateKey[] = "My private Key11";
171
172     OicSecCred_t * cred  = NULL;
173
174     cred = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
175                              privateKey, 1, owners);
176     printf("cred->credId = %d\n", cred->credId);
177     printf("cred->subject.id = %s\n", cred->subject.id);
178     printf("cred->credType = %d\n", cred->credType);
179     printf("cred->privateData.data = %s\n", cred->privateData.data);
180     printf("cred->ownersLen = %zd\n", cred->ownersLen);
181     printf("cred->owners[0].id = %s\n", cred->owners[0].id);
182
183     EXPECT_TRUE(NULL != cred);
184     DeleteCredList(cred);
185 }
186
187 TEST(CredAddCredentialTest, GenerateCredentialValidInput)
188 {
189     OicUuid_t owners[1];
190     strcpy((char *)owners[0].id, "ownersId21");
191
192     OicUuid_t subject = {};
193     strcpy((char *)subject.id, "subject11");
194
195     char privateKey[] = "My private Key11";
196
197     OicSecCred_t * cred  = NULL;
198
199     cred = GenerateCredential(&subject, SYMMETRIC_PAIR_WISE_KEY, NULL,
200                                  privateKey, 1, owners);
201     EXPECT_TRUE(NULL != cred);
202
203     EXPECT_EQ(OC_STACK_ERROR, AddCredential(cred));
204
205     DeleteCredList(cred);
206
207 }
208 #if 0
209 TEST(CredGetResourceDataTest, GetCredResourceDataValidSubject)
210 {
211     OicSecCred_t* cred = getCredList();
212     EXPECT_TRUE(NULL != GetCredResourceData(cred->subject));
213 }
214 #endif
215
216