sensord: add testcase for sensor-provider APIs 33/126533/2
authorkibak.yoon <kibak.yoon@samsung.com>
Mon, 24 Apr 2017 05:24:56 +0000 (14:24 +0900)
committerKibak Yoon <kibak.yoon@samsung.com>
Mon, 24 Apr 2017 07:16:24 +0000 (07:16 +0000)
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 <kibak.yoon@samsung.com>
src/sensorctl/testcase/unit_client.cpp

index 1034573..661e4a0 100644 (file)
@@ -20,6 +20,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <sensor_internal.h>
+#include <sensor_utils.h>
 
 #include <client/sensor_manager.h>
 #include <client/sensor_listener.h>
@@ -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<sensord_provider_h *>(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;
 }