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, set_get_attribute_int_3)
286 sensor_t sensor = NULL;
290 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
293 handle = sensord_connect(sensor);
295 err = sensord_set_attribute_int(handle, attr, 1);
298 for (int i = 0 ; i < 10; i ++) {
299 err = sensord_get_attribute_int(handle, attr, &value);
305 ret = sensord_disconnect(handle);
311 TESTCASE(sensor_listener, get_attribute_int_1)
316 sensor_t sensor = NULL;
320 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
323 handle = sensord_connect(sensor);
325 // attr 100 value is never set in these tests.
326 err = sensord_get_attribute_int(handle, attr, &value);
329 ret = sensord_disconnect(handle);
335 #define TEST_STRING "TESTTESTTEST"
336 #define TEST_STRING_LEN 13
338 TESTCASE(sensor_listener, set_attribute_string_1)
343 sensor_t sensor = NULL;
346 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
349 handle = sensord_connect(sensor);
350 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
353 ret = sensord_disconnect(handle);
359 TESTCASE(sensor_listener, set_get_attribute_string_1)
366 sensor_t sensor = NULL;
369 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
372 handle = sensord_connect(sensor);
373 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
376 err = sensord_get_attribute_str(handle, attr, &value, &len);
378 ASSERT_EQ(len, TEST_STRING_LEN);
379 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
381 ret = sensord_disconnect(handle);
388 #define BUF_SIZE 4000
389 TESTCASE(sensor_listener, set_get_attribute_string_2)
396 sensor_t sensor = NULL;
398 char attr_value[BUF_SIZE] = {1, };
399 attr_value[BUF_SIZE - 1] = 1;
401 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
404 handle = sensord_connect(sensor);
405 err = sensord_set_attribute_str(handle, attr, attr_value, BUF_SIZE);
408 err = sensord_get_attribute_str(handle, attr, &value, &len);
410 ASSERT_EQ(len, BUF_SIZE);
412 ret = sensord_disconnect(handle);
419 TESTCASE(sensor_listener, set_get_attribute_string_3)
426 sensor_t sensor = NULL;
429 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
432 handle = sensord_connect(sensor);
433 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
436 for (int i = 0; i < 10; i++) {
437 err = sensord_get_attribute_str(handle, attr, &value, &len);
439 ASSERT_EQ(len, TEST_STRING_LEN);
440 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
443 ret = sensord_disconnect(handle);
450 TESTCASE(sensor_listener, set_get_get_attribute_string_1)
460 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
463 handle = sensord_connect(sensor);
464 err = sensord_set_attribute_str(handle, attr, TEST_STRING, TEST_STRING_LEN);
467 err = sensord_get_attribute_str(handle, attr, &value, &len);
469 ASSERT_EQ(len, TEST_STRING_LEN);
470 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
472 ret = sensord_disconnect(handle);
480 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
483 handle = sensord_connect(sensor);
485 err = sensord_get_attribute_str(handle, attr, &value, &len);
487 ASSERT_EQ(len, TEST_STRING_LEN);
488 ASSERT_EQ(strncmp(value, TEST_STRING, len), 0);
490 ret = sensord_disconnect(handle);
497 TESTCASE(sensor_listener, get_attribute_string_2)
507 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
510 handle = sensord_connect(sensor);
512 // attr 100 value is never set in these tests.
513 err = sensord_get_attribute_str(handle, attr, &value, &len);
514 ASSERT_EQ(err, -EIO);
516 ret = sensord_disconnect(handle);
522 #define SENSOR_SHIFT_TYPE 16
523 TESTCASE(sensor_listener, get_data_list)
533 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
536 handle = sensord_connect(sensor);
538 sensord_get_type(sensor, &type);
541 ret = sensord_start(handle, 0);
544 sensor_data_t* data_list = NULL;
546 unsigned int data_id = type << SENSOR_SHIFT_TYPE | 0x1;
548 ret = sensord_get_data_list(handle, data_id, &data_list, &count);
552 for (int i = 0 ; i < count; i++) {
553 _I("[%llu]", data_list[i].timestamp);
554 for (int j = 0; j < data_list[i].value_count; j++)
555 _I(" %f", data_list[i].values[j]);
560 ret = sensord_stop(handle);
563 ret = sensord_unregister_events(handle, 1);
566 ret = sensord_disconnect(handle);
572 void sensor_attribute_int_changed_callback(sensor_t sensor, int attribute, int value, void *data)
574 _I("[ATTRIBUTE INT CHANGED] attribute : %d, value : %d\n", attribute, value);
577 TESTCASE(skip_sensor_listener, register_attribute_int_changed)
586 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
589 handle = sensord_connect(sensor);
592 ret = sensord_register_attribute_int_changed_cb(handle, sensor_attribute_int_changed_callback, NULL);
595 ret = sensord_start(handle, 0);
600 ret = sensord_stop(handle);
603 ret = sensord_unregister_attribute_int_changed_cb(handle);
606 ret = sensord_disconnect(handle);
612 static int attribute = 1; // 1 is SENSOR_ATTRIBUTE_AXIS_ORIENTATION of sensor_attribute_e in sensor.h
613 static int attribute_value = 0;
615 static gboolean change_attribute_int(gpointer gdata)
617 int *handle = reinterpret_cast<int *>(gdata);
619 sensord_set_attribute_int(*handle, attribute, attribute_value);
621 _N("[ SET ATTRIBUTE INT ] attribute %d, value : %d\n", attribute, attribute_value);
623 g_timeout_add_seconds(1, change_attribute_int, handle);
625 attribute_value ? attribute_value = 0 : attribute_value = 1;
630 TESTCASE(skip_sensor_listener, attribute_int_changer)
639 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
642 handle = sensord_connect(sensor);
645 ret = sensord_start(handle, 0);
648 g_timeout_add_seconds(1, change_attribute_int, &handle);
651 ret = sensord_stop(handle);
654 ret = sensord_disconnect(handle);
660 void sensor_attribute_str_changed_callback(sensor_t sensor, int attribute, const char *value, int len, void *data)
662 _I("[ATTRIBUTE STR CHANGED] attribute : %d, value : %s, len : %d\n", attribute, value, len);
665 TESTCASE(skip_sensor_listener, register_attribute_str_changed)
674 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
677 handle = sensord_connect(sensor);
680 ret = sensord_register_attribute_str_changed_cb(handle, sensor_attribute_str_changed_callback, NULL);
683 ret = sensord_start(handle, 0);
688 ret = sensord_stop(handle);
691 ret = sensord_unregister_attribute_str_changed_cb(handle);
694 ret = sensord_disconnect(handle);
700 static const char *attribute_value_str1 = "test_str_1";
701 static const char *attribute_value_str2 = "test_str_2";
702 static const char *attribute_value_str = attribute_value_str1;
704 static gboolean change_attribute_str(gpointer gdata)
706 int *handle = reinterpret_cast<int *>(gdata);
707 int len = strlen(attribute_value_str) + 1;
708 sensord_set_attribute_str(*handle, attribute, attribute_value_str, len);
710 _N("[ SET ATTRIBUTE STR ] attribute %d, value : %s, len : %d\n", attribute, attribute_value_str, len);
712 g_timeout_add_seconds(1, change_attribute_str, handle);
714 if (attribute_value_str == attribute_value_str1) {
715 attribute_value_str = attribute_value_str2;
717 attribute_value_str = attribute_value_str1;
723 TESTCASE(skip_sensor_listener, attribute_str_changer)
732 err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
735 handle = sensord_connect(sensor);
738 ret = sensord_start(handle, 0);
741 g_timeout_add_seconds(1, change_attribute_str, &handle);
744 ret = sensord_stop(handle);
747 ret = sensord_disconnect(handle);
753 TESTCASE(skip_sensor_listener, light_sensor_set_attribute_int_1)
758 sensor_t sensor = NULL;
762 err = sensord_get_default_sensor(LIGHT_SENSOR, &sensor);
765 handle = sensord_connect(sensor);
766 err = sensord_set_attribute_int(handle, attr, 2);
769 err = sensord_get_attribute_int(handle, attr, &value);
773 ret = sensord_disconnect(handle);
779 TESTCASE(skip_sensor_listener, light_sensor_get_attribute_int_1)
784 sensor_t sensor = NULL;
788 err = sensord_get_default_sensor(LIGHT_SENSOR, &sensor);
791 handle = sensord_connect(sensor);
792 err = sensord_get_attribute_int(handle, attr, &value);
796 ret = sensord_disconnect(handle);