Add system tests for dumpsys 86/226286/7
authorMateusz Moscicki <m.moscicki2@partner.samsung.com>
Wed, 29 Jan 2020 13:02:03 +0000 (14:02 +0100)
committerMateusz Moscicki <m.moscicki2@partner.samsung.com>
Mon, 9 Mar 2020 12:01:16 +0000 (13:01 +0100)
Change-Id: I8f42f0a37f8b94656b8485d71b33f5887f0faef9

CMakeLists.txt
packaging/dumpsys.spec
tests/CMakeLists.txt
tests/system/CMakeLists.txt [new file with mode: 0644]
tests/system/dumpsys_notfound/dumpsys_notfound.sh.template [new file with mode: 0644]
tests/system/dumpsys_session/dumpsys_session.sh.template [new file with mode: 0644]
tests/system/dumpsys_system/dumpsys_system.sh.template [new file with mode: 0644]
tests/system/run.sh.template [new file with mode: 0644]
tests/system/utils/CMakeLists.txt [moved from tests/system/util/CMakeLists.txt with 72% similarity]
tests/system/utils/dumpsys-utils.sh [new file with mode: 0644]
tests/system/utils/test-app.c [moved from tests/system/util/test-app.c with 97% similarity]

index 665b768..0b3999a 100644 (file)
@@ -5,9 +5,15 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 
 ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1)
 
+IF("${TESTS}" STREQUAL "ON")
+    ADD_DEFINITIONS(-DTESTS)
+ENDIF()
+
 # Sub modules
 ADD_SUBDIRECTORY(src/client-api)
 ADD_SUBDIRECTORY(src/dumpsys)
 ADD_SUBDIRECTORY(src/agent)
 ADD_SUBDIRECTORY(src/service)
-ADD_SUBDIRECTORY(tests)
+IF("${TESTS}" STREQUAL "ON")
+    ADD_SUBDIRECTORY(tests)
+ENDIF()
index 760b45a..eb38823 100644 (file)
@@ -1,3 +1,8 @@
+%define on_off() %{expand:%%{?with_%{1}:ON}%%{!?with_%{1}:OFF}}
+
+%define _with_tests on
+%bcond_with tests
+
 Name:       dumpsys
 Summary:    Dumpsys is a framework to get logs from services and applications.
 Version:    0.0.3
@@ -42,9 +47,11 @@ Summary: libdumpsys-user development package.
 %description -n libdumpsys-user-devel
 This package provides library and header files.
 
+%if %{with tests}
 %package tests
 Summary: Contains scripts for testing dumpsys
 %description tests
+%endif
 
 %prep
 %setup -q
@@ -55,6 +62,7 @@ export CFLAGS+=" -Werror -fvisibility=hidden"
 
 %cmake . \
     -DVERSION=%{version} \
+    -DTESTS=%{on_off tests} \
     -DDUMPSYS_SYSTEM_TESTS_PATH=%{_libdir}/dumpsys_system_tests/
 
 make %{?jobs:-j%jobs}
@@ -116,6 +124,14 @@ ln -s ../dumpsys-session-agent.service %{buildroot}/%{_unitdir_user}/delayed.tar
 %{_libdir}/libdumpsys-user.so
 %{_libdir}/pkgconfig/dumpsys-user.pc
 
+%if %{with tests}
 %files tests
 %manifest %{name}.manifest
-%attr(0755,root,root) %{_libdir}/dumpsys_system_tests/utils/test-app
+%defattr(0755,root,root)
+%{_libdir}/dumpsys_system_tests/utils/dumpsys-utils.sh
+%{_libdir}/dumpsys_system_tests/utils/test-app
+%{_libdir}/dumpsys_system_tests/run.sh
+%{_libdir}/dumpsys_system_tests/dumpsys_system/dumpsys_system.sh
+%{_libdir}/dumpsys_system_tests/dumpsys_session/dumpsys_session.sh
+%{_libdir}/dumpsys_system_tests/dumpsys_notfound/dumpsys_notfound.sh
+%endif
index a79f14e..53c0353 100644 (file)
@@ -6,4 +6,4 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE=1)
 
 # Sub modules
