04cba10caa754ba76a52b5e2492b74ec8b0c6c62
[platform/core/system/deviced.git] / src / auto-test / time.c
1 /*
2  * test
3  *
4  * Copyright (c) 2013 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 #include "test.h"
19
20 #define METHOD_TIME_SET_DATETIME        "set_datetime"
21 #define METHOD_TIME_SET_TIMEZONE        "set_timezone"
22
23 static bool request_sysnoti_method(const char *method, GVariant *param)
24 {
25         GVariant *msg;
26         int val, err;
27         bool ret = FALSE;
28
29         err = dbus_handle_method_sync_with_reply_var(DEVICED_BUS_NAME,
30                                                 DEVICED_PATH_SYSNOTI,
31                                                 DEVICED_INTERFACE_SYSNOTI,
32                                                 method,
33                                                 param,
34                                                 &msg);
35         if (err < 0) {
36                 _E("fail (%s): no reply", method);
37                 return ret;
38         }
39
40         if (!g_variant_get_safe(msg, "(i)", &val))
41                 _E("fail (%s): no message", method);
42         else {
43                 if ((val == -ENOTSUP) || (val == -ENOSYS)) {
44                         _I("Not supported feature! (%s): %d", method, val);
45                         ret = TRUE;
46                 } else if (val < 0) {
47                         _E("fail (%s): returned fail (%d)", method, val);
48                 } else {
49                         _I("success (%s): %d", method, val);
50                         ret = TRUE;
51                 }
52         }
53
54         g_variant_unref(msg);
55         return ret;
56 }
57
58 static bool set_time_datetime(int date_time)
59 {
60         char str_time[10];
61         snprintf(str_time, sizeof(str_time) - 1, "%d", date_time);
62         return request_sysnoti_method(METHOD_TIME_SET_DATETIME, g_variant_new("(sis)", METHOD_TIME_SET_DATETIME, 1, str_time));
63 }
64
65 static bool set_time_timezone(char *localtime_path)
66 {
67         return request_sysnoti_method(METHOD_TIME_SET_TIMEZONE, g_variant_new("(sis)", METHOD_TIME_SET_TIMEZONE, 1, localtime_path));
68 }
69
70 void time_test_all(int *success, int *fail)
71 {
72         int s = 0;
73         int f = 0;
74
75         (set_time_datetime(time(NULL)-600))             ? s++ : f++;
76         (set_time_datetime(time(NULL)))                 ? s++ : f++;
77         (set_time_timezone("/usr/share/zoneinfo/America/Cancun"))       ? s++ : f++;
78         (set_time_timezone("/usr/share/zoneinfo/Asia/Seoul"))           ? s++ : f++;
79
80         if (NULL != success)    *success = s;
81         if (NULL != fail)       *fail = f;
82 }
83
84 static void time_init(void *data)
85 {
86         int success = 0;
87         int fail = 0;
88
89         _I("start test");
90
91         time_test_all(&success, &fail);
92
93         _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail);
94 }
95
96 static void time_exit(void *data)
97 {
98         _I("end test");
99 }
100
101 static int time_unit(int argc, char **argv)
102 {
103         if (argc < 4) {
104                 int success = 0;
105                 int fail = 0;
106
107                 _I("start test");
108                 time_test_all(&success, &fail);
109                 _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail);
110         } else if (0 == strcasecmp(argv[3], METHOD_TIME_SET_DATETIME)) {
111                 set_time_datetime(atoi(argv[4]));
112         } else if (0 == strcasecmp(argv[3], METHOD_TIME_SET_TIMEZONE)) {
113                 set_time_timezone(argv[4]);
114         } else {
115                 _E("Unknown test case!!!");
116         }
117
118         return 0;
119 }
120
121 static const struct test_ops time_test_ops = {
122         .priority = TEST_PRIORITY_NORMAL,
123         .name     = "time",
124         .init     = time_init,
125         .exit    = time_exit,
126         .unit    = time_unit,
127 };
128
129 TEST_OPS_REGISTER(&time_test_ops)