4 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <sensor_internal.h>
23 #include <sensor_utils.h>
25 #include <client/sensor_manager.h>
26 #include <client/sensor_listener.h>
30 #include "test_bench.h"
32 static bool called = false;
35 static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
37 _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
43 TESTCASE(sensor_listener, get_default_sensor_p_1)
48 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
54 TESTCASE(sensor_listener, get_sensors_p_1)
60 err = sensord_get_sensors(ACCELEROMETER_SENSOR, &sensors, &count);
69 TESTCASE(sensor_listener, connect_p_1)
75 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
78 handle = sensord_connect(sensor);
81 err = sensord_disconnect(handle);
87 TESTCASE(sensor_listener, all_api_p_1)
98 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
101 err = sensord_get_sensors(ALL_SENSOR, &list, &count);
104 handle = sensord_connect(sensor);
107 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
110 ret = sensord_start(handle, 0);
113 ret = sensord_change_event_interval(handle, 0, 100);
116 ret = sensord_change_event_max_batch_latency(handle, 0, 100);
121 ret = sensord_stop(handle);
124 ret = sensord_unregister_event(handle, 1);
127 ret = sensord_disconnect(handle);
135 TESTCASE(sensor_listener, bad_unregister_stop_order_p_1)
144 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
147 handle = sensord_connect(sensor);
148 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
149 ret = sensord_start(handle, 0);
150 ret = sensord_change_event_interval(handle, 0, 100);
154 /* [TEST] Unregister event before stop */
155 ret = sensord_unregister_event(handle, 1);
158 ret = sensord_stop(handle);
161 ret = sensord_disconnect(handle);
167 TESTCASE(sensor_listener, bad_disconnect_p_1)
176 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
179 handle = sensord_connect(sensor);
180 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
181 ret = sensord_start(handle, 0);
182 ret = sensord_change_event_interval(handle, 0, 100);
186 /* [TEST] Unregistering event is not called */
188 ret = sensord_stop(handle);
191 ret = sensord_disconnect(handle);
197 TESTCASE(sensor_listener, bad_disconnect_p_2)
206 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
209 handle = sensord_connect(sensor);
210 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
211 ret = sensord_start(handle, 0);
212 ret = sensord_change_event_interval(handle, 0, 100);
216 ret = sensord_unregister_event(handle, 1);
219 /* [TEST] stopping sensor is not called */
221 ret = sensord_disconnect(handle);
227 TESTCASE(sensor_listener, set_get_attribute_int_1)
232 sensor_t sensor = NULL;
236 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
239 handle = sensord_connect(sensor);
240 err = sensord_set_attribute_int(handle, attr, 1);
243 err = sensord_get_attribute_int(handle, attr, &value);
248 ret = sensord_disconnect(handle);
254 TESTCASE(sensor_listener, set_get_attribute_int_2)
259 sensor_t sensor = NULL;
263 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
266 handle = sensord_connect(sensor);
267 err = sensord_set_attribute_int(handle, attr, 1);
270 err = sensord_get_attribute_int(handle, attr, &value);
275 ret = sensord_disconnect(handle);
281 TESTCASE(sensor_listener, get_attribute_int_1)
286 sensor_t sensor = NULL;
290 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
293 handle = sensord_connect(sensor);
295 // attr 100 value is never set in these tests.
296 err = sensord_get_attribute_int(handle, attr, &value);
299 ret = sensord_disconnect(handle);
305 #define TEST_STRING "TESTTESTTEST"
306 #define TEST_STRING_LEN 13
308 TESTCASE(sensor_listener, set_attribute_string_1)
313 sensor_t sensor = NULL;
316 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
319 handle = sensord_connect(sensor);
320 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
323 ret = sensord_disconnect(handle);
329 TESTCASE(sensor_listener, set_get_attribute_string_1)
336 sensor_t sensor = NULL;
339 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
342 handle = sensord_connect(sensor);
343 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
346 err = sensord_get_attribute_str(handle, attr, &value, &len);
348 ASSERT_EQ(len, TEST_STRING_LEN);
349 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
351 ret = sensord_disconnect(handle);
358 TESTCASE(sensor_listener, set_get_get_attribute_string_1)
368 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
371 handle = sensord_connect(sensor);
372 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
375 err = sensord_get_attribute_str(handle, attr, &value, &len);
377 ASSERT_EQ(len, TEST_STRING_LEN);
378 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
380 ret = sensord_disconnect(handle);
388 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
391 handle = sensord_connect(sensor);
393 err = sensord_get_attribute_str(handle, attr, &value, &len);
395 ASSERT_EQ(len, TEST_STRING_LEN);
396 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
398 ret = sensord_disconnect(handle);
405 TESTCASE(sensor_listener, get_attribute_string_2)
415 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
418 handle = sensord_connect(sensor);
420 // attr 100 value is never set in these tests.
421 err = sensord_get_attribute_str(handle, attr, &value, &len);
422 ASSERT_EQ(err, -EIO);
424 ret = sensord_disconnect(handle);
430 #define SENSOR_SHIFT_TYPE 16
431 TESTCASE(sensor_listener, get_data_list)
441 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
444 handle = sensord_connect(sensor);
446 sensord_get_type(sensor, &type);
449 ret = sensord_start(handle, 0);
452 sensor_data_t* data_list = NULL;
454 unsigned int data_id = type << SENSOR_SHIFT_TYPE | 0x1;
456 ret = sensord_get_data_list(handle, data_id, &data_list, &count);
460 for (int i = 0 ; i < count; i++) {
461 _I("[%llu]", data_list[i].timestamp);
462 for (int j = 0; j < data_list[i].value_count; j++)
463 _I(" %f", data_list[i].values[j]);
468 ret = sensord_stop(handle);
471 ret = sensord_unregister_events(handle, 1);
474 ret = sensord_disconnect(handle);
480 void sensor_attribute_int_changed_callback(sensor_t sensor, int attribute, int value, void *data)
482 _I("[ATTRIBUTE INT CHANGED] attribute : %d, value : %d\n", attribute, value);
485 TESTCASE(skip_sensor_listener, register_attribute_int_changed)
494 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
497 handle = sensord_connect(sensor);
500 ret = sensord_register_attribute_int_changed_cb(handle, sensor_attribute_int_changed_callback, NULL);
503 ret = sensord_start(handle, 0);
508 ret = sensord_stop(handle);
511 ret = sensord_unregister_attribute_int_changed_cb(handle);
514 ret = sensord_disconnect(handle);
520 static int attribute = 1; // 1 is SENSOR_ATTRIBUTE_AXIS_ORIENTATION of sensor_attribute_e in sensor.h
521 static int attribute_value = 0;
523 static gboolean change_attribute_int(gpointer gdata)
525 int *handle = reinterpret_cast<int *>(gdata);
527 sensord_set_attribute_int(*handle, attribute, attribute_value);
529 _N("[ SET ATTRIBUTE INT ] attribute %d, value : %d\n", attribute, attribute_value);
531 g_timeout_add_seconds(1, change_attribute_int, handle);
533 attribute_value ? attribute_value = 0 : attribute_value = 1;
538 TESTCASE(skip_sensor_listener, attribute_int_changer)
547 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
550 handle = sensord_connect(sensor);
553 ret = sensord_start(handle, 0);
556 g_timeout_add_seconds(1, change_attribute_int, &handle);
559 ret = sensord_stop(handle);
562 ret = sensord_disconnect(handle);
568 void sensor_attribute_str_changed_callback(sensor_t sensor, int attribute, const char *value, int len, void *data)
570 _I("[ATTRIBUTE STR CHANGED] attribute : %d, value : %s, len : %d\n", attribute, value, len);
573 TESTCASE(skip_sensor_listener, register_attribute_str_changed)
582 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
585 handle = sensord_connect(sensor);
588 ret = sensord_register_attribute_str_changed_cb(handle, sensor_attribute_str_changed_callback, NULL);
591 ret = sensord_start(handle, 0);
596 ret = sensord_stop(handle);
599 ret = sensord_unregister_attribute_int_changed_cb(handle);
602 ret = sensord_disconnect(handle);
608 static const char *attribute_value_str1 = "test_str_1";
609 static const char *attribute_value_str2 = "test_str_2";
610 static const char *attribute_value_str = attribute_value_str1;
612 static gboolean change_attribute_str(gpointer gdata)
614 int *handle = reinterpret_cast<int *>(gdata);
615 int len = strlen(attribute_value_str) + 1;
616 sensord_set_attribute_str(*handle, attribute, attribute_value_str, len);
618 _N("[ SET ATTRIBUTE STR ] attribute %d, value : %s, len : %d\n", attribute, attribute_value_str, len);
620 g_timeout_add_seconds(1, change_attribute_str, handle);
622 if (attribute_value_str == attribute_value_str1) {
623 attribute_value_str = attribute_value_str2;
625 attribute_value_str = attribute_value_str1;
631 TESTCASE(skip_sensor_listener, attribute_str_changer)
640 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
643 handle = sensord_connect(sensor);
646 ret = sensord_start(handle, 0);
649 g_timeout_add_seconds(1, change_attribute_str, &handle);
652 ret = sensord_stop(handle);
655 ret = sensord_disconnect(handle);