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);
62 ASSERT_FREE((count < 0), sensors);
70 TESTCASE(sensor_listener, connect_p_1)
76 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
79 handle = sensord_connect(sensor);
82 err = sensord_disconnect(handle);
88 TESTCASE(sensor_listener, all_api_p_1)
99 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
102 err = sensord_get_sensors(ALL_SENSOR, &list, &count);
105 handle = sensord_connect(sensor);
108 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
109 ASSERT_FREE(((ret != true) && list), list);
112 ret = sensord_start(handle, 0);
113 ASSERT_FREE(((ret != true) && list), list);
116 ret = sensord_change_event_interval(handle, 0, 100);
117 ASSERT_FREE(((ret != true) && list), list);
120 ret = sensord_change_event_max_batch_latency(handle, 0, 100);
121 ASSERT_FREE(((ret != true) && list), list);
126 ret = sensord_stop(handle);
127 ASSERT_FREE(((ret != true) && list), list);
130 ret = sensord_unregister_event(handle, 1);
131 ASSERT_FREE(((ret != true) && list), list);
134 ret = sensord_disconnect(handle);
135 ASSERT_FREE(((ret != true) && list), list);
143 TESTCASE(sensor_listener, bad_unregister_stop_order_p_1)
152 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
155 handle = sensord_connect(sensor);
156 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
157 ret = sensord_start(handle, 0);
158 ret = sensord_change_event_interval(handle, 0, 100);
162 /* [TEST] Unregister event before stop */
163 ret = sensord_unregister_event(handle, 1);
166 ret = sensord_stop(handle);
169 ret = sensord_disconnect(handle);
175 TESTCASE(sensor_listener, bad_disconnect_p_1)
184 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
187 handle = sensord_connect(sensor);
188 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
189 ret = sensord_start(handle, 0);
190 ret = sensord_change_event_interval(handle, 0, 100);
194 /* [TEST] Unregistering event is not called */
196 ret = sensord_stop(handle);
199 ret = sensord_disconnect(handle);
205 TESTCASE(sensor_listener, bad_disconnect_p_2)
214 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
217 handle = sensord_connect(sensor);
218 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
219 ret = sensord_start(handle, 0);
220 ret = sensord_change_event_interval(handle, 0, 100);
224 ret = sensord_unregister_event(handle, 1);
227 /* [TEST] stopping sensor is not called */
229 ret = sensord_disconnect(handle);
235 TESTCASE(sensor_listener, set_get_attribute_int_1)
240 sensor_t sensor = NULL;
244 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
247 handle = sensord_connect(sensor);
248 err = sensord_set_attribute_int(handle, attr, 1);
251 err = sensord_get_attribute_int(handle, attr, &value);
256 ret = sensord_disconnect(handle);
262 TESTCASE(sensor_listener, set_get_attribute_int_2)
267 sensor_t sensor = NULL;
271 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
274 handle = sensord_connect(sensor);
275 err = sensord_set_attribute_int(handle, attr, 1);
278 err = sensord_get_attribute_int(handle, attr, &value);
283 ret = sensord_disconnect(handle);
289 TESTCASE(sensor_listener, set_get_attribute_int_3)
294 sensor_t sensor = NULL;
298 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
301 handle = sensord_connect(sensor);
303 err = sensord_set_attribute_int(handle, attr, 1);
306 for (int i = 0 ; i < 10; i ++) {
307 err = sensord_get_attribute_int(handle, attr, &value);
313 ret = sensord_disconnect(handle);
319 TESTCASE(sensor_listener, get_attribute_int_1)
324 sensor_t sensor = NULL;
328 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
331 handle = sensord_connect(sensor);
333 // attr 100 value is never set in these tests.
334 err = sensord_get_attribute_int(handle, attr, &value);
337 ret = sensord_disconnect(handle);
343 #define TEST_STRING "TESTTESTTEST"
344 #define TEST_STRING_LEN 13
346 TESTCASE(sensor_listener, set_attribute_string_1)
351 sensor_t sensor = NULL;
354 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
357 handle = sensord_connect(sensor);
358 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
361 ret = sensord_disconnect(handle);
367 TESTCASE(sensor_listener, set_get_attribute_string_1)
374 sensor_t sensor = NULL;
377 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
380 handle = sensord_connect(sensor);
381 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
384 err = sensord_get_attribute_str(handle, attr, &value, &len);
386 ASSERT_EQ(len, TEST_STRING_LEN);
387 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
389 ret = sensord_disconnect(handle);
396 #define BUF_SIZE 4000
397 TESTCASE(sensor_listener, set_get_attribute_string_2)
404 sensor_t sensor = NULL;
406 char attr_value[BUF_SIZE] = {1, };
407 attr_value[BUF_SIZE - 1] = 1;
409 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
412 handle = sensord_connect(sensor);
413 err = sensord_set_attribute_str(handle, attr, attr_value, BUF_SIZE);
416 err = sensord_get_attribute_str(handle, attr, &value, &len);
418 ASSERT_EQ(len, BUF_SIZE);
420 ret = sensord_disconnect(handle);
427 TESTCASE(sensor_listener, set_get_attribute_string_3)
434 sensor_t sensor = NULL;
437 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
440 handle = sensord_connect(sensor);
441 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
444 for (int i = 0; i < 10; i++) {
445 err = sensord_get_attribute_str(handle, attr, &value, &len);
447 ASSERT_EQ(len, TEST_STRING_LEN);
448 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
451 ret = sensord_disconnect(handle);
458 TESTCASE(sensor_listener, set_get_get_attribute_string_1)
468 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
471 handle = sensord_connect(sensor);
472 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
475 err = sensord_get_attribute_str(handle, attr, &value, &len);
477 ASSERT_EQ(len, TEST_STRING_LEN);
478 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
480 ret = sensord_disconnect(handle);
488 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
491 handle = sensord_connect(sensor);
493 err = sensord_get_attribute_str(handle, attr, &value, &len);
495 ASSERT_EQ(len, TEST_STRING_LEN);
496 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
498 ret = sensord_disconnect(handle);
505 TESTCASE(sensor_listener, get_attribute_string_2)
515 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
518 handle = sensord_connect(sensor);
520 // attr 100 value is never set in these tests.
521 err = sensord_get_attribute_str(handle, attr, &value, &len);
522 ASSERT_EQ(err, -EIO);
524 ret = sensord_disconnect(handle);
530 #define SENSOR_SHIFT_TYPE 16
531 TESTCASE(sensor_listener, get_data_list)
541 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
544 handle = sensord_connect(sensor);
546 sensord_get_type(sensor, &type);
549 ret = sensord_start(handle, 0);
552 sensor_data_t* data_list = NULL;
554 unsigned int data_id = type << SENSOR_SHIFT_TYPE | 0x1;
556 ret = sensord_get_data_list(handle, data_id, &data_list, &count);
560 for (int i = 0 ; i < count; i++) {
561 _I("[%llu]", data_list[i].timestamp);
562 for (int j = 0; j < data_list[i].value_count; j++)
563 _I(" %f", data_list[i].values[j]);
568 ret = sensord_stop(handle);
571 ret = sensord_unregister_events(handle, 1);
574 ret = sensord_disconnect(handle);
580 void sensor_attribute_int_changed_callback(sensor_t sensor, int attribute, int value, void *data)
582 _I("[ATTRIBUTE INT CHANGED] attribute : %d, value : %d\n", attribute, value);
585 TESTCASE(skip_sensor_listener, register_attribute_int_changed)
594 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
597 handle = sensord_connect(sensor);
600 ret = sensord_register_attribute_int_changed_cb(handle, sensor_attribute_int_changed_callback, NULL);
603 ret = sensord_start(handle, 0);
608 ret = sensord_stop(handle);
611 ret = sensord_unregister_attribute_int_changed_cb(handle);
614 ret = sensord_disconnect(handle);
620 static int attribute = 1; // 1 is SENSOR_ATTRIBUTE_AXIS_ORIENTATION of sensor_attribute_e in sensor.h
621 static int attribute_value = 0;
623 static gboolean change_attribute_int(gpointer gdata)
625 int *handle = reinterpret_cast<int *>(gdata);
627 sensord_set_attribute_int(*handle, attribute, attribute_value);
629 _N("[ SET ATTRIBUTE INT ] attribute %d, value : %d\n", attribute, attribute_value);
631 g_timeout_add_seconds(1, change_attribute_int, handle);
633 attribute_value ? attribute_value = 0 : attribute_value = 1;
638 TESTCASE(skip_sensor_listener, attribute_int_changer)
647 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
650 handle = sensord_connect(sensor);
653 ret = sensord_start(handle, 0);
656 g_timeout_add_seconds(1, change_attribute_int, &handle);
659 ret = sensord_stop(handle);
662 ret = sensord_disconnect(handle);
668 void sensor_attribute_str_changed_callback(sensor_t sensor, int attribute, const char *value, int len, void *data)
670 _I("[ATTRIBUTE STR CHANGED] attribute : %d, value : %s, len : %d\n", attribute, value, len);
673 TESTCASE(skip_sensor_listener, register_attribute_str_changed)
682 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
685 handle = sensord_connect(sensor);
688 ret = sensord_register_attribute_str_changed_cb(handle, sensor_attribute_str_changed_callback, NULL);
691 ret = sensord_start(handle, 0);
696 ret = sensord_stop(handle);
699 ret = sensord_unregister_attribute_str_changed_cb(handle);
702 ret = sensord_disconnect(handle);
708 static const char *attribute_value_str1 = "test_str_1";
709 static const char *attribute_value_str2 = "test_str_2";
710 static const char *attribute_value_str = attribute_value_str1;
712 static gboolean change_attribute_str(gpointer gdata)
714 int *handle = reinterpret_cast<int *>(gdata);
715 int len = strlen(attribute_value_str) + 1;
716 sensord_set_attribute_str(*handle, attribute, attribute_value_str, len);
718 _N("[ SET ATTRIBUTE STR ] attribute %d, value : %s, len : %d\n", attribute, attribute_value_str, len);
720 g_timeout_add_seconds(1, change_attribute_str, handle);
722 if (attribute_value_str == attribute_value_str1) {
723 attribute_value_str = attribute_value_str2;
725 attribute_value_str = attribute_value_str1;
731 TESTCASE(skip_sensor_listener, attribute_str_changer)
740 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
743 handle = sensord_connect(sensor);
746 ret = sensord_start(handle, 0);
749 g_timeout_add_seconds(1, change_attribute_str, &handle);
752 ret = sensord_stop(handle);
755 ret = sensord_disconnect(handle);
761 TESTCASE(skip_sensor_listener, light_sensor_set_attribute_int_1)
766 sensor_t sensor = NULL;
770 err = sensord_get_default_sensor(LIGHT_SENSOR, &sensor);
773 handle = sensord_connect(sensor);
774 err = sensord_set_attribute_int(handle, attr, 2);
777 err = sensord_get_attribute_int(handle, attr, &value);
781 ret = sensord_disconnect(handle);
787 TESTCASE(skip_sensor_listener, light_sensor_get_attribute_int_1)
792 sensor_t sensor = NULL;
796 err = sensord_get_default_sensor(LIGHT_SENSOR, &sensor);
799 handle = sensord_connect(sensor);
800 err = sensord_get_attribute_int(handle, attr, &value);
804 ret = sensord_disconnect(handle);