ut: improve code coverage of tdm.c
[platform/core/uifw/libtdm.git] / ut / src / ut_tdm.cpp
index 57a7aba..b4a9496 100644 (file)
  *
 **************************************************************************/
 
+#include "../stubs/stub_dlfcn.h"
 #include "gtest/gtest.h"
 
+/*------ stubs -----------------*/
+#include "tdm_event_loop_stubs.h"
 #include "tbm_stubs.h"
 #include "stub_pthread.h"
+#include "stub_tdm_vblank.h"
 #include "stub_stdlib.h"
-
+#include "stub_stdio.h"
+#include "stub_unistd.h"
+#include "tdm_event_loop_stubs.h"
 #include "tdm.c"
-
-#include "tdm_private.h"
-
-static tdm_private_display ut_private_display;
+/*------ tested file -----------*/
 
 static void _init_test()
 {
@@ -44,9 +47,15 @@ static void _init_test()
        stub_tbm_init();
        stub_stdlib_init();
 
+       stub_dlfcn_init();
+       stub_stdio_init();
+       stub_tdm_vblank_init();
        g_private_display = NULL;
 }
 
+extern tdm_backend_module tdm_backend_module_stub;
+
+
 /* tdm_display_update */
 
 TEST(tdm_display_update, work_flow_success_1)
@@ -61,9 +70,84 @@ TEST(tdm_display_update, work_flow_success_1)
        ASSERT_EQ(error, expected_error);
 }
 
+/* tdm_display_init() */
+TEST(tdm_display_init, work_flow_success_1___first_call)
+{
+       tdm_error error = TDM_ERROR_BAD_REQUEST;
+       tdm_display *disp;
+
+       _init_test();
+
+       //to download tdm_backend_module;
+       stub_dlfcn_ctrl.dlopen_returned_val = (void*)1;
+       stub_dlfcn_ctrl.dlsym_returned_val = &tdm_backend_module_stub;
+
+       setenv("TDM_DEBUG_MODULE", "all", 1);
+       setenv("TDM_DEBUG_DUMP", "capture,pp,layer,all", 1);
+       setenv("TDM_DEBUG_PATH", "log.txt", 1);
+       stub_getenv_return_real_value = 1;
+
+       disp = tdm_display_init(&error);
+
+       ASSERT_EQ(TDM_ERROR_NONE, error);
+       ASSERT_TRUE(g_private_display != NULL);
+       ASSERT_TRUE(g_private_display == disp);
+       ASSERT_EQ(1, g_private_display->init_count);
+}
+
+TEST(tdm_display_init, work_flow_success_2___second_call)
+{
+       tdm_error error = TDM_ERROR_BAD_REQUEST;
+       tdm_display *disp;
+       tdm_private_display display;
+
+       _init_test();
+       memset(&display, 0, sizeof(display));
+       g_private_display = &display;
+       g_private_display->init_count = 1;
+
+       disp = tdm_display_init(&error);
+
+       ASSERT_EQ(TDM_ERROR_NONE, error);
+       ASSERT_TRUE(g_private_display != NULL);
+       ASSERT_TRUE(g_private_display == disp);
+       ASSERT_EQ(2, g_private_display->init_count);
+}
+
+
+TEST(tdm_display_init, work_flow_error_1___calloc_error)
+{
+       tdm_error error = TDM_ERROR_BAD_REQUEST;
+       tdm_display *disp;
+
+       _init_test();
+       CALLOC_ERROR = 1;
+
+       disp = tdm_display_init(&error);
+
+       ASSERT_EQ(TDM_ERROR_OUT_OF_MEMORY, error);
+       ASSERT_TRUE(disp == NULL);
+       ASSERT_TRUE(g_private_display == NULL);
+}
+
+TEST(tdm_display_init, work_flow_error_2___mutex_init_error)
+{
+       tdm_error error = TDM_ERROR_BAD_REQUEST;
+       tdm_display *disp;
+
+       _init_test();
+       PTHREAD_MUTEX_INIT_ERROR = 1;
+
+       disp = tdm_display_init(&error);
+
+       ASSERT_NE(TDM_ERROR_NONE, error);
+       ASSERT_TRUE(disp == NULL);
+       ASSERT_TRUE(g_private_display == NULL);
+}
+
 /* tdm_display_deinit */
 
