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)
58 sensor_t *sensors = nullptr;
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);
559 for (int i = 0 ; i < count; i++) {
560 _I("[%llu]", data_list[i].timestamp);
561 for (int j = 0; j < data_list[i].value_count; j++)
562 _I(" %f", data_list[i].values[j]);
567 ret = sensord_stop(handle);
570 ret = sensord_unregister_events(handle, 1);
573 ret = sensord_disconnect(handle);
579 void sensor_attribute_int_changed_callback(sensor_t sensor, int attribute, int value, void *data)
581 _I("[ATTRIBUTE INT CHANGED] attribute : %d, value : %d\n", attribute, value);
584 TESTCASE(skip_sensor_listener, register_attribute_int_changed)
593 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
596 handle = sensord_connect(sensor);
599 ret = sensord_register_attribute_int_changed_cb(handle, sensor_attribute_int_changed_callback, NULL);
602 ret = sensord_start(handle, 0);
607 ret = sensord_stop(handle);
610 ret = sensord_unregister_attribute_int_changed_cb(handle);
613 ret = sensord_disconnect(handle);
619 static int attribute = 1; // 1 is SENSOR_ATTRIBUTE_AXIS_ORIENTATION of sensor_attribute_e in sensor.h
620 static int attribute_value = 0;
622 static gboolean change_attribute_int(gpointer gdata)
624 int *handle = reinterpret_cast<int *>(gdata);
626 sensord_set_attribute_int(*handle, attribute, attribute_value);
628 _N("[ SET ATTRIBUTE INT ] attribute %d, value : %d\n", attribute, attribute_value);
630 g_timeout_add_seconds(1, change_attribute_int, handle);
632 attribute_value ? attribute_value = 0 : attribute_value = 1;
637 TESTCASE(skip_sensor_listener, attribute_int_changer)
646 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
649 handle = sensord_connect(sensor);
652 ret = sensord_start(handle, 0);
655 g_timeout_add_seconds(1, change_attribute_int, &handle);
658 ret = sensord_stop(handle);
661 ret = sensord_disconnect(handle);
667 void sensor_attribute_str_changed_callback(sensor_t sensor, int attribute, const char *value, int len, void *data)
669 _I("[ATTRIBUTE STR CHANGED] attribute : %d, value : %s, len : %d\n", attribute, value, len);
672 TESTCASE(skip_sensor_listener, register_attribute_str_changed)
681 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
684 handle = sensord_connect(sensor);
687 ret = sensord_register_attribute_str_changed_cb(handle, sensor_attribute_str_changed_callback, NULL);
690 ret = sensord_start(handle, 0);
695 ret = sensord_stop(handle);
698 ret = sensord_unregister_attribute_str_changed_cb(handle);
701 ret = sensord_disconnect(handle);
707 static const char *attribute_value_str1 = "test_str_1";
708 static const char *attribute_value_str2 = "test_str_2";
709 static const char *attribute_value_str = attribute_value_str1;
711 static gboolean change_attribute_str(gpointer gdata)
713 int *handle = reinterpret_cast<int *>(gdata);
714 int len = strlen(attribute_value_str) + 1;
715 sensord_set_attribute_str(*handle, attribute, attribute_value_str, len);
717 _N("[ SET ATTRIBUTE STR ] attribute %d, value : %s, len : %d\n", attribute, attribute_value_str, len);
719 g_timeout_add_seconds(1, change_attribute_str, handle);
721 if (attribute_value_str == attribute_value_str1) {
722 attribute_value_str = attribute_value_str2;
724 attribute_value_str = attribute_value_str1;
730 TESTCASE(skip_sensor_listener, attribute_str_changer)
739 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
742 handle = sensord_connect(sensor);
745 ret = sensord_start(handle, 0);
748 g_timeout_add_seconds(1, change_attribute_str, &handle);
751 ret = sensord_stop(handle);
754 ret = sensord_disconnect(handle);
760 TESTCASE(skip_sensor_listener, light_sensor_set_attribute_int_1)
765 sensor_t sensor = NULL;
769 err = sensord_get_default_sensor(LIGHT_SENSOR, &sensor);
772 handle = sensord_connect(sensor);
773 err = sensord_set_attribute_int(handle, attr, 2);
776 err = sensord_get_attribute_int(handle, attr, &value);
780 ret = sensord_disconnect(handle);
786 TESTCASE(skip_sensor_listener, light_sensor_get_attribute_int_1)
791 sensor_t sensor = NULL;
795 err = sensord_get_default_sensor(LIGHT_SENSOR, &sensor);
798 handle = sensord_connect(sensor);
799 err = sensord_get_attribute_int(handle, attr, &value);
803 ret = sensord_disconnect(handle);