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>
27 #include "test_bench.h"
29 #define MYSENSOR_URI "http://example.org/sensor/general/mysensor/mysensor"
30 #define MYSENSOR_BATCH_URI "http://example.org/sensor/general/mysensor/mysensor-batch"
32 #define MYSENSOR_NAME "mysensor"
33 #define MYSENSOR_BATCH_NAME "mysensor-batch"
34 #define MYSENSOR_VENDOR "tizen"
36 #define NUMBER_OF_EVENT 100
38 static bool started = false;
39 static bool added = false;
40 static bool called = false;
42 static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
44 _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
47 static void events_cb(sensor_t sensor, unsigned int event_type, sensor_data_t datas[], int events_count, void *user_data)
49 for (int i = 0 ; i < events_count; i++) {
50 _I("[%llu]", datas[i].timestamp);
51 for (int j = 0; j < datas[i].value_count; j++)
52 _I(" %f", datas[i].values[j]);
57 static void start_cb(sensord_provider_h provider, void *user_data)
63 static void stop_cb(sensord_provider_h provider, void *user_data)
69 static void interval_cb(sensord_provider_h provider, unsigned int interval_ms, void *user_data)
71 _N("Interval : %d\n", interval_ms);
74 static gboolean publish(gpointer gdata)
76 if (!started) return TRUE;
78 sensord_provider_h *provider = reinterpret_cast<sensord_provider_h *>(gdata);
82 data.timestamp = sensor::utils::get_timestamp();
88 _N("[%llu] %f %f %f\n", data.timestamp, data.values[0], data.values[1], data.values[2]);
89 sensord_provider_publish(provider, data);
93 static gboolean publish_batch_event(gpointer gdata)
95 if (!started) return FALSE;
97 sensord_provider_h *provider = reinterpret_cast<sensord_provider_h *>(gdata);
99 sensor_data_t data[NUMBER_OF_EVENT];
101 for (int i = 0 ; i < NUMBER_OF_EVENT; i++) {
102 data[i].accuracy = 3;
103 data[i].timestamp = sensor::utils::get_timestamp();
104 data[i].value_count = 3;
105 data[i].values[0] = i;
106 data[i].values[1] = i;
107 data[i].values[2] = i;
109 sensord_provider_publish_events(provider, data, NUMBER_OF_EVENT);
110 _N("[ PUBLISH ] %d events\n", NUMBER_OF_EVENT);
111 g_timeout_add_seconds(1, publish_batch_event, provider);
115 static void add_mysensor(void)
117 sensord_provider_h provider;
119 sensord_create_provider(MYSENSOR_URI, &provider);
120 sensord_provider_set_name(provider, MYSENSOR_NAME);
121 sensord_provider_set_vendor(provider, MYSENSOR_VENDOR);
122 sensord_provider_set_range(provider, 0.0f, 1.0f);
123 sensord_provider_set_resolution(provider, 0.01f);
125 sensord_add_provider(provider);
127 sensord_remove_provider(provider);
128 sensord_destroy_provider(provider);
131 static void added_cb(const char *uri, void *user_data)
133 _I("[ ADDED ] %s\n", uri);
137 static void removed_cb(const char *uri, void *user_data)
139 _I("[ REMOVED ] %s\n", uri);
144 TESTCASE(sensor_provider, check_uri)
147 sensord_provider_h provider;
149 const char *uri_p1 = "http://example.org/sensor/general/mysensor_type/mysensor";
150 const char *uri_p2 = "http://developer.samsung.com/sensor/general/mysensor_type/mysensor";
151 const char *uri_n1 = "http://tizen.org/sensor/general/accelerometer/mysensor";
152 const char *uri_n2 = "http://tizen.org/mysensor/general/accelerometer/mysensor";
153 const char *uri_n3 = "http:/example.org/sensor/general/mysensor_type/mysensor";
154 const char *uri_n5 = "http://example.org/sensor/general/mysensor_type";
155 const char *uri_n4 = "http://example.org/sensor/general/mysensor_type/mysensor/mysensor";
157 err = sensord_create_provider(uri_p1, &provider);
159 err = sensord_create_provider(uri_p2, &provider);
161 err = sensord_create_provider(uri_n1, &provider);
162 EXPECT_EQ(err, -EINVAL);
163 err = sensord_create_provider(uri_n2, &provider);
164 EXPECT_EQ(err, -EINVAL);
165 err = sensord_create_provider(uri_n3, &provider);
166 EXPECT_EQ(err, -EINVAL);
167 err = sensord_create_provider(uri_n4, &provider);
168 EXPECT_EQ(err, -EINVAL);
169 err = sensord_create_provider(uri_n5, &provider);
170 EXPECT_EQ(err, -EINVAL);
175 /* TODO: change it from manual test to auto-test */
176 TESTCASE(skip_sensor_provider, mysensor_added_removed_cb_p_1)
178 int ret = sensord_add_sensor_added_cb(added_cb, NULL);
180 ret = sensord_add_sensor_removed_cb(removed_cb, NULL);
187 ret = sensord_remove_sensor_added_cb(added_cb);
189 ret = sensord_remove_sensor_removed_cb(removed_cb);
195 /* TODO: change it from manual test to auto-test */
196 TESTCASE(skip_sensor_provider, mysensor_p)
200 sensord_provider_h provider;
202 err = sensord_create_provider(MYSENSOR_URI, &provider);
205 err = sensord_provider_set_name(provider, MYSENSOR_NAME);
207 err = sensord_provider_set_vendor(provider, MYSENSOR_VENDOR);
209 err = sensord_provider_set_range(provider, 0.0f, 1.0f);
211 err = sensord_provider_set_resolution(provider, 0.01f);
214 err = sensord_add_provider(provider);
217 err = sensord_provider_set_start_cb(provider, start_cb, NULL);
219 err = sensord_provider_set_stop_cb(provider, stop_cb, NULL);
221 err = sensord_provider_set_interval_changed_cb(provider, interval_cb, NULL);
224 err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor);
227 g_timeout_add_seconds(1, publish, provider);
230 err = sensord_remove_provider(provider);
232 err = sensord_destroy_provider(provider);
238 /* TODO: change it from manual test to auto-test */
239 TESTCASE(skip_sensor_provider, mysensor_with_listener_p_1)
248 err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor);
251 handle = sensord_connect(sensor);
254 ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
257 ret = sensord_start(handle, 0);
260 ret = sensord_change_event_interval(handle, 0, 100);
265 ret = sensord_stop(handle);
268 ret = sensord_unregister_event(handle, 1);
271 ret = sensord_disconnect(handle);
277 /* TODO: change it from manual test to auto-test */
278 TESTCASE(skip_sensor_provider, mysensor_batch_p)
282 sensord_provider_h provider;
284 err = sensord_create_provider(MYSENSOR_BATCH_URI, &provider);
287 err = sensord_provider_set_name(provider, MYSENSOR_BATCH_NAME);
289 err = sensord_provider_set_vendor(provider, MYSENSOR_VENDOR);
291 err = sensord_provider_set_range(provider, 0.0f, 1.0f);
293 err = sensord_provider_set_resolution(provider, 0.01f);
296 err = sensord_add_provider(provider);
299 err = sensord_provider_set_start_cb(provider, start_cb, NULL);
301 err = sensord_provider_set_stop_cb(provider, stop_cb, NULL);
303 err = sensord_provider_set_interval_changed_cb(provider, interval_cb, NULL);
306 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
309 g_timeout_add_seconds(1, publish_batch_event, provider);
312 err = sensord_remove_provider(provider);
314 err = sensord_destroy_provider(provider);
321 /* TODO: change it from manual test to auto-test */
322 TESTCASE(skip_sensor_provider, mysensor_batch_with_listener_p_1)
331 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
334 handle = sensord_connect(sensor);
337 ret = sensord_register_events(handle, 1, 100, events_cb, NULL);
340 ret = sensord_start(handle, 0);
343 ret = sensord_change_event_interval(handle, 0, 100);
348 ret = sensord_stop(handle);
351 ret = sensord_unregister_events(handle, 1);
354 ret = sensord_disconnect(handle);
360 TESTCASE(skip_sensor_provider, mysensor_batch_events_once)
365 sensord_provider_h provider;
367 err = sensord_create_provider(MYSENSOR_BATCH_URI, &provider);
370 err = sensord_provider_set_name(provider, MYSENSOR_BATCH_NAME);
372 err = sensord_provider_set_vendor(provider, MYSENSOR_VENDOR);
374 err = sensord_provider_set_range(provider, 0.0f, 1.0f);
376 err = sensord_provider_set_resolution(provider, 0.01f);
379 err = sensord_add_provider(provider);
382 err = sensord_provider_set_start_cb(provider, start_cb, NULL);
384 err = sensord_provider_set_stop_cb(provider, stop_cb, NULL);
386 err = sensord_provider_set_interval_changed_cb(provider, interval_cb, NULL);
389 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
393 sensor_t client_sensor;
394 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &client_sensor);
396 client_handle = sensord_connect(client_sensor);
399 ret = sensord_start(client_handle, 0);
402 sensor_data_t data[NUMBER_OF_EVENT];
403 for (int i = 0 ; i < NUMBER_OF_EVENT; i++) {
404 data[i].accuracy = 3;
405 data[i].timestamp = sensor::utils::get_timestamp();
406 data[i].value_count = 3;
407 data[i].values[0] = i;
408 data[i].values[1] = i;
409 data[i].values[2] = i;
411 err = sensord_provider_publish_events(provider, data, NUMBER_OF_EVENT);
414 ret = sensord_stop(client_handle);
416 ret = sensord_disconnect(client_handle);
421 err = sensord_remove_provider(provider);
423 err = sensord_destroy_provider(provider);
429 TESTCASE(skip_sensor_provider, mysensor_batch_p_without_publish)
433 sensord_provider_h provider;
435 err = sensord_create_provider(MYSENSOR_BATCH_URI, &provider);
438 err = sensord_provider_set_name(provider, MYSENSOR_BATCH_NAME);
440 err = sensord_provider_set_vendor(provider, MYSENSOR_VENDOR);
442 err = sensord_provider_set_range(provider, 0.0f, 1.0f);
444 err = sensord_provider_set_resolution(provider, 0.01f);
447 err = sensord_add_provider(provider);
450 err = sensord_provider_set_start_cb(provider, start_cb, NULL);
452 err = sensord_provider_set_stop_cb(provider, stop_cb, NULL);
454 err = sensord_provider_set_interval_changed_cb(provider, interval_cb, NULL);
457 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
462 err = sensord_remove_provider(provider);
464 err = sensord_destroy_provider(provider);
470 #define SENSOR_SHIFT_TYPE 16
471 TESTCASE(skip_sensor_provider, mysensor_get_data_list)
481 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
484 handle = sensord_connect(sensor);
486 sensord_get_type(sensor, &type);
489 ret = sensord_start(handle, 0);
492 sensor_data_t* data_list = NULL;
494 unsigned int data_id = type << SENSOR_SHIFT_TYPE | 0x1;
496 ret = sensord_get_data_list(handle, data_id, &data_list, &count);
498 ASSERT_EQ(count, NUMBER_OF_EVENT);
500 for (int i = 0 ; i < count; i++) {
501 _I("[%llu]", data_list[i].timestamp);
502 for (int j = 0; j < data_list[i].value_count; j++)
503 _I(" %f", data_list[i].values[j]);
508 ret = sensord_stop(handle);
511 ret = sensord_unregister_events(handle, 1);
514 ret = sensord_disconnect(handle);
520 TESTCASE(skip_sensor_provider, mysensor_get_data)
530 err = sensord_get_default_sensor_by_uri(MYSENSOR_BATCH_URI, &sensor);
533 handle = sensord_connect(sensor);
535 sensord_get_type(sensor, &type);
538 ret = sensord_start(handle, 0);
542 unsigned int data_id = type << SENSOR_SHIFT_TYPE | 0x1;
544 ret = sensord_get_data(handle, data_id, &data);
547 _I("[%llu]", data.timestamp);
548 for (int j = 0; j < data.value_count; j++)
549 _I(" %f", data.values[j]);
552 ret = sensord_stop(handle);
555 ret = sensord_unregister_events(handle, 1);
558 ret = sensord_disconnect(handle);