From feb74e9870e092bc3086ef9162af02fb62b75c2c Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Mon, 24 Apr 2017 14:24:56 +0900 Subject: [PATCH] sensord: add testcase for sensor-provider APIs 1. add "http://tizen.org/sensor/mysensor/mysensor" 2. publish events to sensor listeners 3. start/stop/set_interval callbacks 4. sensor_added_cb/sensor_removed_cb callbacks Change-Id: I98c49388ecfcd677c2c517cfb1e1d4cf3f405f26 Signed-off-by: kibak.yoon --- src/sensorctl/testcase/unit_client.cpp | 180 +++++++++++++++++++++++++++++++-- 1 file changed, 170 insertions(+), 10 deletions(-) diff --git a/src/sensorctl/testcase/unit_client.cpp b/src/sensorctl/testcase/unit_client.cpp index 1034573..661e4a0 100644 --- a/src/sensorctl/testcase/unit_client.cpp +++ b/src/sensorctl/testcase/unit_client.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -132,23 +133,182 @@ TESTCASE(sensor_api_all, all_p_1) return true; } -TESTCASE(sensor_api_provider, provider_base_p_1) +static bool m_start = false; + +static void start_cb(sensord_provider_h provider, void *user_data) +{ + m_start = true; + _N("START\n"); +} + +static void stop_cb(sensord_provider_h provider, void *user_data) +{ + m_start = false; + _N("STOP\n"); +} + +static void interval_cb(sensord_provider_h provider, unsigned int interval_ms, void *user_data) +{ + _N("Interval : %d\n", interval_ms); +} + +static gboolean publish(gpointer gdata) +{ + if (!m_start) return TRUE; + + sensord_provider_h *provider = reinterpret_cast(gdata); + + sensor_data_t data; + data.accuracy = 3; + data.timestamp = sensor::utils::get_timestamp(); + data.value_count = 3; + data.values[0] = 1; + data.values[1] = 2; + data.values[2] = 3; + + _N("[%llu] %f %f %f\n", data.timestamp, data.values[0], data.values[1], data.values[2]); + sensord_provider_publish(provider, data); + return TRUE; +} + +/* TODO: change it from manual test to auto-test */ +TESTCASE(sensor_api_mysensor_provider, provider_p_1) { + const char *uri = "http://example.org/mysensor/mysensor"; + const char *name = "mysensor"; + const char *vendor = "tizen"; + + int err = 0; + sensor_t sensor; + sensord_provider_h provider; + + err = sensord_create_provider(uri, &provider); + ASSERT_EQ(err, 0); + + err = sensord_provider_set_name(provider, name); + ASSERT_EQ(err, 0); + err = sensord_provider_set_vendor(provider, vendor); + ASSERT_EQ(err, 0); + err = sensord_provider_set_range(provider, 0.0f, 1.0f); + ASSERT_EQ(err, 0); + err = sensord_provider_set_resolution(provider, 0.01f); + ASSERT_EQ(err, 0); + + err = sensord_add_provider(provider); + ASSERT_EQ(err, 0); + + err = sensord_provider_set_start_cb(provider, start_cb, NULL); + ASSERT_EQ(err, 0); + err = sensord_provider_set_stop_cb(provider, stop_cb, NULL); + ASSERT_EQ(err, 0); + err = sensord_provider_set_set_interval_cb(provider, interval_cb, NULL); + ASSERT_EQ(err, 0); + + err = sensord_get_default_sensor_by_uri(uri, &sensor); + ASSERT_EQ(err, 0); + + g_timeout_add_seconds(1, publish, provider); + mainloop::run(); + + err = sensord_remove_provider(provider); + ASSERT_EQ(err, 0); + err = sensord_destroy_provider(provider); + ASSERT_EQ(err, 0); + + return true; +} + +TESTCASE(sensor_api_mysensor_listener, listener_p_1) +{ + const char *uri = "http://example.org/mysensor/mysensor"; + int err; bool ret; int handle; + sensor_t sensor; - handle = sensord_external_connect("TEST", NULL, NULL); - ASSERT_GE(handle, 0); + called = false; - for (int k = 0; k < 1000; ++k) { - float data[3] = { 1, 2, 3 }; - ret = sensord_external_post(handle, 1, data, 3); - ASSERT_TRUE(ret); - sleep(1); - } + err = sensord_get_default_sensor_by_uri(uri, &sensor); + ASSERT_EQ(err, 0); + + handle = sensord_connect(sensor); + ASSERT_EQ(err, 0); + + ret = sensord_register_event(handle, 1, 100, 100, basic_cb, NULL); + ASSERT_TRUE(ret); + + ret = sensord_start(handle, 0); + ASSERT_TRUE(ret); - ret = sensord_external_disconnect(handle); + ret = sensord_change_event_interval(handle, 0, 100); ASSERT_TRUE(ret); + mainloop::run(); + + ret = sensord_stop(handle); + ASSERT_TRUE(ret); + + ret = sensord_unregister_event(handle, 1); + ASSERT_TRUE(ret); + + ret = sensord_disconnect(handle); + ASSERT_TRUE(ret); + + return true; +} + +static void add_mysensor(void) +{ + const char *uri = "http://example.org/mysensor/mysensor"; + const char *name = "mysensor"; + const char *vendor = "tizen"; + + sensord_provider_h provider; + + sensord_create_provider(uri, &provider); + sensord_provider_set_name(provider, name); + sensord_provider_set_vendor(provider, vendor); + sensord_provider_set_range(provider, 0.0f, 1.0f); + sensord_provider_set_resolution(provider, 0.01f); + + sensord_add_provider(provider); + + sensord_remove_provider(provider); + sensord_destroy_provider(provider); +} + +static bool added = false; + +static void added_cb(const char *uri, void *user_data) +{ + _I("ADDED[%s]\n", uri); + added = true; +} + +static void removed_cb(const char *uri, void *user_data) +{ + _I("REMOVED[%s]\n", uri); + if (added) + mainloop::stop(); +} + +TESTCASE(sensor_api_mysensor_cb, mysensor_cb_p_1) +{ + int ret; + + ret = sensord_add_sensor_added_cb(added_cb, NULL); + ASSERT_EQ(ret, 0); + ret = sensord_add_sensor_removed_cb(removed_cb, NULL); + ASSERT_EQ(ret, 0); + + add_mysensor(); + + mainloop::run(); + + ret = sensord_remove_sensor_added_cb(added_cb); + ASSERT_EQ(ret, 0); + ret = sensord_remove_sensor_removed_cb(removed_cb); + ASSERT_EQ(ret, 0); + return true; } -- 2.7.4