56a8fb7e3a71076d4e78107524a28fc93273e7a0
[platform/core/api/system-settings.git] / tests / sst_gtest_vconf.cpp
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <string.h>
18 #include <glib.h>
19 #include <gtest/gtest.h>
20 #include <vconf.h>
21
22 #include "system_settings.h"
23 #include "mocks/sstt_mock.h"
24
25 extern "C" {
26 #include "sst.h"
27 #include "sst_vconf.h"
28 #include "sst_interface.h"
29 }
30
31 class SstVconfCBTest : public ::testing::Test {
32 protected:
33         void SetUp() override
34         {
35                 loop = g_main_loop_new(NULL, FALSE);
36         }
37
38         void TearDown() override
39         {
40                 g_main_loop_unref(loop);
41                 loop = NULL;
42         }
43
44         static gboolean checkCallbackIdle(gpointer data)
45         {
46                 bool *val = (bool*)data;
47                 int ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, val);
48                 EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
49                 ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, !(*val));
50                 EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
51
52                 return G_SOURCE_REMOVE;
53         }
54
55         static void changedMultiCallback1(system_settings_key_e key, void *user_data)
56         {
57                 INFO("changedMultiCallback1 called!");
58                 resultCB |= 0x1;
59                 if (0x11 == resultCB)
60                         g_main_loop_quit(loop);
61         }
62
63         static void changedMultiCallback2(system_settings_key_e key, void *user_data)
64         {
65                 INFO("changedMultiCallback2 called!");
66                 resultCB |= 0x10;
67                 if (0x11 == resultCB)
68                         g_main_loop_quit(loop);
69         }
70
71         static void changedCallback(system_settings_key_e key, void *user_data)
72         {
73                 INFO("Callback called!");
74                 resultCB = SYSTEM_SETTINGS_ERROR_NONE;
75                 g_main_loop_quit(loop);
76         }
77
78         static int resultCB;
79         static GMainLoop *loop;
80         static const char *ringtoneFiles[];
81 };
82
83 GMainLoop *SstVconfCBTest::loop = NULL;
84 int SstVconfCBTest::resultCB = 0;
85
86 TEST(SstVconfTest, getValueInt)
87 {
88         int val;
89         sst_interface *iface;
90         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &iface);
91         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
92
93         sstm_vconf_get_int_setup(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 60, 0);
94         ret = sst_vconf_get_int(iface, &val);
95         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
96 }
97
98 TEST(SstVconfTest, getValueIntERR)
99 {
100         int val;
101         sst_interface *iface;
102         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &iface);
103         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
104
105         sstm_vconf_get_int_setup(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 60, -1);
106         ret = sst_vconf_get_int(iface, &val);
107         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
108 }
109
110 TEST(SstVconfTest, setValueInt)
111 {
112         int getVal;
113         int setVal = 60;
114         sst_interface *iface;
115         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &iface);
116         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
117
118         sstm_vconf_set_int_setup(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 0);
119
120         ret = sst_vconf_set_int(iface, setVal);
121         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
122         ret = sst_vconf_get_int(iface, &getVal);;
123         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
124         EXPECT_EQ(setVal, getVal);
125 }
126
127 TEST(SstVconfTest, setValueIntERR)
128 {
129         sst_interface *iface;
130         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &iface);
131         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
132
133         sstm_vconf_set_int_setup(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, -1);
134         ret = sst_vconf_set_int(iface, 60);
135         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
136 }
137
138 TEST(SstVconfTest, getValueBool)
139 {
140         bool val;
141         sst_interface *iface;
142         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
143         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
144
145         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
146         ret = sst_vconf_get_bool(iface, &val);
147         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
148 }
149
150 TEST(SstVconfTest, getValueBoolERR)
151 {
152         bool val;
153         sst_interface *iface;
154         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
155         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
156
157         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, -1);
158         ret = sst_vconf_get_bool(iface, &val);
159         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
160 }
161
162 TEST(SstVconfTest, setValueBool)
163 {
164         bool getVal;
165         bool setVal;
166         sst_interface *iface;
167         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
168         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
169
170         sstm_vconf_set_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, 0);
171         ret = sst_vconf_get_bool(iface, &getVal);
172         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
173         setVal = !getVal;
174         ret = sst_vconf_set_bool(iface, setVal);
175         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
176         ret = sst_vconf_get_bool(iface, &getVal);
177         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
178         EXPECT_EQ(setVal, getVal);
179         ret = sst_vconf_set_bool(iface, !getVal);
180         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
181 }
182
183 TEST(SstVconfTest, setValueBoolERR)
184 {
185         sst_interface *iface;
186         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
187         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
188
189         sstm_vconf_set_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, -1);
190         ret = sst_vconf_set_bool(iface, false);
191         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
192 }
193
194 TEST(SstVconfTest, getValueString)
195 {
196         char *val;
197         sst_interface *iface;
198         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &iface);
199         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
200
201         sstm_vconf_get_str_setup(VCONFKEY_REGIONFORMAT, "ko", 0);
202         ret = sst_vconf_get_str(iface, &val);
203         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
204         free(val);
205
206         sstm_vconf_clear_str(VCONFKEY_REGIONFORMAT);
207 }
208
209 TEST(SstVconfTest, getValueStringERR)
210 {
211         char *val;
212         sst_interface *iface;
213         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &iface);
214         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
215
216         sstm_vconf_get_str_setup(VCONFKEY_REGIONFORMAT, "ko", -1);
217         ret = sst_vconf_get_str(iface, &val);
218         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
219
220         sstm_vconf_clear_str(VCONFKEY_REGIONFORMAT);
221 }
222
223 TEST(SstVconfTest, setValueString)
224 {
225         char *getVal;
226         const char *setVal = "ko_KR";
227         sst_interface *iface;
228         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &iface);
229         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
230
231         sstm_vconf_set_str_setup(VCONFKEY_REGIONFORMAT, 0);
232         ret = sst_vconf_set_str(iface, setVal);
233         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
234         ret = sst_vconf_get_str(iface, &getVal);
235         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
236         EXPECT_STREQ(setVal, getVal);
237         free(getVal);
238
239         sstm_vconf_clear_str(VCONFKEY_REGIONFORMAT);
240 }
241
242 TEST_F(SstVconfCBTest, setUnsetChangedCallback)
243 {
244         bool val;
245         sst_interface *iface;
246         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
247         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
248
249         sstm_vconf_notify_key_changed_setup(true);
250         sstm_vconf_ignore_key_changed_setup(true);
251         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
252
253         ret = sst_vconf_set_cb(iface, changedCallback, NULL);
254         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
255         resultCB = -1;
256         g_idle_add(checkCallbackIdle, &val);
257         g_main_loop_run(loop);
258         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, resultCB);
259         ret = sst_vconf_unset_cb(iface);
260         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
261 }
262
263 TEST_F(SstVconfCBTest, setUnsetChangedCallbackERR)
264 {
265         sst_interface *iface;
266         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
267         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
268         ret = sst_vconf_set_cb(iface, NULL, NULL);
269         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
270
271         sstm_vconf_notify_key_changed_setup(false);
272         ret = sst_vconf_set_cb(iface, changedCallback, NULL);
273         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
274         sstm_vconf_ignore_key_changed_setup(false);
275         ret = sst_vconf_unset_cb(iface);
276         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
277 }
278
279 TEST_F(SstVconfCBTest, addDeleteChangedCallback)
280 {
281         bool val;
282         sst_interface *iface;
283
284         sstm_vconf_notify_key_changed_setup(true);
285         sstm_vconf_ignore_key_changed_setup(true);
286         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
287
288         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
289         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
290         ret = sst_vconf_add_multi_cb(iface, changedMultiCallback1, NULL);
291         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
292         ret = sst_vconf_add_multi_cb(iface, changedMultiCallback2, NULL);
293         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
294         resultCB = 0;
295         g_idle_add(checkCallbackIdle, &val);
296         g_main_loop_run(loop);
297         EXPECT_EQ(0x11, resultCB);
298         ret = sst_vconf_del_multi_cb(iface, changedMultiCallback1);
299         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
300         ret = sst_vconf_del_multi_cb(iface, changedMultiCallback2);
301         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
302 }
303
304 TEST_F(SstVconfCBTest, addDeleteChangedCallbackERR)
305 {
306         sst_interface *iface;
307         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
308         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
309         ret = sst_vconf_add_multi_cb(iface, NULL, NULL);
310         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
311
312         sstm_vconf_notify_key_changed_setup(false);
313         ret = sst_vconf_add_multi_cb(iface, changedCallback, NULL);
314         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
315         sstm_vconf_ignore_key_changed_setup(false);
316         ret = sst_vconf_del_multi_cb(iface, changedCallback);
317         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
318 }
319
320 TEST_F(SstVconfCBTest, subscribeUnsubscribe)
321 {
322         bool val;
323         sst_interface *iface;
324         system_settings_cb_id cb[2];
325
326         sstm_vconf_notify_key_changed_setup(true);
327         sstm_vconf_ignore_key_changed_setup(true);
328         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
329
330         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
331         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
332         ret = sst_vconf_subscribe(iface, changedMultiCallback1, NULL, &cb[0]);
333         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
334         ret = sst_vconf_subscribe(iface, changedMultiCallback2, NULL, &cb[1]);
335         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
336         resultCB = 0;
337         g_idle_add(checkCallbackIdle, &val);
338         g_main_loop_run(loop);
339         EXPECT_EQ(0x11, resultCB);
340         ret = sst_vconf_unsubscribe(iface, cb[0]);
341         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
342         ret = sst_vconf_unsubscribe(iface, cb[1]);
343         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
344 }
345
346 TEST_F(SstVconfCBTest, subscribeUnsubscribeERR)
347 {
348         sst_interface *iface;
349         system_settings_cb_id cb;
350         int ret = sst_get_interface(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &iface);
351         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
352         ret = sst_vconf_subscribe(iface, NULL, NULL, &cb);
353         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
354
355         sstm_vconf_notify_key_changed_setup(false);
356         ret = sst_vconf_subscribe(iface, changedCallback, NULL, &cb);
357         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
358         sstm_vconf_ignore_key_changed_setup(false);
359         ret = sst_vconf_unsubscribe(iface, cb);
360         changedCallback(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, NULL);
361 }