466b80a08899f6c2de6a3055769dea8c9680d150
[platform/core/system/sensord.git] / src / sensorctl / testcase / sensor_basic.cpp
1 /*
2  * sensorctl
3  *
4  * Copyright (c) 2017 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  */
19
20 #include <unistd.h>
21 #include <sensor_internal.h>
22
23 #include "log.h"
24 #include "mainloop.h"
25 #include "test_bench.h"
26 #include "sensor_adapter.h"
27
28 static void basic_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
29 {
30         EXPECT_GT(data->timestamp, 0);
31         //_N("[   DATA   ] %f\n", data->values[0]);
32         mainloop::stop();
33 }
34
35 TESTCASE(all_sensor_test, scenario_basic_p)
36 {
37         int err;
38         bool ret;
39         int count;
40         int handle;
41         sensor_t *sensors;
42         sensor_type_t type;
43
44         err = sensord_get_sensors(ALL_SENSOR, &sensors, &count);
45         ASSERT_EQ(err, 0);
46
47         for (int i = 0; i < count; ++i) {
48                 sensord_get_type(sensors[i], &type);
49                 /* TODO */
50                 _N("[   TYPE   ] %s\n", "UNKNOWN_SENSOR");
51
52                 sensor_info info(type, 0, 100, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
53
54                 ret = sensor_adapter::start(info, handle);
55                 EXPECT_TRUE(ret);
56
57                 mainloop::run();
58
59                 ret = sensor_adapter::stop(info, handle);
60                 EXPECT_TRUE(ret);
61         }
62
63         free(sensors);
64
65         return true;
66 }
67
68 typedef bool (*process_func_t)(const char *msg, int size, int count);
69
70 static pid_t run_process(process_func_t func, const char *msg, int size, int count)
71 {
72         pid_t pid = fork();
73         if (pid < 0)
74                 return -1;
75
76         if (pid == 0) {
77                 if (!func(msg, size, count))
78                         _E("Failed to run process\n");
79                 exit(0);
80         }
81
82         return pid;
83 }
84
85 static bool run_echo_command_test(const char *str, int size, int cout)
86 {
87         bool ret = true;
88         int handle;
89         char buf[4096] = {'1', '1', '1', };
90
91         sensor_info info(ACCELEROMETER_SENSOR, 0,
92                         100, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
93         sensor_adapter::get_handle(info, handle);
94
95         usleep(10000);
96         for (int i = 0; i < 1024; ++i)
97                 ret &= sensor_adapter::set_attribute(handle, SENSOR_ATTR_ACCELEROMETER_INJECTION, buf, 4096);
98         ASSERT_TRUE(ret);
99
100         return true;
101 }
102
103 TESTCASE(echo_command_test, echo_command_p)
104 {
105         pid_t pid;
106
107         usleep(100000);
108
109         for (int i = 0; i < 100; ++i) {
110                 pid = run_process(run_echo_command_test, NULL, 0, 0);
111                 EXPECT_GE(pid, 0);
112         }
113
114         pid = run_process(run_echo_command_test, NULL, 0, 0);
115         EXPECT_GE(pid, 0);
116
117         ASSERT_TRUE(true);
118         usleep(100000);
119
120         return true;
121 }
122
123 #if 0
124 TESTCASE(gyroscope_value_p)
125 {
126         scenario_basic_p(GYROSCOPE_SENSOR);
127 }
128
129 TESTCASE(gravitye_value_p)
130 {
131         scenario_basic_p(GRAVITY_SENSOR);
132 }
133
134 TESTCASE(linear_accel_value_p)
135 {
136         scenario_basic_p(LINEAR_ACCEL_SENSOR);
137 }
138
139 TESTCASE(proximity_value_p)
140 {
141         scenario_basic_p(PROXIMITY_SENSOR);
142 }
143
144 TESTCASE(pressure_value_p)
145 {
146         scenario_basic_p(PRESSURE_SENSOR);
147 }
148
149 TESTCASE(hrm_value_p)
150 {
151         scenario_basic_p(HRM_SENSOR);
152 }
153
154 TESTCASE(hrm_raw_value_p)
155 {
156         scenario_basic_p(HRM_RAW_SENSOR);
157 }
158
159 TESTCASE(hrm_led_green_value_p)
160 {
161         scenario_basic_p(HRM_LED_GREEN_SENSOR);
162 }
163
164 TESTCASE(wrist_up_value_p)
165 {
166         scenario_basic_p(GESTURE_WRIST_UP_SENSOR);
167 }
168 #endif