Remove unused pkgmgr dependency
[platform/core/api/system-settings.git] / tests / sst_gtest_normal_api.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 int system_settings_subscribe_changes(system_settings_key_e key,
28                 system_settings_changed_cb callback,
29                 void *user_data, system_settings_cb_id *id);
30 int system_settings_unsubscribe_changes(system_settings_key_e key,
31                 system_settings_cb_id id);
32 }
33
34 #define SST_DEPRECATED_KEY ((int)SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED + 1)
35
36 class SstApiCBTest : public ::testing::Test {
37 protected:
38         void SetUp() override
39         {
40                 loop = g_main_loop_new(NULL, FALSE);
41         }
42
43         void TearDown() override
44         {
45                 g_main_loop_unref(loop);
46                 loop = NULL;
47         }
48
49         static gboolean checkCallbackIdle(gpointer data)
50         {
51                 bool *oldVal = (bool*)data;
52                 int ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, oldVal);
53                 EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
54                 ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, !(*oldVal));
55                 EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
56
57                 return G_SOURCE_REMOVE;
58         }
59
60         static void changedMultiCallback1(system_settings_key_e key, void *user_data)
61         {
62                 INFO("changedMultiCallback1 called!");
63                 resultCB |= 0x1;
64                 if (0x11 == resultCB)
65                         g_main_loop_quit(loop);
66         }
67
68         static void changedMultiCallback2(system_settings_key_e key, void *user_data)
69         {
70                 INFO("changedMultiCallback2 called!");
71                 resultCB |= 0x10;
72                 if (0x11 == resultCB)
73                         g_main_loop_quit(loop);
74         }
75
76         static void changedCallback(system_settings_key_e key, void *user_data)
77         {
78                 INFO("Callback called!");
79                 resultCB = SYSTEM_SETTINGS_ERROR_NONE;
80                 g_main_loop_quit(loop);
81         }
82
83         static bool ringtoneListCallback(int index, const char *data, void *user_data)
84         {
85                 INFO("filename(%s)", data);
86                 int *ringtone_num = (int*)user_data;
87                 *ringtone_num += 1;
88                 return true;
89         }
90
91         static gboolean checkRingtoneIdle(gpointer data)
92         {
93                 int ringtone_num = 0;
94                 int cur_cnt = 0;
95                 int ret = system_settings_foreach_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, ringtoneListCallback, &cur_cnt);
96
97                 for (int i = 0; i < ringtoneFilesCnt; i++) {
98                         ret = system_settings_add_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, ringtoneFiles[i]);
99                         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
100                 }
101                 ret = system_settings_foreach_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, ringtoneListCallback, &ringtone_num);
102                 EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
103
104                 for (int i = ringtoneFilesCnt - 1; i >= 0; i--) {
105                         ret = system_settings_delete_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, ringtoneFiles[i]);
106                         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
107                 }
108                 EXPECT_EQ(ringtone_num - cur_cnt, ringtoneFilesCnt);
109                 g_main_loop_quit(loop);
110                 return G_SOURCE_REMOVE;
111         }
112
113         static int resultCB;
114         static GMainLoop *loop;
115         static const char *ringtoneFiles[];
116         static int ringtoneFilesCnt;
117 };
118
119 const char *SstApiCBTest::ringtoneFiles[] = {
120         SYS_SETTINGS_TEST_DIR"/Over the horizon.mp3",
121         SYS_SETTINGS_TEST_DIR"/big_buck_bunny.mp3",
122         SYS_SETTINGS_TEST_DIR"/daliTestVideo.mp3",
123         SYS_SETTINGS_TEST_DIR"/sound_5.mp3",
124         SYS_SETTINGS_TEST_DIR"/tct-content-tizen-tests_video.mp3"
125 };
126 int SstApiCBTest::ringtoneFilesCnt = sizeof(ringtoneFiles)/sizeof(const char*);
127 GMainLoop *SstApiCBTest::loop = NULL;
128 int SstApiCBTest::resultCB = 0;
129
130 TEST(SstApiTest, getValueInt)
131 {
132         int val;
133         sstm_vconf_get_int_setup(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 60, 0);
134         int ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &val);
135         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
136
137         ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, NULL);
138         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
139
140         ret = system_settings_get_value_int((system_settings_key_e)SST_DEPRECATED_KEY, &val);
141         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
142
143         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
144         ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &val);
145         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
146 }
147
148 TEST(SstApiTest, setValueInt)
149 {
150         int getVal;
151         int setVal = 60;
152
153         sstm_vconf_set_int_setup(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, 0);
154         int ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, setVal);
155         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
156         ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &getVal);
157         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
158         EXPECT_EQ(setVal, getVal);
159
160         ret = system_settings_set_value_int((system_settings_key_e)SST_DEPRECATED_KEY, setVal);
161         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
162         ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, setVal);
163         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
164         ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_TIME_CHANGED, setVal);
165         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED, ret);
166 }
167
168 TEST(SstApiTest, getValueBool)
169 {
170         bool val;
171         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
172         int ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &val);
173         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
174
175         ret = system_settings_get_value_bool((system_settings_key_e)SST_DEPRECATED_KEY, NULL);
176         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
177         ret = system_settings_get_value_bool((system_settings_key_e)SST_DEPRECATED_KEY, &val);
178         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
179         ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &val);
180         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
181 }
182
183 TEST(SstApiTest, setValueBool)
184 {
185         bool getVal;
186         bool setVal = false;
187         sstm_vconf_set_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, 0);
188         int ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, setVal);
189         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
190         ret = system_settings_get_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, &getVal);
191         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
192         EXPECT_EQ(setVal, getVal);
193
194         ret = system_settings_set_value_bool((system_settings_key_e)SST_DEPRECATED_KEY, setVal);
195         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
196         ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, setVal);
197         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
198         ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_SOUND_LOCK, setVal);
199         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED, ret);
200 }
201
202 TEST(SstApiTest, getValueString)
203 {
204         char *val;
205         sstm_vconf_get_str_setup(VCONFKEY_REGIONFORMAT, "ko", 0);
206         int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &val);
207         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
208         free(val);
209
210         ret = system_settings_get_value_string((system_settings_key_e)SST_DEPRECATED_KEY, NULL);
211         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
212         ret = system_settings_get_value_string((system_settings_key_e)SST_DEPRECATED_KEY, &val);
213         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
214         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, &val);
215         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
216         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE_PKG_LIST, &val);
217         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED, ret);
218 }
219
220 TEST(SstApiTest, setValueString)
221 {
222         char *getVal;
223         const char *setVal = "ko_KR";
224         sstm_vconf_set_str_setup(VCONFKEY_REGIONFORMAT, 0);
225         int ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, setVal);
226         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
227         ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY, &getVal);
228         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
229         EXPECT_STREQ(setVal, getVal);
230         free(getVal);
231
232         ret = system_settings_set_value_string((system_settings_key_e)SST_DEPRECATED_KEY, setVal);
233         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
234         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, setVal);
235         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
236         ret = system_settings_set_value_string(SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE_PKG_LIST, setVal);
237         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED, ret);
238 }
239
240 TEST_F(SstApiCBTest, setUnsetChangedCallback)
241 {
242         bool oldVal;
243
244         sstm_vconf_notify_key_changed_setup(true);
245         sstm_vconf_ignore_key_changed_setup(true);
246         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
247
248         int ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedCallback, NULL);
249         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
250         resultCB = -1;
251         g_idle_add(checkCallbackIdle, &oldVal);
252         g_main_loop_run(loop);
253         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, resultCB);
254         ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION);
255         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
256
257         ret = system_settings_set_changed_cb((system_settings_key_e)SST_DEPRECATED_KEY, changedCallback, NULL);
258         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
259         ret = system_settings_unset_changed_cb((system_settings_key_e)SST_DEPRECATED_KEY);
260         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
261 }
262
263 TEST_F(SstApiCBTest, setUnsetChangedCallbackERR)
264 {
265         sstm_vconf_notify_key_changed_setup(false);
266         int ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedCallback, NULL);
267         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
268         sstm_vconf_ignore_key_changed_setup(false);
269         ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION);
270         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
271
272 }
273
274
275 TEST_F(SstApiCBTest, addDeleteForeachValueString)
276 {
277         sstm_access_setup(true);
278         sstm_vconf_get_str_setup(VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST, "[]", 0);
279         g_idle_add(checkRingtoneIdle, NULL);
280         g_main_loop_run(loop);
281 }
282
283 TEST_F(SstApiCBTest, ForeachValueString)
284 {
285         sstm_access_setup(true);
286         sstm_vconf_get_str_setup(VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST, "[]", 0);
287
288         sstm_opendir_setup(false);
289         int ret = system_settings_foreach_value_string(SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, ringtoneListCallback, NULL);
290         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
291         sstm_opendir_setup(true);
292 }
293
294 TEST_F(SstApiCBTest, addDeleteChangedCallback)
295 {
296         bool oldVal;
297
298         sstm_vconf_notify_key_changed_setup(true);
299         sstm_vconf_ignore_key_changed_setup(true);
300         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
301
302         int ret = system_settings_add_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedMultiCallback1, NULL);
303         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
304         ret = system_settings_add_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedMultiCallback2, NULL);
305         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
306         resultCB = 0;
307         g_idle_add(checkCallbackIdle, &oldVal);
308         g_main_loop_run(loop);
309         EXPECT_EQ(0x11, resultCB);
310         ret = system_settings_remove_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedMultiCallback1);
311         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
312         ret = system_settings_remove_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedMultiCallback2);
313         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
314         ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, oldVal);
315         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
316
317         ret = system_settings_add_changed_cb((system_settings_key_e)SST_DEPRECATED_KEY, changedMultiCallback1, NULL);
318         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
319         ret = system_settings_remove_changed_cb((system_settings_key_e)SST_DEPRECATED_KEY, changedMultiCallback1);
320         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
321 }
322
323 TEST_F(SstApiCBTest, addDeleteChangedCallbackERR)
324 {
325         sstm_vconf_notify_key_changed_setup(false);
326         int ret = system_settings_add_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedCallback, NULL);
327         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
328         sstm_vconf_ignore_key_changed_setup(false);
329         ret = system_settings_remove_changed_cb(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedCallback);
330         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
331 }
332
333
334 TEST_F(SstApiCBTest, subUnsubscribeCallback)
335 {
336         bool oldVal;
337         system_settings_cb_id cb[2];
338
339         sstm_vconf_notify_key_changed_setup(true);
340         sstm_vconf_ignore_key_changed_setup(true);
341         sstm_vconf_get_bool_setup(VCONFKEY_SETAPPL_MOTION_ACTIVATION, false, 0);
342
343         int ret = system_settings_subscribe_changes(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedMultiCallback1, NULL, &cb[0]);
344         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
345         ret = system_settings_subscribe_changes(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedMultiCallback2, NULL, &cb[1]);
346         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
347         resultCB = 0;
348         g_idle_add(checkCallbackIdle, &oldVal);
349         g_main_loop_run(loop);
350         EXPECT_EQ(0x11, resultCB);
351         ret = system_settings_unsubscribe_changes(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, cb[0]);
352         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
353         ret = system_settings_unsubscribe_changes(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, cb[1]);
354         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
355         ret = system_settings_set_value_bool(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, oldVal);
356         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_NONE, ret);
357
358         ret = system_settings_subscribe_changes((system_settings_key_e)SST_DEPRECATED_KEY, changedMultiCallback1, NULL, &cb[0]);
359         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
360         ret = system_settings_unsubscribe_changes((system_settings_key_e)SST_DEPRECATED_KEY, cb[0]);
361         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
362 }
363
364 TEST_F(SstApiCBTest, subUnsubscribeCallbackERR)
365 {
366         system_settings_cb_id cb;
367         sstm_vconf_notify_key_changed_setup(false);
368         int ret = system_settings_subscribe_changes(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, changedCallback, NULL, &cb);
369         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_IO_ERROR, ret);
370         sstm_vconf_ignore_key_changed_setup(false);
371         ret = system_settings_unsubscribe_changes(SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION, cb);
372         EXPECT_EQ(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, ret);
373 }