-TEST(tdm_display_deinit, work_flow_success_1)
+TEST(tdm_display_deinit, work_flow_success_1___init_count_more_then_one)
 {
        tdm_private_display *dpy;
        unsigned int expected = 2;
@@ -85,109 +169,151 @@ TEST(tdm_display_deinit, work_flow_success_1)
        ASSERT_EQ(actual, expected);
 }
 
-/* tdm_display_init() */
-TEST(tdm_display_init, work_flow_success_7)
+TEST(tdm_display_deinit, work_flow_success_2___init_count_is_one)
 {
-       int actual;
-       int expected = 1;
+       unsigned int expected = 2;
+       unsigned int actual;
+
+       tdm_error error = TDM_ERROR_BAD_REQUEST;
+       tdm_display *disp;
 
        _init_test();
 
-       PTHREAD_MUTEX_INIT_ERROR = 1;
-       FREE_CALLED = 0;
+       //to download tdm_backend_module;
+       stub_dlfcn_ctrl.dlopen_returned_val = (void*)1;
+       stub_dlfcn_ctrl.dlsym_returned_val = &tdm_backend_module_stub;
 
-       tdm_display_init(NULL);
+       disp = tdm_display_init(&error);
 
-       actual = FREE_CALLED;
+       ASSERT_EQ(TDM_ERROR_NONE, error);
 
-       ASSERT_EQ(actual, expected);
+       //call tested function
+       tdm_display_deinit(disp);
+
+       ASSERT_EQ(NULL, g_private_display);
+       ASSERT_TRUE(FREE_CALLED);
 }
 
