Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / resource / csdk / security / provisioning / unittest / provisioningdatabasemanager.cpp
1 /* *****************************************************************
2  *
3  * Copyright 2015 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
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
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  * *****************************************************************/
20 #include "gtest/gtest.h"
21 #include "provisioningdatabasemanager.h"
22
23 #define DB_FILE "PDM.db"
24 const char ID_1 [] = "1111111111111111";
25 const char ID_2 [] = "2111111111111111";
26 const char ID_3 [] = "3111111111111111";
27 const char ID_4 [] = "4111111111111111";
28 const char ID_5 [] = "5111111111111111";
29 const char ID_6 [] = "6111111111111111";
30 const char ID_7 [] = "7111111111111111";
31 const char ID_8 [] = "8111111111111111";
32 const char ID_9 [] = "9111111111111111";
33 const char ID_10[] = "1222222222222222";
34 const char ID_11[] = "2222222222222222";
35 const char ID_12[] = "3222222222222222";
36 const char ID_13[] = "4222222222222222";
37
38
39 TEST(CallPDMAPIbeforeInit, BeforeInit)
40 {
41     if (0 == access(DB_FILE, F_OK))
42     {
43         EXPECT_EQ(0, unlink(DB_FILE));
44     }
45     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMAddDevice(NULL));
46     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMIsDuplicateDevice(NULL,NULL));
47     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMLinkDevices(NULL, NULL));
48     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMUnlinkDevices(NULL, NULL));
49     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMDeleteDevice(NULL));
50     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMGetOwnedDevices(NULL, NULL));
51     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMGetLinkedDevices(NULL, NULL, NULL));
52     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMSetLinkStale(NULL, NULL));
53     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMGetToBeUnlinkedDevices(NULL, NULL));
54     EXPECT_EQ(OC_STACK_PDM_IS_NOT_INITIALIZED, PDMIsLinkExists(NULL, NULL, NULL));
55 }
56
57 TEST(PDMInitTest, PDMInitWithNULL)
58 {
59     EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));
60 }
61
62 TEST(PDMAddDeviceTest, NullUUID)
63 {
64     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMAddDevice(NULL));
65 }
66
67 TEST(PDMIsDuplicateDeviceTest, NullUUID)
68 {
69     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMIsDuplicateDevice(NULL,NULL));
70 }
71
72
73 TEST(PDMIsDuplicateDeviceTest, ValidUUID)
74 {
75     OicUuid_t uid1 = {{0,}};
76     memcpy(&uid1.id, ID_1, sizeof(uid1.id));
77     PDMAddDevice(&uid1);
78     OicUuid_t uid2 = {{0,}};
79     memcpy(&uid2.id, ID_2, sizeof(uid2.id));
80     PDMAddDevice(&uid2);
81     OicUuid_t uid3 = {{0,}};
82     memcpy(&uid3.id, ID_3, sizeof(uid3.id));
83     bool isDuplicate = true;
84     EXPECT_EQ(OC_STACK_OK, PDMIsDuplicateDevice(&uid1,&isDuplicate));
85     EXPECT_TRUE(isDuplicate);
86
87     EXPECT_EQ(OC_STACK_OK, PDMIsDuplicateDevice(&uid3, &isDuplicate));
88     EXPECT_FALSE(isDuplicate);
89 }
90
91 TEST(PDMAddDeviceTest, ValidUUID)
92 {
93     OicUuid_t uid = {{0,}};
94
95     uint8_t id[UUID_LENGTH] = {0,};
96     for (size_t i = 0 ; i < sizeof(id) ; i++)
97     {
98         int tem = rand() % 25;
99
100         id[i] = tem + 65;
101     }
102
103     memcpy(&uid.id, &id, UUID_LENGTH);
104
105     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid));
106     PDMDeleteDevice(&uid);
107 }
108
109 TEST(PDMLinkDevicesTest, NULLDevice1)
110 {
111     OicUuid_t uid = {{0,}};
112     memcpy(&uid.id, ID_2, sizeof(uid.id));
113     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMLinkDevices(NULL, &uid));
114 }
115
116 TEST(PDMLinkDevicesTest, NULLDevice2)
117 {
118     OicUuid_t uid = {{0,}};
119     memcpy(&uid.id, ID_3, sizeof(uid.id));
120     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMLinkDevices(&uid, NULL));
121 }
122
123 TEST(PDMLinkDevicesTest, ValidCase)
124 {
125     OicUuid_t uid1 = {{0,}};
126     memcpy(&uid1.id, ID_4, sizeof(uid1.id));
127     PDMAddDevice(&uid1);
128     OicUuid_t uid2 = {{0,}};
129     memcpy(&uid2.id, ID_5, sizeof(uid2.id));
130     PDMAddDevice(&uid2);
131     EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid1, &uid2));
132 }
133
134 TEST(PDMUnlinkDevicesTest, NULLDevice1)
135 {
136     OicUuid_t uid = {{0,}};
137     memcpy(&uid.id, ID_3, sizeof(uid.id));
138     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMUnlinkDevices(NULL, &uid));
139 }
140
141 TEST(PDMUnlinkDevicesTest, NULLDevice2)
142 {
143     OicUuid_t uid = {{0,}};
144     memcpy(&uid.id, ID_3, sizeof(uid.id));
145     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMUnlinkDevices(&uid, NULL));
146 }
147
148 TEST(PDMUnlinkDevices, ValidCase)
149 {
150     OicUuid_t uid1 = {{0,}};
151     memcpy(&uid1.id, ID_4, sizeof(uid1.id));
152     OicUuid_t uid2 = {{0,}};
153     memcpy(&uid2.id, ID_5, sizeof(uid2.id));
154     EXPECT_EQ(OC_STACK_OK, PDMUnlinkDevices(&uid1, &uid2));
155 }
156
157
158 TEST (PDMDeleteDevice, NULLDeviceID)
159 {
160     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMDeleteDevice(NULL));
161 }
162
163 TEST (PDMDeleteDevice, ValidButNonExistDeviceID)
164 {
165
166     OicUuid_t uid = {{0,}};
167     uint8_t id[UUID_LENGTH] = {0,};
168     for (size_t i = 0 ; i < sizeof(id) ; i++)
169     {
170         int tem = rand() % 25;
171
172         id[i] = tem + 65;
173     }
174
175     memcpy(&uid.id, &id, sizeof(uid.id));
176     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMDeleteDevice(&uid));
177 }
178
179 TEST(PDMGetOwnedDevices, ValidCase)
180 {
181     OCUuidList_t *list = NULL;
182     size_t noOfDevcies = 0;
183     EXPECT_EQ(OC_STACK_OK, PDMGetOwnedDevices(&list, &noOfDevcies));
184 }
185
186 TEST(PDMGetLinkedDevices, NULLDeviceID)
187 {
188     OCUuidList_t *list = NULL;
189     size_t noOfDevices = 0;
190     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMGetLinkedDevices(NULL, &list, &noOfDevices));
191 }
192
193 TEST(PDMGetLinkedDevices, ValidCase)
194 {
195     OicUuid_t uid = {{0,}};
196     memcpy(&uid.id, ID_1, sizeof(uid.id));
197     OCUuidList_t *list = NULL;
198     size_t noOfDevices = 0;
199     EXPECT_EQ(OC_STACK_OK, PDMGetLinkedDevices(&uid, &list, &noOfDevices));
200 }
201
202 TEST(PDMGetLinkedDevices, InvalidCase)
203 {
204     OicUuid_t uid = {{0,}};
205     memcpy(&uid.id, ID_6, sizeof(uid.id));
206     OCUuidList_t *list = NULL;
207     size_t noOfDevices = 0;
208     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMGetLinkedDevices(&uid, &list, &noOfDevices));
209 }
210
211 TEST(PDMSetLinkStale, NULLDeviceID1)
212 {
213     OicUuid_t uid = {{0,}};
214     memcpy(&uid.id, ID_1, sizeof(uid.id));
215     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMSetLinkStale(NULL, &uid));
216 }
217
218 TEST(PDMSetLinkStale, NULLDeviceID2)
219 {
220     OicUuid_t uid = {{0,}};
221     memcpy(&uid.id, ID_1, sizeof(uid.id));
222     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMSetLinkStale(&uid, NULL));
223 }
224
225 TEST(PDMSetLinkStale, ValidCase)
226 {
227     OicUuid_t uid1 = {{0,}};
228     memcpy(&uid1.id, ID_6, sizeof(uid1.id));
229     OicUuid_t uid2 = {{0,}};
230     memcpy(&uid2.id, ID_1, sizeof(uid2.id));
231
232     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMSetLinkStale(&uid1, &uid2));
233
234     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1));
235
236     EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid1, &uid2));
237
238     EXPECT_EQ(OC_STACK_OK, PDMSetLinkStale(&uid1, &uid2));
239 }
240
241 TEST(PDMGetToBeUnlinkedDevices, ValidCase)
242 {
243     OCPairList_t *list = NULL;
244     size_t noOfDevices = 0;
245     EXPECT_EQ(OC_STACK_OK, PDMGetToBeUnlinkedDevices(&list, &noOfDevices));
246 }
247
248 TEST(PDMClose, ValidCase)
249 {
250    EXPECT_EQ(OC_STACK_OK, PDMClose());
251 }
252
253 TEST(PDMDestoryOicUuidLinkList, NULLParam)
254 {
255     PDMDestoryOicUuidLinkList(NULL);
256 }
257
258 TEST(PDMDestoryStaleLinkList, NULLParam)
259 {
260     PDMDestoryStaleLinkList(NULL);
261 }
262
263 TEST(PDMIsLinkExistsTest, DuplicateID)
264 {
265     EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));
266     OicUuid_t uid1 = {{0,}};
267     memcpy(&uid1.id, ID_7, sizeof(uid1.id));
268     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1));
269     OicUuid_t uid2 = {{0,}};
270     memcpy(&uid2.id, ID_8, sizeof(uid2.id));
271     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid2));
272
273     bool linkExisits = true;
274     OCStackResult res = PDMIsLinkExists(&uid1, &uid2, &linkExisits);
275     EXPECT_EQ(OC_STACK_OK, res);
276     EXPECT_FALSE(linkExisits);
277 }
278
279 TEST(PDMSetDeviceStaleTest, NULLUUID)
280 {
281     EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));
282     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMSetDeviceStale(NULL));
283 }
284
285 TEST(PDMSetDeviceStaleTest, VALIDUUID)
286 {
287     EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));
288     OicUuid_t uid1 = {{0,}};
289     memcpy(&uid1.id, ID_9, sizeof(uid1.id));
290     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1));
291     EXPECT_EQ(OC_STACK_OK,PDMSetDeviceStale(&uid1));
292 }
293
294 TEST(PDMSetDeviceStaleTest, StaleDeviceNotinDeviceList)
295 {
296     EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));
297     OicUuid_t uid1 = {{0,}};
298     memcpy(&uid1.id, ID_10, sizeof(uid1.id));
299     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1));
300     EXPECT_EQ(OC_STACK_OK,PDMSetDeviceStale(&uid1));
301
302     OCUuidList_t *list = NULL;
303     size_t noOfDevcies = 0;
304     EXPECT_EQ(OC_STACK_OK, PDMGetOwnedDevices(&list, &noOfDevcies));
305
306     while (list)
307     {
308         EXPECT_FALSE(0 == memcmp(list->dev.id, uid1.id,sizeof(uid1.id)));
309         list = list->next;
310     }
311 }
312
313 TEST(PDMSetDeviceStaleTest, StaleDeviceNotinLinkedDevice)
314 {
315     EXPECT_EQ(OC_STACK_OK, PDMInit(NULL));
316     OicUuid_t uid1 = {{0,}};
317     memcpy(&uid1.id, ID_11, sizeof(uid1.id));
318
319     OicUuid_t uid2 = {{0,}};
320     memcpy(&uid2.id, ID_12, sizeof(uid2.id));
321
322     OicUuid_t uid3 = {{0,}};
323     memcpy(&uid3.id, ID_13, sizeof(uid3.id));
324
325     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid1));
326     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid2));
327     EXPECT_EQ(OC_STACK_OK, PDMAddDevice(&uid3));
328
329     EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid1, &uid2));
330     EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid2, &uid3));
331     EXPECT_EQ(OC_STACK_OK, PDMLinkDevices(&uid1, &uid3));
332
333     EXPECT_EQ(OC_STACK_OK,PDMSetDeviceStale(&uid1));
334
335     OCUuidList_t *list1 = NULL;
336     size_t noOfDevices1 = 0;
337     EXPECT_EQ(OC_STACK_INVALID_PARAM, PDMGetLinkedDevices(&uid1, &list1, &noOfDevices1));
338
339     OCUuidList_t *list2 = NULL;
340     size_t noOfDevices2 = 0;
341     EXPECT_EQ(OC_STACK_OK, PDMGetLinkedDevices(&uid2, &list2, &noOfDevices2));
342     OCUuidList_t *ptr = list2;
343     while(ptr)
344     {
345         EXPECT_FALSE(0 == memcmp(ptr->dev.id, uid1.id,sizeof(uid1.id)));
346         ptr = ptr->next;
347     }
348     ptr = list2;
349     while(ptr)
350     {
351         EXPECT_TRUE(0 == memcmp(ptr->dev.id, uid3.id,sizeof(uid3.id)));
352         ptr = ptr->next;
353     }
354
355     OCUuidList_t *list3 = NULL;
356     size_t noOfDevices3 = 0;
357     EXPECT_EQ(OC_STACK_OK, PDMGetLinkedDevices(&uid3, &list3, &noOfDevices3));
358     ptr = list3;
359     while(ptr)
360     {
361         EXPECT_FALSE(0 == memcmp(ptr->dev.id, uid1.id,sizeof(uid1.id)));
362         ptr = ptr->next;
363     }
364
365     ptr = list3;
366     while(ptr)
367     {
368         EXPECT_TRUE(0 == memcmp(ptr->dev.id, uid2.id,sizeof(uid2.id)));
369         ptr = ptr->next;
370     }
371 }