-ADD_SUBDIRECTORY(system/util)
+ADD_SUBDIRECTORY(system)
diff --git a/tests/system/CMakeLists.txt b/tests/system/CMakeLists.txt
new file mode 100644 (file)
index 0000000..868a82f
--- /dev/null
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 2.6)
+
+ADD_SUBDIRECTORY(utils)
+
+macro(CONFIGURE_TEST_FILE dir_name file_name)
+  configure_file("${dir_name}/${file_name}.sh.template" "${dir_name}/${file_name}.sh" @ONLY)
+  INSTALL(DIRECTORY ${dir_name}/ DESTINATION ${DUMPSYS_SYSTEM_TESTS_PATH}/${dir_name} FILES_MATCHING PATTERN "*sh")
+endmacro()
+
+macro(CONFIGURE_TEST test_name)
+  set(FILES_LIST ${test_name})
+  list(APPEND FILES_LIST ${ARGN})
+
+  foreach(test ${FILES_LIST})
+    configure_test_file(${test_name} ${test})
+  endforeach()
+endmacro()
+
+configure_test("dumpsys_system")
+configure_test("dumpsys_session")
+configure_test("dumpsys_notfound")
+
+configure_file("run.sh.template" "run.sh" @ONLY)
+INSTALL(FILES run.sh DESTINATION ${DUMPSYS_SYSTEM_TESTS_PATH})
diff --git a/tests/system/dumpsys_notfound/dumpsys_notfound.sh.template b/tests/system/dumpsys_notfound/dumpsys_notfound.sh.template
new file mode 100644 (file)
index 0000000..c092e52
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Check return code of dumpsys in case of a failure
+
+if [ -z "${DUMPSYS_SYSTEM_TESTS}" ]; then
+    DUMPSYS_SYSTEM_TESTS="@DUMPSYS_SYSTEM_TESTS_PATH@"
+fi
+
+DUMPSYS_SYSTEM_TESTS=/usr/lib/dumpsys_system_tests
+
+. ${DUMPSYS_SYSTEM_TESTS}/utils/dumpsys-utils.sh
+
+APP_NAME=org.tizem.some_non_existent_app
+
+dumpsys ${APP_NAME} --  "${ARG1}" "${ARG2}"
+
+if [ $? -eq 1 ]; then
+    exit_ok
+else
+    fail "return code not equal 1"
+fi
diff --git a/tests/system/dumpsys_session/dumpsys_session.sh.template b/tests/system/dumpsys_session/dumpsys_session.sh.template
new file mode 100644 (file)
index 0000000..3612a6f
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+# dumpsys session bus test
+
+if [ -z "${DUMPSYS_SYSTEM_TESTS}" ]; then
+    DUMPSYS_SYSTEM_TESTS="@DUMPSYS_SYSTEM_TESTS_PATH@"
+fi
+
+. ${DUMPSYS_SYSTEM_TESTS}/utils/dumpsys-utils.sh
+
+APP_NAME=apka
+MESSAGE="some message"
+ARG1="-some arg 1"
+ARG2="--some arg 2"
+OUTPUT_FILE=/tmp/dumpsys_output
+APP_PID=0
+
+cleanup()
+{
+    if [[ ${APP_PID} != 0 ]]; then
+        kill ${APP_PID}
+    fi
+
+    rm -f "${OUTPUT_FILE:?}"
+}
+
+trap cleanup 0
+
+su -c "${DUMPSYS_SYSTEM_TESTS}/utils/test-app \"${APP_NAME}\" \"${MESSAGE}\"" -l owner > ${OUTPUT_FILE}  &
+APP_PID=${!}
+sleep 1
+RESULT=`dumpsys ${APP_NAME} --  "${ARG1}" "${ARG2}"`
+
+check "${MESSAGE}"
+
+RESULT=`cat ${OUTPUT_FILE}`
+
+check "${ARG1}"
+check "${ARG2}"
+
+exit_ok
diff --git a/tests/system/dumpsys_system/dumpsys_system.sh.template b/tests/system/dumpsys_system/dumpsys_system.sh.template
new file mode 100644 (file)
index 0000000..2c83c47
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+# dumpsys system bus test
+
+if [ -z "${DUMPSYS_SYSTEM_TESTS}" ]; then
+    DUMPSYS_SYSTEM_TESTS="@DUMPSYS_SYSTEM_TESTS_PATH@"
+fi
+
+DUMPSYS_SYSTEM_TESTS=/usr/lib/dumpsys_system_tests
+
+. ${DUMPSYS_SYSTEM_TESTS}/utils/dumpsys-utils.sh
+
+APP_NAME=apka
+MESSAGE="some message"
+ARG1="-some arg 1"
+ARG2="--some arg 2"
+OUTPUT_FILE=/tmp/dumpsys_output
+APP_PID=0
+
+cleanup()
+{
+    if [[ ${APP_PID} != 0 ]]; then
+        kill ${APP_PID}
+    fi
+    rm -f "${OUTPUT_FILE:?}"
+}
+
+trap cleanup 0
+
+${DUMPSYS_SYSTEM_TESTS}/utils/test-app "${APP_NAME}" "${MESSAGE}" > ${OUTPUT_FILE}  &
+
+sleep 1
+RESULT=`dumpsys ${APP_NAME} --  "${ARG1}" "${ARG2}"`
+APP_PID=${!}
+
+check "${MESSAGE}"
+
+RESULT=`cat ${OUTPUT_FILE}`
+
+check "${ARG1}"
+check "${ARG2}"
+
+exit_ok
diff --git a/tests/system/run.sh.template b/tests/system/run.sh.template
new file mode 100644 (file)
index 0000000..71c9009
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+if [ -z "${DUMPSYS_SYSTEM_TESTS}" ]; then
+    DUMPSYS_SYSTEM_TESTS="@DUMPSYS_SYSTEM_TESTS_PATH@"
+fi
+
+. ${DUMPSYS_SYSTEM_TESTS}/utils/dumpsys-utils.sh
+
+LOG_FILE=/tmp/dumpsys_system-tests.log
+
+function run_test {
+    RED="\033[0;31m"
+    GREEN="\033[0;32m"
+    YELLOW="\033[1;33m"
+    NORMAL="\033[0m"
+    TEST=${1}
+    echo -ne "${TEST}:\t"
+    echo "===================================" >> ${LOG_FILE}
+    echo "Test ${TEST}:" >> ${LOG_FILE}
+    echo "===================================" >> ${LOG_FILE}
+    ${DUMPSYS_SYSTEM_TESTS}/${TEST}/${TEST}.sh 1>> ${LOG_FILE} 2>&1
+    case $? in
+        ${SUCCESS_CODE})
+        echo -e "${GREEN}SUCCESS${NORMAL}"
+        echo "SUCCESS" >> ${LOG_FILE}
+        ;;
+        ${FAIL_CODE})
+        echo -e "${RED}FAIL${NORMAL}"
+        echo "FAIL" >> ${LOG_FILE}
+        ;;
+        ${SKIP_CODE})
+        echo -e "${YELLOW}SKIP${NORMAL}"
+        echo "SKIP" >> ${LOG_FILE}
+        ;;
+    esac
+}
+
+if [ -f ${LOG_FILE} ]; then
+    rm ${LOG_FILE}
+fi
+
+for DIR in ${DUMPSYS_SYSTEM_TESTS}/*/; do
+    test_name=`basename ${DIR}`
+
+    if [ -x ${DUMPSYS_SYSTEM_TESTS}/${test_name}/${test_name}.sh ]; then
+        run_test ${test_name}
+    fi
+done
similarity index 72%
rename from tests/system/util/CMakeLists.txt
rename to tests/system/utils/CMakeLists.txt
index fd37c13..7165c59 100644 (file)
@@ -7,7 +7,8 @@ pkg_check_modules(dumpsys-system_pkgs REQUIRED
     capi-base-common
     dlog
     gio-2.0
-    gio-unix-2.0)
+    gio-unix-2.0
+    pkgmgr-info)
 
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/shared)
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/client-api)
@@ -17,7 +18,10 @@ ENDFOREACH(flag)
 
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIE -Wno-unused-function -Wno-unused-const-variable")
 
-ADD_EXECUTABLE(test-app test-app.c ${CMAKE_SOURCE_DIR}/src/client-api/dumpsys-system.c)
+ADD_EXECUTABLE(test-app
+               test-app.c
+              ${CMAKE_SOURCE_DIR}/src/client-api/dumpsys-system.c
+              ${CMAKE_SOURCE_DIR}/src/client-api/dumpsys-user.c)
 
 TARGET_LINK_LIBRARIES(test-app PUBLIC ${dumpsys-system_pkgs_LIBRARIES})
 
@@ -25,3 +29,4 @@ LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
 
 INSTALL(TARGETS test-app DESTINATION ${DUMPSYS_SYSTEM_TESTS_PATH}/utils
     PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
+INSTALL(FILES dumpsys-utils.sh DESTINATION ${DUMPSYS_SYSTEM_TESTS_PATH}/utils)
diff --git a/tests/system/utils/dumpsys-utils.sh b/tests/system/utils/dumpsys-utils.sh
new file mode 100644 (file)
index 0000000..29833af
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+SUCCESS_CODE=0
+FAIL_CODE=1
+SKIP_CODE=2
+
+function exit_with_code {
+    echo ${1}
+    exit ${2}
+}
+
+function exit_ok {
+    exit_with_code "SUCCESS" ${SUCCESS_CODE}
+}
+
+function fail {
+    exit_with_code "FAIL: $1" ${FAIL_CODE}
+}
+
+function skip {
+    exit_with_code "SKIP: $1" ${SKIP_CODE}
+}
+
+function check {
+    if [[ ${RESULT} =~ ${1} ]]; then
+        return 0
+    fi
+    fail "not found ${1} in ${RESULT}"
+}
+
+function check_file_exists {
+    if [ ! -f ${1} ]; then
+        fail "file not exists $1"
+    fi
+}
+
+function check_file_not_exists {
+    if [ -f ${1} ]; then
+        fail "file exists $1"
+    fi
+}
similarity index 97%
rename from tests/system/util/test-app.c
rename to tests/system/utils/test-app.c
index 57c246c..f507ae9 100644 (file)
@@ -107,7 +107,9 @@ int main(int argc, char *argv[])
        }
 
        int *handler;
-       int ret = dumpsys_system_register_dump_cb(dump, name, (void**)&handler);
+       int ret;
+       ret = dumpsys_system_register_dump_cb(dump, name, (void**)&handler);
+
        if (ret != TIZEN_ERROR_NONE) {
                printf("Some error :(. Check dlog.\n");
                return EXIT_FAILURE;