Add a test verifying range of sensor 82/259782/3
authortaemin.yeom <taemin.yeom@samsung.com>
Mon, 14 Jun 2021 07:32:46 +0000 (16:32 +0900)
committertaemin.yeom <taemin.yeom@samsung.com>
Mon, 14 Jun 2021 08:23:18 +0000 (17:23 +0900)
Change-Id: I80c77778e9c0263498c1aedd8f8aac52d4f41046
Signed-off-by: taemin.yeom <taemin.yeom@samsung.com>
CMakeLists.txt
packaging/capi-system-sensor.spec
test/CMakeLists.txt [new file with mode: 0644]
test/main.c [new file with mode: 0644]

index 1664239..6cd4d80 100644 (file)
@@ -31,7 +31,7 @@ ENDFOREACH(flag)
 SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fPIC -Wall -Werror -g -fdump-rtl-expand")
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++0x")
 SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
-SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl, --rpath=${LIB_INSTALL_DIR}")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${LIB_INSTALL_DIR}")
 
 # Internal Logging Option
 #ADD_DEFINITIONS("-DTIZEN_DEBUG")
@@ -56,3 +56,5 @@ CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}
 INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
 INSTALL(FILES include/sensor.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor)
 INSTALL(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+
+ADD_SUBDIRECTORY(test)
\ No newline at end of file
index 9850c5f..48e50ed 100644 (file)
@@ -40,6 +40,14 @@ Requires: %{name} = %{version}-%{release}
 A Sensor library in TIZEN C API package (Development).
 %devel_desc
 
+%package test
+Summary:    Tizen Sensor Test Programs (test)
+Group:      System & System Tools/Testing
+Requires:   %{name} = %{version}-%{release}
+
+%description test
+Tizen Sensor Test Programs (test)
+
 %if 0%{?gcov:1}
 %package gcov
 Summary:    Tizen Sensor Library API (gcov)
@@ -92,6 +100,11 @@ install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
 %{_includedir}/sensor/*.h
 %{_libdir}/libcapi-system-sensor.so
 
+%files test
+%manifest packaging/capi-system-sensor.manifest
+%defattr(-,root,root,-)
+%{_bindir}/sensor-stresstests
+
 %if 0%{?gcov:1}
 %files gcov
 %{_datadir}/gcov/obj/*
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8cf32be
--- /dev/null
@@ -0,0 +1,22 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(sensor-stresstests C)
+
+SET(PKG_MODULES
+    glib-2.0)
+
+INCLUDE(FindPkgConfig)
+PKG_CHECK_MODULES(PKGS REQUIRED ${PKG_MODULES})
+
+INCLUDE_DIRECTORIES(${PKGS_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+FOREACH(flag ${PKGS_CFLAGS})
+       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
+ENDFOREACH(flag)
+
+# Installing files
+FILE(GLOB_RECURSE SRCS main.c)
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS} capi-system-sensor)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/test/main.c b/test/main.c
new file mode 100644 (file)
index 0000000..ca498c8
--- /dev/null
@@ -0,0 +1,245 @@
+#define SENSOR_NUM 27
+#define TEST_COUNT 1000
+#define PASS 90
+
+#include <glib.h>
+#include <sensor.h>
+
+const sensor_type_e sensor_type[] =
+{
+       SENSOR_ACCELEROMETER,
+       SENSOR_GRAVITY,
+       SENSOR_LINEAR_ACCELERATION,
+       SENSOR_MAGNETIC,
+       SENSOR_ROTATION_VECTOR,
+       SENSOR_ORIENTATION,
+       SENSOR_GYROSCOPE,
+       SENSOR_LIGHT,
+       SENSOR_PROXIMITY,
+       SENSOR_PRESSURE,
+       SENSOR_ULTRAVIOLET,
+       SENSOR_TEMPERATURE,
+       SENSOR_HUMIDITY,
+       SENSOR_HRM,
+       SENSOR_HRM_LED_GREEN,
+       SENSOR_HRM_LED_IR,
+       SENSOR_HRM_LED_RED,
+       SENSOR_GYROSCOPE_UNCALIBRATED,
+       SENSOR_GEOMAGNETIC_UNCALIBRATED,
+       SENSOR_GYROSCOPE_ROTATION_VECTOR,
+       SENSOR_GEOMAGNETIC_ROTATION_VECTOR,
+       SENSOR_SIGNIFICANT_MOTION,
+       SENSOR_HRM_BATCH,
+       SENSOR_HRM_LED_GREEN_BATCH,
+       SENSOR_HUMAN_PEDOMETER,
+       SENSOR_HUMAN_SLEEP_MONITOR,
+       SENSOR_HUMAN_SLEEP_DETECTOR
+};
+
+const char *sensor_name[] = {
+       "Accelerometer",
+       "Gravity sensor",
+       "Linear acceleration sensor",
+       "Magnetic sensor",
+       "Rotation vector sensor",
+       "Orientation sensor",
+       "Gyroscope",
+       "Light sensor",
+       "Proximity sensor",
+       "Pressure sensor",
+       "Ultraviolet sensor",
+       "Temperature sensor",
+       "Humidity sensor",
+       "Heart-rate monitor",
+       "Green LED sensor of HRM",
+       "Infra-Red LED sensor of HRM",
+       "Red LED sensor of HRM",
+       "Uncalibrated Gyroscope sensor",
+       "Uncalibrated Geomagnetic sensor",
+       "Gyroscope-based rotation vector sensor",
+       "Geomagnetic-based rotation vector sensor",
+       "Significant motion sensor",
+       "Heart-rate monitor batch sensor",
+       "Green LED of HRM batch sensor",
+       "Pedometer",
+       "Sleep monitor",
+       "Sleep detector"
+};
+
+// the number of value to be verified of the sensor
+const int value_num[] = {3, 3, 3, 3, 4, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 4, 4, 1, 1, 1, 3, 1};
+
+GMainLoop *loop;
+bool turned_on[SENSOR_NUM];
+int min_range[SENSOR_NUM];
+int max_range[SENSOR_NUM];
+int called_num[SENSOR_NUM];
+int miss[SENSOR_NUM];
+int callback_count;
+bool running;
+
+void sensor_callback(sensor_h sensor, sensor_event_s events[], int events_count, void *user_data)
+{
+       const char *name;
+       sensor_type_e type;
+       sensor_get_type(sensor, &type);
+       int num = 0;
+       bool missed;
+
+       ++callback_count;
+
+       for (int i = 0; i < SENSOR_NUM; ++i){
+               if (sensor_type[i] == type){
+                       name = sensor_name[i];
+                       num = i;
+                       break;
+               }
+       }
+
+       for (int i = 0; i < events_count; ++i) {
+               missed = false;
+               ++called_num[num];
+
+               int value_count;
+               if (events[i].value_count < value_num[num])
+                       value_count = events[i].value_count;
+               else
+                       value_count = value_num[num];
+
+               for (int j = 0; j < value_count; ++j) {
+                       if (events[i].values[j] < min_range[num] || events[i].values[j] > max_range[num]) {
+                               missed = true;
+                       }
+               }
+
+               if(missed)
+                       ++miss[num];
+       }
+
+       if (running && callback_count >= TEST_COUNT) {
+               g_print("done.\n");
+               running = false;
+               g_main_loop_quit(loop);
+       }
+
+       else if (callback_count == TEST_COUNT / 10 * 2) {
+               g_print("20%%... ");
+       }
+
+       else if (callback_count == TEST_COUNT / 10 * 4) {
+               g_print("40%%... ");
+       }
+
+       else if (callback_count == TEST_COUNT / 10 * 6) {
+               g_print("60%%... ");
+       }
+
+       else if (callback_count == TEST_COUNT / 10 * 8) {
+               g_print("80%%... ");
+       }
+}
+
+int create_sensor_listener(int num, sensor_h *sensor, sensor_listener_h *listener)
+{
+       bool supported;
+       int ret;
+       float min, max;
+       const char *name = sensor_name[num];
+       sensor_type_e type = sensor_type[num];
+
+       sensor_is_supported(type, &supported);
+       if(!supported) {
+               return -1;
+       }
+
+       sensor_get_default_sensor(type, sensor);
+
+       sensor_create_listener(*sensor, listener);
+       sensor_listener_set_events_cb(*listener, sensor_callback, NULL);
+       sensor_listener_set_option(*listener, SENSOR_OPTION_ALWAYS_ON);
+       sensor_listener_set_interval(*listener, 100);
+
+       sensor_get_min_range(*sensor, &min);
+       sensor_get_max_range(*sensor, &max);
+       min_range[num] = min;
+       max_range[num] = max;
+
+       g_print("%s : %f ~ %f\n", name, min, max);
+
+       ret = sensor_listener_start(*listener);
+       if (ret < 0) {
+               g_print("%s error in listnener_start : %d\n", name, ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+int main()
+{
+       g_print("====================\n");
+       g_print("sensor stress test\n");
+       g_print("====================\n");
+
+       sensor_h sensor[29];
+       sensor_listener_h listener[29];
+
+       for (int i = 0; i < SENSOR_NUM; ++i) {
+               called_num[i] = 0;
+               miss[i] = 0;
+               if (create_sensor_listener(i, &sensor[i], &listener[i]))
+                       turned_on[i] = false;
+               else
+                       turned_on[i] = true;
+       }
+
+
+       g_print("testing... ");
+
+       running = true;
+       loop = g_main_loop_new(NULL, FALSE);
+       g_main_loop_run(loop);
+
+       g_print("====================\n");
+       g_print("test result\n");
+       g_print("====================\n");
+
+       int total_miss = 0;
+       double rate = 0;
+       for (int i = 0; i < SENSOR_NUM; ++i) {
+               if (turned_on[i]) {
+                       if (called_num[i]) {
+                               rate = (double) (called_num[i] - miss[i]) / called_num[i] * 100;
+                               g_print("%s : %d / %d \n", sensor_name[i], called_num[i] - miss[i], called_num[i]);
+
+                               if (rate >= PASS)
+                                       g_print("PASS %.2lf%%\n", rate);
+                               else
+                                       g_print("FAIL %.2lf%%\n", rate);
+                       }
+                       else {
+                               g_print("%s value change was not occurred.\n", sensor_name[i]);
+                       }
+               }
+               total_miss += miss[i];
+       }
+
+       g_print("total : %d / %d \n", callback_count - total_miss, callback_count);
+       rate = (double) (callback_count - total_miss) / callback_count * 100;
+       if (rate >= PASS)
+               g_print("PASS %.2lf%%\n", rate);
+       else
+               g_print("FAIL %.2lf%%\n", rate);
+
+       g_print("====================\n");
+       g_print("Not supported sensors list\n");
+       g_print("====================\n");
+
+       for (int i = 0; i < SENSOR_NUM; ++i) {
+               if (turned_on[i] == false)
+                       g_print("%s\n", sensor_name[i]);
+       }
+
+       return 0;
+}
+