-TEST(tdm_display_init, work_flow_success_6)
-{
-       tdm_private_display *actual;
-       tdm_private_display *expected;
 
-       _init_test();
-
-       PTHREAD_MUTEX_INIT_ERROR = 1;
+/* tdm_display_check_module_abi */
+TEST(tdm_display_check_module_abi, work_flow_success_1)
+{
+       int res;
+       tdm_private_display private_display;
+       tdm_backend_module module;
+       private_display.module_data = &module;
+       module.abi_version = 0x00010001;
 
-       actual = (tdm_private_display *)tdm_display_init(NULL);
+       res = tdm_display_check_module_abi(&private_display, 1, 1);
 
-       expected = NULL;
+       ASSERT_EQ(1, res);
+}
 
-       ASSERT_EQ(actual, expected);
+TEST(tdm_display_check_module_abi, work_flow_error_1___wrong_version)
+{
+       int res;
+       tdm_private_display private_display;
+       tdm_backend_module module;
+       private_display.module_data = &module;
+       module.abi_version = 0x00010001;
+
+       /*minor*/
+       res = tdm_display_check_module_abi(&private_display, 1, 2);
+       ASSERT_EQ(0, res);
+
+       /*major*/
+       res = tdm_display_check_module_abi(&private_display, 2, 1);
+       ASSERT_EQ(0, res);
 }
 
-TEST(tdm_display_init, work_flow_success_5)
+/* tdm_display_check_module_abi */
+TEST(tdm_display_enable_debug_module, work_flow_success_1)
 {
        tdm_error error;
-       tdm_error expected_error;
-
-       _init_test();
 
-       error = TDM_ERROR_BAD_REQUEST;
-       PTHREAD_MUTEX_INIT_ERROR = 1;
+       //check all
+       error = tdm_display_enable_debug_module("all");
+       ASSERT_EQ(0xFFFFFFFF, tdm_debug_module);
+       ASSERT_EQ(TDM_ERROR_NONE, error);
 
-       tdm_display_init(&error);
+       //check none
+       error = tdm_display_enable_debug_module("none");
+       ASSERT_EQ(0, tdm_debug_module);
+       ASSERT_EQ(TDM_ERROR_NONE, error);
 
-       expected_error = TDM_ERROR_OPERATION_FAILED;
+       //check buffer,thread,mutex,vblank
+       error = tdm_display_enable_debug_module("buffer,thread,mutex,vblank");
+       ASSERT_EQ((TDM_DEBUG_BUFFER | TDM_DEBUG_THREAD | TDM_DEBUG_MUTEX | TDM_DEBUG_VBLANK) ,
+                 tdm_debug_module);
+       ASSERT_EQ(TDM_ERROR_NONE, error);
 
-       ASSERT_EQ(error, expected_error);
 }
 
-TEST(tdm_display_init, work_flow_success_4)
+TEST(tdm_display_enable_debug_module, work_flow_error_1___bad_module)
 {
-       tdm_private_display *actual;
-       tdm_private_display *expected = NULL;
-
-       _init_test();
-
-       CALLOC_ERROR = 1;
-
-       actual = (tdm_private_display *)tdm_display_init(NULL);
+       tdm_error error;
 
-       ASSERT_EQ(actual, expected);
+       //check bufer
+       error = tdm_display_enable_debug_module("bufer");
+       ASSERT_EQ(0 , tdm_debug_module);
+       ASSERT_NE(TDM_ERROR_NONE, error);
 }
 
-TEST(tdm_display_init, work_flow_success_3)
+/* tdm_display_enable_ttrace_vblank */
+TEST(tdm_display_enable_ttrace_vblank, work_flow_success_1)
 {
-       tdm_error error = TDM_ERROR_BAD_REQUEST;
-       tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
+       tdm_error error;
+       tdm_private_display private_display;
+       tdm_private_output output;
+       tdm_output_mode current_mode;
+       int vblank = 1;
 
        _init_test();
+       stub_tdm_vblank_create_returned = &vblank;
 
-       CALLOC_ERROR = 1;
+       output.current_mode = &current_mode;
+       output.private_display = &private_display;
 
-       tdm_display_init(&error);
+       error = tdm_display_enable_ttrace_vblank(&private_display, &output, 1);
+       ASSERT_EQ(TDM_ERROR_NONE, error);
 
-       ASSERT_EQ(error, expected_error);
+       error = tdm_display_enable_ttrace_vblank(&private_display, &output, 0);
 }
 
-TEST(tdm_display_init, work_flow_success_2)
+TEST(tdm_display_enable_ttrace_vblank, work_flow_error_1___vblank_wait_fail)
 {
-       tdm_error error = TDM_ERROR_BAD_REQUEST;
-       tdm_error expected_error = TDM_ERROR_NONE;
+       tdm_error error;
+       tdm_private_display private_display;
+       tdm_private_output output;
+       tdm_output_mode current_mode;
+       int vblank = 1;
 
        _init_test();
 
-       g_private_display = &ut_private_display;
+       output.current_mode = &current_mode;
+       output.private_display = &private_display;
+       stub_tdm_vblank_create_returned = &vblank;
 
-       tdm_display_init(&error);
+       stub_tdm_vblank_wait_error = 1;
 
-       ASSERT_EQ(error, expected_error);
+       error = tdm_display_enable_ttrace_vblank(&private_display, &output, 1);
+       ASSERT_NE(TDM_ERROR_NONE, error);
 }
 
-TEST(tdm_display_init, work_flow_success_1)
+TEST(tdm_display_enable_ttrace_vblank, work_flow_error_2___vblank_create_fail)
 {
-       tdm_private_display *actual;
-       tdm_private_display *expected = &ut_private_display;
+       tdm_error error;
+       tdm_private_display private_display;
+       tdm_private_output output;
+       tdm_output_mode current_mode;
 
        _init_test();
+       stub_tdm_vblank_create_returned = NULL;
 
-       g_private_display = &ut_private_display;
+       output.current_mode = &current_mode;
+       output.private_display = &private_display;
 
-       actual = (tdm_private_display *)tdm_display_init(NULL);
-
-       ASSERT_TRUE(actual == expected);
+       error = tdm_display_enable_ttrace_vblank(&private_display, &output, 1);
+       ASSERT_EQ(TDM_ERROR_NONE, error);
 }
+