+++ /dev/null
-/*
- * sensorctl
- *
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <sensor_internal.h>
-
-#include "log.h"
-#include "mainloop.h"
-#include "test_bench.h"
-#include "sensor_adapter.h"
-
-static void basic_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
-{
- EXPECT_GT(data->timestamp, 0);
- EXPECT_NEAR(data->values[0], 0, 19.6);
- EXPECT_NEAR(data->values[1], 0, 19.6);
- EXPECT_NEAR(data->values[2], 0, 19.6);
-
- mainloop::stop();
-}
-
-TESTCASE(accelerometer_basic, start_stop_p)
-{
- bool ret;
- int handle;
-
- sensor_info info(ACCELEROMETER_SENSOR, 0,
- 100, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
-
- ret = sensor_adapter::start(info, handle);
- ASSERT_TRUE(ret);
-
- mainloop::run();
-
- ret = sensor_adapter::stop(info, handle);
- ASSERT_TRUE(ret);
-
- return true;
-}
-
-static void get_data_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
-{
- mainloop::stop();
-}
-
-TESTCASE(accelerometer_basic, get_data_p)
-{
- bool ret;
- int handle;
- sensor_data_t data;
-
- sensor_info info(ACCELEROMETER_SENSOR, 0,
- 100, 1000, SENSOR_OPTION_ALWAYS_ON, get_data_cb, NULL);
-
- ret = sensor_adapter::start(info, handle);
- ASSERT_TRUE(ret);
-
- mainloop::run();
-
- ret = sensor_adapter::get_data(handle, info.type, data);
- ASSERT_TRUE(ret);
-
- ret = sensor_adapter::stop(info, handle);
- ASSERT_TRUE(ret);
-
- return true;
-}
-
-static unsigned long long prev_prev_ts;
-static unsigned long long prev_ts;
-static int event_count;
-
-static void accel_regular_interval_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
-{
- int prev_gap;
- int current_gap;
- if (prev_prev_ts == 0) {
- prev_prev_ts = data->timestamp;
- return;
- }
-
- if (prev_ts == 0) {
- prev_ts = data->timestamp;
- return;
- }
-
- prev_gap = prev_ts - prev_prev_ts;
- current_gap = data->timestamp - prev_ts;
-
- EXPECT_NEAR(current_gap, prev_gap, 10000);
- prev_prev_ts = prev_ts;
- prev_ts = data->timestamp;
-
- if (event_count++ > 3)
- mainloop::stop();
-}
-
-TESTCASE(accelerometer_interval, regular_interval_p)
-{
- bool ret;
- int handle;
- prev_prev_ts = 0;
- prev_ts = 0;
- event_count = 0;
-
- sensor_info info(ACCELEROMETER_SENSOR, 0,
- 100, 1000, SENSOR_OPTION_ALWAYS_ON, accel_regular_interval_cb, NULL);
-
- ret = sensor_adapter::start(info, handle);
- ASSERT_TRUE(ret);
-
- mainloop::run();
-
- ret = sensor_adapter::stop(info, handle);
- ASSERT_TRUE(ret);
-
- return true;
-}
-
-static void accel_interval_100ms_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
-{
- if (prev_ts == 0) {
- prev_ts = data->timestamp;
- return;
- }
-
- /* 100ms + 20ms(error) */
- EXPECT_LE(data->timestamp - prev_ts, 120000);
- prev_ts = data->timestamp;
-
- if (event_count++ > 3)
- mainloop::stop();
-}
-
-TESTCASE(accelerometer_interval, 100ms_interval_p)
-{
- bool ret;
- int handle;
-
- prev_ts = 0;
- event_count = 0;
-
- sensor_info info(ACCELEROMETER_SENSOR, 0,
- 100, 1000, SENSOR_OPTION_ALWAYS_ON, accel_interval_100ms_cb, NULL);
-
- ret = sensor_adapter::start(info, handle);
- ASSERT_TRUE(ret);
-
- mainloop::run();
-
- ret = sensor_adapter::stop(info, handle);
- ASSERT_TRUE(ret);
-
- return true;
-}
--- /dev/null
+/*
+ * sensorctl
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <sensor_internal.h>
+
+#include "log.h"
+#include "mainloop.h"
+#include "test_bench.h"
+#include "sensor_adapter.h"
+
+static void test_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
+{
+ EXPECT_GT(data->timestamp, 0);
+ EXPECT_NEAR(data->values[0], 0, 19.6);
+ EXPECT_NEAR(data->values[1], 0, 19.6);
+ EXPECT_NEAR(data->values[2], 0, 19.6);
+
+ mainloop::stop();
+}
+
+TESTCASE(accelerometer_test, start_stop_p)
+{
+ bool ret;
+ int handle;
+
+ if (!sensor_adapter::is_supported(ACCELEROMETER_SENSOR))
+ return true; /* Not Supported */
+
+ sensor_info info(ACCELEROMETER_SENSOR, 0,
+ 100, 1000, SENSOR_OPTION_ALWAYS_ON, test_cb, NULL);
+
+ ret = sensor_adapter::start(info, handle);
+ ASSERT_TRUE(ret);
+
+ mainloop::run();
+
+ ret = sensor_adapter::stop(info, handle);
+ ASSERT_TRUE(ret);
+
+ return true;
+}
+
+static void get_data_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
+{
+ mainloop::stop();
+}
+
+TESTCASE(accelerometer_test, get_data_p)
+{
+ bool ret;
+ int handle;
+ sensor_data_t data;
+
+ if (!sensor_adapter::is_supported(ACCELEROMETER_SENSOR))
+ return true; /* Not Supported */
+
+ sensor_info info(ACCELEROMETER_SENSOR, 0,
+ 100, 1000, SENSOR_OPTION_ALWAYS_ON, get_data_cb, NULL);
+
+ ret = sensor_adapter::start(info, handle);
+ ASSERT_TRUE(ret);
+
+ mainloop::run();
+
+ ret = sensor_adapter::get_data(handle, info.type, data);
+ ASSERT_TRUE(ret);
+
+ ret = sensor_adapter::stop(info, handle);
+ ASSERT_TRUE(ret);
+
+ return true;
+}
+
+static unsigned long long time_first;
+static unsigned long long time_last;
+static int event_count;
+
+static void accel_interval_100ms_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
+{
+ if (event_count == 0) {
+ time_first = data->timestamp;
+ event_count++;
+ return;
+ }
+
+ if (event_count == 10) {
+ /* 100ms + 20ms(error) */
+ EXPECT_LE((data->timestamp - time_first) / 10, 120000);
+ mainloop::stop();
+ return;
+ }
+
+ event_count++;
+}
+
+TESTCASE(accelscope_test, 100ms_interval_p)
+{
+ bool ret;
+ int handle;
+
+ time_first = 0;
+ time_last = 0;
+ event_count = 0;
+
+ if (!sensor_adapter::is_supported(ACCELEROMETER_SENSOR))
+ return true; /* Not Supported */
+
+ sensor_info info(ACCELEROMETER_SENSOR, 0,
+ 100, 1000, SENSOR_OPTION_ALWAYS_ON, accel_interval_100ms_cb, NULL);
+
+ ret = sensor_adapter::start(info, handle);
+ ASSERT_TRUE(ret);
+
+ mainloop::run();
+
+ ret = sensor_adapter::stop(info, handle);
+ ASSERT_TRUE(ret);
+
+ return true;
+}
*/
#include <unistd.h>
+#include <string.h>
#include <sensor_internal.h>
#include "log.h"
#include "test_bench.h"
#include "sensor_adapter.h"
+/* exception list */
+#define SAMSUNG_PEDOMETER "http://samsung.com/sensor/healthinfo/pedometer/samsung_pedometer"
+
static void basic_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
{
EXPECT_GT(data->timestamp, 0);
- //_N("[ DATA ] %f\n", data->values[0]);
+ _N(_WHT "[ DATA ] %f\n" _RST, data->values[0]);
mainloop::stop();
}
-TESTCASE(all_sensor_test, scenario_basic_p)
+static bool skip_sensor(sensor_t sensor)
+{
+ const char *uri = sensord_get_uri(sensor);
+
+ if (strncmp(uri, SAMSUNG_PEDOMETER, sizeof(SAMSUNG_PEDOMETER)) == 0)
+ return true;
+
+ return false;
+}
+
+TESTCASE(sensor_basic, all_sensor_p)
{
- int err;
+ int err, count, handle;
bool ret;
- int count;
- int handle;
sensor_t *sensors;
sensor_type_t type;
ASSERT_EQ(err, 0);
for (int i = 0; i < count; ++i) {
- sensord_get_type(sensors[i], &type);
- /* TODO */
- _N("[ TYPE ] %s\n", "UNKNOWN_SENSOR");
+ if (skip_sensor(sensors[i]))
+ continue;
+
+ _W("[ SENSOR %d ] %s\n", i, sensord_get_uri(sensors[i]));
+ sensord_get_type(sensors[i], &type);
sensor_info info(type, 0, 100, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
ret = sensor_adapter::start(info, handle);
return true;
}
-
-typedef bool (*process_func_t)(const char *msg, int size, int count);
-
-static pid_t run_process(process_func_t func, const char *msg, int size, int count)
-{
- pid_t pid = fork();
- if (pid < 0)
- return -1;
-
- if (pid == 0) {
- if (!func(msg, size, count))
- _E("Failed to run process\n");
- exit(0);
- }
-
- return pid;
-}
-
-static bool run_echo_command_test(const char *str, int size, int cout)
-{
- bool ret = true;
- int handle;
- char buf[4096] = {'1', '1', '1', };
-
- sensor_info info(ACCELEROMETER_SENSOR, 0,
- 100, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
- sensor_adapter::get_handle(info, handle);
-
- for (int i = 0; i < 1024; ++i)
- ret &= sensor_adapter::set_attribute(handle, SENSOR_ATTR_ACCELEROMETER_INJECTION, buf, 4096);
- ASSERT_TRUE(ret);
-
- return true;
-}
-
-TESTCASE(echo_command_test, echo_command_p)
-{
- pid_t pid;
-
- for (int i = 0; i < 100; ++i) {
- pid = run_process(run_echo_command_test, NULL, 0, 0);
- EXPECT_GE(pid, 0);
- }
-
- pid = run_process(run_echo_command_test, NULL, 0, 0);
- EXPECT_GE(pid, 0);
-
- ASSERT_TRUE(true);
-
- return true;
-}
-
-#if 0
-TESTCASE(gyroscope_value_p)
-{
- scenario_basic_p(GYROSCOPE_SENSOR);
-}
-
-TESTCASE(gravitye_value_p)
-{
- scenario_basic_p(GRAVITY_SENSOR);
-}
-
-TESTCASE(linear_accel_value_p)
-{
- scenario_basic_p(LINEAR_ACCEL_SENSOR);
-}
-
-TESTCASE(proximity_value_p)
-{
- scenario_basic_p(PROXIMITY_SENSOR);
-}
-
-TESTCASE(pressure_value_p)
-{
- scenario_basic_p(PRESSURE_SENSOR);
-}
-
-TESTCASE(hrm_value_p)
-{
- scenario_basic_p(HRM_SENSOR);
-}
-
-TESTCASE(hrm_raw_value_p)
-{
- scenario_basic_p(HRM_RAW_SENSOR);
-}
-
-TESTCASE(hrm_led_green_value_p)
-{
- scenario_basic_p(HRM_LED_GREEN_SENSOR);
-}
-
-TESTCASE(wrist_up_value_p)
-{
- scenario_basic_p(GESTURE_WRIST_UP_SENSOR);
-}
-#endif
*
*/
+#include <unistd.h>
+#include <sensor_internal.h>
+
+#include "log.h"
+#include "mainloop.h"
#include "test_bench.h"
+#include "sensor_adapter.h"
-TESTCASE(sensor_interval, all_sensor_interval_10ms_p)
+static void basic_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
{
- /* TODO: test 10ms interval */
+ EXPECT_GT(data->timestamp, 0);
+ mainloop::stop();
+}
+
+TESTCASE(interval_test, 20ms_p)
+{
+ int err, count, handle;
+ bool ret;
+ sensor_t *sensors;
+ sensor_type_t type;
+
+ err = sensord_get_sensors(ACCELEROMETER_SENSOR, &sensors, &count);
+ ASSERT_EQ(err, 0);
+
+ for (int i = 0; i < count; ++i) {
+ sensord_get_type(sensors[i], &type);
+ sensor_info info(type, 0, 20, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
+
+ ret = sensor_adapter::start(info, handle);
+ EXPECT_TRUE(ret);
+
+ mainloop::run();
+
+ ret = sensor_adapter::stop(info, handle);
+ EXPECT_TRUE(ret);
+ }
+
+ free(sensors);
+
+ return true;
+}
+
+TESTCASE(interval_test, 100ms_p)
+{
+ int err, count, handle;
+ bool ret;
+ sensor_t *sensors;
+ sensor_type_t type;
+
+ err = sensord_get_sensors(ACCELEROMETER_SENSOR, &sensors, &count);
+ ASSERT_EQ(err, 0);
+
+ for (int i = 0; i < count; ++i) {
+ sensord_get_type(sensors[i], &type);
+ sensor_info info(type, 0, 100, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
+
+ ret = sensor_adapter::start(info, handle);
+ EXPECT_TRUE(ret);
+
+ mainloop::run();
+
+ ret = sensor_adapter::stop(info, handle);
+ EXPECT_TRUE(ret);
+ }
+
+ free(sensors);
+
+ return true;
+}
+
+TESTCASE(interval_test, 200ms_p)
+{
+ int err, count, handle;
+ bool ret;
+ sensor_t *sensors;
+ sensor_type_t type;
+
+ err = sensord_get_sensors(ACCELEROMETER_SENSOR, &sensors, &count);
+ ASSERT_EQ(err, 0);
+
+ for (int i = 0; i < count; ++i) {
+ sensord_get_type(sensors[i], &type);
+ sensor_info info(type, 0, 200, 1000, SENSOR_OPTION_ALWAYS_ON, basic_cb, NULL);
+
+ ret = sensor_adapter::start(info, handle);
+ EXPECT_TRUE(ret);
+
+ mainloop::run();
+
+ ret = sensor_adapter::stop(info, handle);
+ EXPECT_TRUE(ret);
+ }
+
+ free(sensors);
+
return true;
}
--- /dev/null
+/*
+ * sensorctl
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <unistd.h>
+#include <string.h>
+#include <sensor_internal.h>
+#include <sensor_utils.h>
+
+#include <client/sensor_manager.h>
+#include <client/sensor_listener.h>
+
+#include "log.h"
+#include "mainloop.h"
+#include "test_bench.h"
+
+static bool called = false;
+static int count = 0;
+
+static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
+{
+ _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
+
+ if (count++ > 3)
+ mainloop::stop();
+}
+
+TESTCASE(sensor_listener, get_default_sensor_p_1)
+{
+ int err;
+ sensor_t sensor;
+
+ err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
+ ASSERT_EQ(err, 0);
+
+ return true;
+}
+
+TESTCASE(sensor_listener, get_sensors_p_1)
+{
+ int err;
+ int count;
+ sensor_t *sensors;
+
+ err = sensord_get_sensors(ACCELEROMETER_SENSOR, &sensors, &count);
+ ASSERT_EQ(err, 0);
+ ASSERT_GT(count, 0);
+
+ free(sensors);
+
+ return true;
+}
+
+TESTCASE(sensor_listener, connect_p_1)
+{
+ int err;
+ int handle;
+ sensor_t sensor;
+
+ err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+ ASSERT_GT(handle, 0);
+
+ err = sensord_disconnect(handle);
+ ASSERT_EQ(err, 1);
+
+ return true;
+}
+
+TESTCASE(sensor_listener, all_api_p_1)
+{
+ int err;
+ bool ret;
+ int handle;
+ sensor_t sensor;
+ sensor_t *list;
+ int count;
+
+ called = false;
+
+ err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
+ ASSERT_EQ(err, 0);
+
+ err = sensord_get_sensors(ALL_SENSOR, &list, &count);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+ ASSERT_EQ(err, 0);
+
+ ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_start(handle, 0);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_change_event_interval(handle, 0, 100);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_change_event_max_batch_latency(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);
+
+ free(list);
+
+ return true;
+}
+
+TESTCASE(sensor_listener, bad_unregister_stop_order_p_1)
+{
+ int err;
+ bool ret;
+ int handle;
+ sensor_t sensor;
+
+ called = false;
+
+ err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+ ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
+ ret = sensord_start(handle, 0);
+ ret = sensord_change_event_interval(handle, 0, 100);
+
+ mainloop::run();
+
+ /* [TEST] Unregister event before stop */
+ ret = sensord_unregister_event(handle, 1);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_stop(handle);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_disconnect(handle);
+ ASSERT_TRUE(ret);
+
+ return true;
+}
+
+TESTCASE(sensor_listener, bad_disconnect_p_1)
+{
+ int err;
+ bool ret;
+ int handle;
+ sensor_t sensor;
+
+ called = false;
+
+ err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+ ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
+ ret = sensord_start(handle, 0);
+ ret = sensord_change_event_interval(handle, 0, 100);
+
+ mainloop::run();
+
+ /* [TEST] Unregistering event is not called */
+
+ ret = sensord_stop(handle);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_disconnect(handle);
+ ASSERT_TRUE(ret);
+
+ return true;
+}
+
+TESTCASE(sensor_listener, bad_disconnect_p_2)
+{
+ int err;
+ bool ret;
+ int handle;
+ sensor_t sensor;
+
+ called = false;
+
+ err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+ ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
+ ret = sensord_start(handle, 0);
+ ret = sensord_change_event_interval(handle, 0, 100);
+
+ mainloop::run();
+
+ ret = sensord_unregister_event(handle, 1);
+ ASSERT_TRUE(ret);
+
+ /* [TEST] stopping sensor is not called */
+
+ ret = sensord_disconnect(handle);
+ ASSERT_TRUE(ret);
+
+ return true;
+}
--- /dev/null
+/*
+ * sensorctl
+ *
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <unistd.h>
+#include <string.h>
+#include <sensor_internal.h>
+#include <sensor_utils.h>
+
+#include "log.h"
+#include "mainloop.h"
+#include "test_bench.h"
+
+#define MYSENSOR_URI "http://example.org/sensor/general/mysensor/mysensor"
+#define MYSENSOR_NAME "mysensor"
+#define MYSENSOR_VENDOR "tizen"
+
+static bool started = false;
+static bool added = false;
+static bool called = false;
+
+static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
+{
+ _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
+}
+
+static void start_cb(sensord_provider_h provider, void *user_data)
+{
+ started = true;
+ _N("START\n");
+}
+
+static void stop_cb(sensord_provider_h provider, void *user_data)
+{
+ started = 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 (!started) 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;
+}
+
+static void add_mysensor(void)
+{
+ sensord_provider_h provider;
+
+ sensord_create_provider(MYSENSOR_URI, &provider);
+ sensord_provider_set_name(provider, MYSENSOR_NAME);
+ sensord_provider_set_vendor(provider, MYSENSOR_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 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_provider, check_uri)
+{
+ int err;
+ sensord_provider_h provider;
+
+ const char *uri_p1 = "http://example.org/sensor/general/mysensor_type/mysensor";
+ const char *uri_p2 = "http://developer.samsung.com/sensor/general/mysensor_type/mysensor";
+ const char *uri_n1 = "http://tizen.org/sensor/general/accelerometer/mysensor";
+ const char *uri_n2 = "http://tizen.org/mysensor/general/accelerometer/mysensor";
+ const char *uri_n3 = "http:/example.org/sensor/general/mysensor_type/mysensor";
+ const char *uri_n5 = "http://example.org/sensor/general/mysensor_type";
+ const char *uri_n4 = "http://example.org/sensor/general/mysensor_type/mysensor/mysensor";
+
+ err = sensord_create_provider(uri_p1, &provider);
+ EXPECT_EQ(err, 0);
+ err = sensord_create_provider(uri_p2, &provider);
+ EXPECT_EQ(err, 0);
+ err = sensord_create_provider(uri_n1, &provider);
+ EXPECT_EQ(err, -EINVAL);
+ err = sensord_create_provider(uri_n2, &provider);
+ EXPECT_EQ(err, -EINVAL);
+ err = sensord_create_provider(uri_n3, &provider);
+ EXPECT_EQ(err, -EINVAL);
+ err = sensord_create_provider(uri_n4, &provider);
+ EXPECT_EQ(err, -EINVAL);
+ err = sensord_create_provider(uri_n5, &provider);
+ EXPECT_EQ(err, -EINVAL);
+
+ return true;
+}
+
+/* TODO: change it from manual test to auto-test */
+TESTCASE(skip_sensor_provider, mysensor_added_removed_cb_p_1)
+{
+ int 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;
+}
+
+/* TODO: change it from manual test to auto-test */
+TESTCASE(skip_sensor_provider, mysensor_p)
+{
+ int err = 0;
+ sensor_t sensor;
+ sensord_provider_h provider;
+
+ err = sensord_create_provider(MYSENSOR_URI, &provider);
+ ASSERT_EQ(err, 0);
+
+ err = sensord_provider_set_name(provider, MYSENSOR_NAME);
+ ASSERT_EQ(err, 0);
+ err = sensord_provider_set_vendor(provider, MYSENSOR_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_interval_changed_cb(provider, interval_cb, NULL);
+ ASSERT_EQ(err, 0);
+
+ err = sensord_get_default_sensor_by_uri(MYSENSOR_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;
+}
+
+/* TODO: change it from manual test to auto-test */
+TESTCASE(skip_sensor_provider, mysensor_with_listener_p_1)
+{
+ int err;
+ bool ret;
+ int handle;
+ sensor_t sensor;
+
+ called = false;
+
+ err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor);
+ ASSERT_EQ(err, 0);
+
+ handle = sensord_connect(sensor);
+ ASSERT_EQ(err, 0);
+
+ ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
+ ASSERT_TRUE(ret);
+
+ ret = sensord_start(handle, 0);
+ ASSERT_TRUE(ret);
+
+ 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;
+}
+
+++ /dev/null
-/*
- * sensorctl
- *
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <unistd.h>
-#include <string.h>
-#include <sensor_internal.h>
-#include <sensor_utils.h>
-
-#include <client/sensor_manager.h>
-#include <client/sensor_listener.h>
-
-#include "log.h"
-#include "mainloop.h"
-#include "test_bench.h"
-
-static bool called = false;
-
-static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
-{
- _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
-}
-
-TESTCASE(sensor_api_get_default_sensor, get_sensor_p_1)
-{
- int err;
- sensor_t sensor;
-
- err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
- ASSERT_EQ(err, 0);
-
- return true;
-}
-
-TESTCASE(sensor_api_get_sensors, get_sensor_p_2)
-{
- int err;
- int count;
- sensor_t *sensors;
-
- err = sensord_get_sensors(ACCELEROMETER_SENSOR, &sensors, &count);
- ASSERT_EQ(err, 0);
- ASSERT_GT(count, 0);
-
- free(sensors);
-
- return true;
-}
-
-TESTCASE(sensor_api_connect, connect_p_1)
-{
- int err;
- int handle;
- sensor_t sensor;
-
- err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
- ASSERT_EQ(err, 0);
-
- handle = sensord_connect(sensor);
- ASSERT_GT(handle, 0);
-
- err = sensord_disconnect(handle);
- ASSERT_EQ(err, 1);
-
- return true;
-}
-
-TESTCASE(sensor_api_all, all_p_1)
-{
- int err;
- bool ret;
- int handle;
- sensor_t sensor;
- sensor_t *list;
- int count;
-
- called = false;
-
- err = sensord_get_default_sensor(ACCELEROMETER_SENSOR, &sensor);
- ASSERT_EQ(err, 0);
-
- err = sensord_get_sensors(ALL_SENSOR, &list, &count);
- ASSERT_EQ(err, 0);
-
- handle = sensord_connect(sensor);
- ASSERT_EQ(err, 0);
-
- ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
- ASSERT_TRUE(ret);
-
- ret = sensord_start(handle, 0);
- ASSERT_TRUE(ret);
-
- ret = sensord_change_event_interval(handle, 0, 100);
- ASSERT_TRUE(ret);
-
- ret = sensord_change_event_max_batch_latency(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);
-
- free(list);
-
- return true;
-}
};
/* IPC Client Sleep Test(4096Kb * 1024) */
-static bool run_ipc_client_sleep_10s(const char *str, int size, int count)
+static bool run_ipc_client_sleep_1s(const char *str, int size, int count)
{
ipc_client client(TEST_PATH);
test_client_handler_30_1M client_handler;
}
/**
- * @brief Test 3 client + 1 client which sleeps 10 seconds
+ * @brief Test 3 client + 1 client which sleeps 1 seconds
*/
-TESTCASE(sensor_ipc_client_sleep_1s, sleep_1s_p)
+TESTCASE(sensor_ipc, 3_client_with_1s_sleep_client_p)
{
pid_t pid = run_process(run_ipc_server_echo, NULL, 0, 0);
EXPECT_GE(pid, 0);
EXPECT_GE(pid, 0);
}
- bool ret = run_ipc_client_sleep_10s(NULL, 0, 0);
+ bool ret = run_ipc_client_sleep_1s(NULL, 0, 0);
ASSERT_TRUE(ret);
SLEEP_1S;
}
/**
- * @brief Test 3 client + 1 client which has small recv buffer
+ * @brief Test 3 client + 1 client which has small recv buffer(2240)
*/
-TESTCASE(sensor_ipc_client_small_2240, ipc_client_small_2240_p)
+TESTCASE(sensor_ipc, 3_client_with_small_buffer_client_p)
{
pid_t pid = run_process(run_ipc_server_echo, NULL, 0, 0);
EXPECT_GE(pid, 0);
/**
* @brief Test 30 ipc_client with 1M message
*/
-TESTCASE(sensor_ipc_30_client_1M, ipc_client_p_30_1M)
+TESTCASE(sensor_ipc, 30_client_with_1M_message_p)
{
pid_t pid = run_process(run_ipc_server_echo, NULL, 0, 0);
EXPECT_GE(pid, 0);
/**
* @brief Test 2 channel of 1 client with message
*/
-TESTCASE(sensor_ipc_client_2_channel_message, 2_channel_message_p)
+TESTCASE(sensor_ipc, 1_client_with_2_channel_message_p)
{
pid_t pid = run_process(run_ipc_server, NULL, 0, 0);
EXPECT_GE(pid, 0);
/**
* @brief Test 2 channel of 1 client
*/
-TESTCASE(sensor_ipc_client_2_channel, 2_channel_p)
+TESTCASE(sensor_ipc, 1_client_2_channel_simple_p)
{
pid_t pid = run_process(run_ipc_server, NULL, 0, 0);
EXPECT_GE(pid, 0);
/**
* @brief Test 100 ipc_client
*/
-TESTCASE(sensor_ipc_100_client, ipc_client_p_100)
+TESTCASE(sensor_ipc, 100_client_p)
{
pid_t pid = run_process(run_ipc_server, NULL, 0, 0);
EXPECT_GE(pid, 0);
/**
* @brief Test 2 ipc_client
*/
-TESTCASE(sensor_ipc_2_client, ipc_client_p_2)
+TESTCASE(sensor_ipc, 2_client_p)
{
pid_t pid = run_process(run_ipc_server, NULL, 0, 0);
EXPECT_GE(pid, 0);
* 2. send "TEST" message from client to server
* 3. check that message in server handler
*/
-TESTCASE(sensor_ipc_client_0, ipc_client_p_0)
+TESTCASE(sensor_ipc, server_client_basic_p)
{
pid_t pid = run_process(run_ipc_server, NULL, 0, 0);
EXPECT_GE(pid, 0);
+++ /dev/null
-/*
- * sensorctl
- *
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <unistd.h>
-#include <string.h>
-#include <sensor_internal.h>
-#include <sensor_utils.h>
-
-#include "log.h"
-#include "mainloop.h"
-#include "test_bench.h"
-
-#define MYSENSOR_URI "http://example.org/sensor/general/mysensor/mysensor"
-#define MYSENSOR_NAME "mysensor"
-#define MYSENSOR_VENDOR "tizen"
-
-static bool started = false;
-static bool added = false;
-static bool called = false;
-
-static void event_cb(sensor_t sensor, unsigned int event_type, sensor_data_t *data, void *user_data)
-{
- if (test_option::full_log == false) {
- while (true) {}
- }
- _I("[%llu] %f %f %f\n", data->timestamp, data->values[0], data->values[1], data->values[2]);
-}
-
-static void start_cb(sensord_provider_h provider, void *user_data)
-{
- started = true;
- _N("START\n");
-}
-
-static void stop_cb(sensord_provider_h provider, void *user_data)
-{
- started = 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 (!started) 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;
-}
-
-static void add_mysensor(void)
-{
- sensord_provider_h provider;
-
- sensord_create_provider(MYSENSOR_URI, &provider);
- sensord_provider_set_name(provider, MYSENSOR_NAME);
- sensord_provider_set_vendor(provider, MYSENSOR_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 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_provider_uri, provider_check_uri)
-{
- int err;
- sensord_provider_h provider;
-
- const char *uri_p1 = "http://example.org/sensor/general/mysensor_type/mysensor";
- const char *uri_p2 = "http://developer.samsung.com/sensor/general/mysensor_type/mysensor";
- const char *uri_n1 = "http://tizen.org/sensor/general/accelerometer/mysensor";
- const char *uri_n2 = "http://tizen.org/mysensor/general/accelerometer/mysensor";
- const char *uri_n3 = "http:/example.org/sensor/general/mysensor_type/mysensor";
- const char *uri_n5 = "http://example.org/sensor/general/mysensor_type";
- const char *uri_n4 = "http://example.org/sensor/general/mysensor_type/mysensor/mysensor";
-
- err = sensord_create_provider(uri_p1, &provider);
- EXPECT_EQ(err, 0);
- err = sensord_create_provider(uri_p2, &provider);
- EXPECT_EQ(err, 0);
- err = sensord_create_provider(uri_n1, &provider);
- EXPECT_EQ(err, -EINVAL);
- err = sensord_create_provider(uri_n2, &provider);
- EXPECT_EQ(err, -EINVAL);
- err = sensord_create_provider(uri_n3, &provider);
- EXPECT_EQ(err, -EINVAL);
- err = sensord_create_provider(uri_n4, &provider);
- EXPECT_EQ(err, -EINVAL);
- err = sensord_create_provider(uri_n5, &provider);
- EXPECT_EQ(err, -EINVAL);
-
- return true;
-}
-
-/* TODO: change it from manual test to auto-test */
-TESTCASE(sensor_api_provider_mysensor, provider_p_1)
-{
- int err = 0;
- sensor_t sensor;
- sensord_provider_h provider;
-
- err = sensord_create_provider(MYSENSOR_URI, &provider);
- ASSERT_EQ(err, 0);
-
- err = sensord_provider_set_name(provider, MYSENSOR_NAME);
- ASSERT_EQ(err, 0);
- err = sensord_provider_set_vendor(provider, MYSENSOR_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_interval_changed_cb(provider, interval_cb, NULL);
- ASSERT_EQ(err, 0);
-
- err = sensord_get_default_sensor_by_uri(MYSENSOR_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_listener_mysensor, listener_p_1)
-{
- int err;
- bool ret;
- int handle;
- sensor_t sensor;
-
- called = false;
-
- err = sensord_get_default_sensor_by_uri(MYSENSOR_URI, &sensor);
- ASSERT_EQ(err, 0);
-
- handle = sensord_connect(sensor);
- ASSERT_EQ(err, 0);
-
- ret = sensord_register_event(handle, 1, 100, 100, event_cb, NULL);
- ASSERT_TRUE(ret);
-
- ret = sensord_start(handle, 0);
- ASSERT_TRUE(ret);
-
- 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;
-}
-
-TESTCASE(sensor_api_provider_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;
-}
#include "log.h"
#include "test_bench.h"
-using namespace ipc;
-
#define MAX_BUF_SIZE 4096
#define TEST_PATH "/run/.sensord_test.socket"
+using namespace ipc;
+
typedef bool (*process_func_t)(const char *msg, int size, int count);
static pid_t run_process(process_func_t func, const char *msg, int size, int count)
accept_sock.set_blocking_mode(true);
accept_sock.bind();
accept_sock.listen(10);
- accept_sock.accept(client_sock);
+
+ while (!ret)
+ ret = accept_sock.accept(client_sock);
/* receive message */
while (recv_count++ < count) {
ASSERT_EQ(ret, 0);
sock.close();
-
return true;
}
* 3. check "TEST" message
* @remarks we can test only regular socket, not systemd-based socket.
*/
-TESTCASE(sensor_ipc_socket, socket_p_0)
+TESTCASE(ipc_socket, socket_simple_message_p)
{
const char *msg = "TEST";
int size = 4;
* 3. check total size
* @remarks we can test only regular socket, not systemd-based socket.
*/
-TESTCASE(sensor_ipc_socket, socket_p_10)
+TESTCASE(ipc_socket, socket_40K_message_p)
{
const char msg[MAX_BUF_SIZE] = {1, };
int size = MAX_BUF_SIZE;
* 3. check total size
* @remarks we can test only regular socket, not systemd-based socket.
*/
-TESTCASE(sensor_ipc_socket, socket_p_1000)
+TESTCASE(ipc_socket, socket_4M_message_p)
{
const char msg[MAX_BUF_SIZE] = {1, };
int size = MAX_BUF_SIZE;