ut: improve code coverage of tdm_event_loop.c 32/158232/4
authorRoman Peresipkyn <r.peresipkyn@samsung.com>
Fri, 16 Dec 2016 09:20:37 +0000 (11:20 +0200)
committerSooChan Lim <sc1.lim@samsung.com>
Mon, 30 Oct 2017 11:29:48 +0000 (11:29 +0000)
Change-Id: Ieee69447250e8ebef15b8abda58731dd56b2b79a
Signed-off-by: Roman Peresipkyn <r.peresipkyn@samsung.com>
Signed-off-by: SooChan Lim <sc1.lim@samsung.com>
ut/src/ut_tdm_event_loop.cpp
ut/stubs/stub_tdm_server.h [new file with mode: 0644]
ut/stubs/stub_tdm_thread.h
ut/stubs/wayland-server-core.h

index f85cd67..8d0cf89 100644 (file)
  *
 **************************************************************************/
 
+#include <string.h>
+
 #include "gtest/gtest.h"
 
 #include "tbm_stubs.h"
 #include "stub_pthread.h"
 #include "stub_stdlib.h"
+#include "stub_tdm_server.h"
+#include "stub_tdm_thread.h"
 
 #include "tdm_event_loop.c"
 
+#define ZEROING_DATA(ptr, size_of_ptr) memset((void*)ptr, 0, size_of_ptr);
+
 static void _init_test()
 {
        WL_EVENT_LOOP_ADD_FD_ERROR = 0;
        WL_EVENT_SOURCE_FD_UPDATE_ERROR = 0;
        WL_EVENT_LOOP_ADD_TIMER_ERROR = 0;
        WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 0;
+       WL_DISPLAY_CREATE_ERROR = 0;
+
 
        stub_pthread_init();
        stub_tbm_init();
        stub_stdlib_init();
+       stub_tdm_server();
+       stub_tdm_thread_init();
 }
 
 /* HELPER FUNCTIONS */
@@ -69,7 +79,7 @@ tdm_error ut_tdm_event_loop_timer_handler(void *user_data)
 
 /* tdm_event_loop_source_timer_update */
 
-TEST(tdm_event_loop_source_timer, work_flow_success_2)
+TEST(tdm_event_loop_source_timer_update, work_flow_success_2)
 {
        tdm_error error = TDM_ERROR_OPERATION_FAILED;
        tdm_error expected_error = TDM_ERROR_NONE;
@@ -82,7 +92,7 @@ TEST(tdm_event_loop_source_timer, work_flow_success_2)
        ASSERT_EQ(error, expected_error);
 }
 
-TEST(tdm_event_loop_source_timer, work_flow_success_1)
+TEST(tdm_event_loop_source_timer_update, work_flow_success_1)
 {
        tdm_error error = TDM_ERROR_NONE;
        tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
@@ -426,3 +436,194 @@ TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_1)
 
        ASSERT_EQ(error, expected_error);
 }
+
+/* tdm_event_loop_init */
+
+TEST(tdm_event_loop_init, success_private_loop_was_allocated)
+{
+       tdm_error error = TDM_ERROR_NONE;
+       tdm_error expected_error = TDM_ERROR_NONE;
+       tdm_private_display private_display;
+       tdm_private_loop private_loop;
+
+       private_display.private_loop = &private_loop;
+
+       error = tdm_event_loop_init(&private_display);
+
+       ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_could_not_allocate_private_loop)
+{
+       tdm_error error = TDM_ERROR_NONE;
+       tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
+       tdm_private_display private_display;
+
+       _init_test();
+
+       private_display.private_loop = NULL;
+       CALLOC_ERROR = 1;
+
+       error = tdm_event_loop_init(&private_display);
+
+       ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_could_not_create_display)
+{
+       tdm_error error = TDM_ERROR_NONE;
+       tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
+       tdm_private_display private_display;
+
+       _init_test();
+
+       ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+       WL_DISPLAY_CREATE_ERROR = 1;
+
+       error = tdm_event_loop_init(&private_display);
+
+       ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_init_tdm_server)
+{
+       tdm_error error = TDM_ERROR_NONE;
+       tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
+       tdm_private_display private_display;
+
+       _init_test();
+
+       ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+       stdub_tdm_server_init_error = 1;
+
+       error = tdm_event_loop_init(&private_display);
+
+       ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_init_thread)
+{
+       tdm_error error = TDM_ERROR_NONE;
+       tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
+       tdm_private_display private_display;
+
+       _init_test();
+
+       ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+       stub_tdm_thread_init_init_error = 1;
+
+       error = tdm_event_loop_init(&private_display);
+
+       ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, success_first_initialization_of_private_loop)
+{
+       tdm_error error = TDM_ERROR_NONE;
+       tdm_error expected_error = TDM_ERROR_NONE;
+       tdm_private_display private_display;
+       int expected_fd = -1;
+
+       _init_test();
+
+       ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+
+       error = tdm_event_loop_init(&private_display);
+
+       ASSERT_EQ(error, expected_error);
+       ASSERT_TRUE(private_display.private_loop);
+       ASSERT_EQ(private_display.private_loop->backend_fd, expected_fd);
+
+       /* XXX: private_loop has been allocated within tdm_event_loop_init
+        * so it's out duty to delete it */
+       free(private_display.private_loop);
+}
+
+/* tdm_event_loop_deinit */
+
+TEST(tdm_event_loop_deinit, success_private_loop_is_NULL)
+{
+       tdm_private_display private_display;
+
+       _init_test();
+
+       ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+
+       tdm_event_loop_deinit(&private_display);
+
+       ASSERT_FALSE(private_display.private_loop);
+}
+
+TEST(tdm_event_loop_deinit, success_private_loop_is_not_NULL)
+{
+       tdm_private_display private_display;
+       tdm_event_loop_source_base *event_loop_source_base;
+       struct wl_display wl_display;
+
+       _init_test();
+
+       ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+
+       private_display.private_loop = calloc(1, sizeof(tdm_private_loop));
+       private_display.private_loop->backend_source = NULL;
+       private_display.private_loop->wl_display = &wl_display;
+
+       tdm_event_loop_deinit(&private_display);
+
+       ASSERT_FALSE(private_display.private_loop);
+}
+
+/* tdm_event_loop_source_remove */
+
+TEST(tdm_event_loop_source_remove, success_source_is_NULL)
+{
+       _init_test();
+       tdm_event_loop_source_remove(NULL);
+}
+
+TEST(tdm_event_loop_source_remove, success_source_is_not_NULL)
+{
+       tdm_event_loop_source_base *base;
+
+       _init_test();
+
+       base = calloc(1, sizeof(tdm_event_loop_source_base));
+       ASSERT_TRUE(base);
+
+       tdm_event_loop_source_remove(base);
+}
+
+/* tdm_event_loop_flush */
+
+TEST(tdm_event_loop_flush, success_wl_display_is_NULL)
+{
+       tdm_private_display private_display;
+       tdm_private_loop private_loop;
+
+       ZEROING_DATA(&private_display, sizeof(private_display))
+       ZEROING_DATA(&private_loop, sizeof(private_loop))
+
+       private_display.private_loop = &private_loop;
+
+       tdm_event_loop_flush(&private_display);
+}
+
+TEST(tdm_event_loop_flush, success_wl_display_is_not_NULL)
+{
+       tdm_private_display private_display;
+       tdm_private_loop private_loop;
+       struct wl_display wl_display;
+
+       ZEROING_DATA(&private_display, sizeof(private_display))
+       ZEROING_DATA(&private_loop, sizeof(private_loop))
+
+       private_display.private_loop = &private_loop;
+       private_display.private_loop->wl_display = &wl_display;
+
+       tdm_event_loop_flush(&private_display);
+}
+
+
+
+
+
diff --git a/ut/stubs/stub_tdm_server.h b/ut/stubs/stub_tdm_server.h
new file mode 100644 (file)
index 0000000..a65da9e
--- /dev/null
@@ -0,0 +1,40 @@
+#ifndef STUB_TDM_SERVER_H
+#define STUB_TDM_SERVER_H
+
+#include "tdm.h"
+#include "tdm_private.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static int stdub_tdm_server_init_error;
+
+static void
+stub_tdm_server()
+{
+       stdub_tdm_server_init_error = 0;
+}
+
+static tdm_error
+stub_tdm_server_init(tdm_private_loop *private_loop)
+{
+       if (stdub_tdm_server_init_error)
+               return TDM_ERROR_OPERATION_FAILED;
+       return TDM_ERROR_NONE;
+}
+
+static void
+stub_tdm_server_deinit(tdm_private_loop *private_loop)
+{
+
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#define tdm_server_init stub_tdm_server_init
+#define tdm_server_deinit stub_tdm_server_deinit
+
+#endif // STUB_TDM_SERVER_H
index 4f8137e..1098320 100644 (file)
@@ -11,6 +11,7 @@ static int stub_tdm_thread_is_run;
 static int stub_tdm_thread_ret_fd;
 static int stub_tdm_thread_display_thread;
 static int stub_tdm_output_vblank_handler_count;
+static int stub_tdm_thread_init_init_error;
 
 static void stub_tdm_thread_init()
 {
@@ -21,6 +22,7 @@ static void stub_tdm_thread_init()
        stub_tdm_thread_ret_fd = 1;
        stub_tdm_thread_display_thread = 0;
        stub_tdm_output_vblank_handler_count = 0;
+       stub_tdm_thread_init_init_error = 0;
 }
 
 static int stub_tdm_thread_get_fd(tdm_private_loop *private_loop)
@@ -80,10 +82,21 @@ stub_tdm_output_vblank_handler(tdm_output *output, unsigned int sequence,
        stub_tdm_output_vblank_handler_count++;
 }
 
+/* XXX: named stub_tdm_thread_init_init since stub_tdm_thread_init has been
+   defined earlier */
+static tdm_error
+stub_tdm_thread_init_init(tdm_private_loop *private_loop)
+{
+       if (stub_tdm_thread_init_init_error)
+               return TDM_ERROR_OPERATION_FAILED;
+       return TDM_ERROR_NONE;
+}
+
 #define tdm_thread_get_fd stub_tdm_thread_get_fd
 #define tdm_thread_handle_cb stub_tdm_thread_handle_cb
 #define tdm_thread_send_cb stub_tdm_thread_send_cb
 #define tdm_thread_is_running stub_tdm_thread_is_running
 #define tdm_thread_in_display_thread stub_tdm_thread_in_display_thread
+#define tdm_thread_init stub_tdm_thread_init_init
 
 #endif // STUB_TDM_THREAD_H
index 1217a51..3cd7f6d 100644 (file)
@@ -7,6 +7,7 @@ static int WL_EVENT_LOOP_ADD_FD_ERROR;
 static int WL_EVENT_SOURCE_FD_UPDATE_ERROR;
 static int WL_EVENT_LOOP_ADD_TIMER_ERROR;
 static int WL_EVENT_SOURCE_TIMER_UPDATE_ERROR;
+static int WL_DISPLAY_CREATE_ERROR;
 
 enum {
        WL_EVENT_READABLE = 0x01,
@@ -57,6 +58,8 @@ static void wl_display_flush_clients(struct wl_display *display)
 
 static struct wl_display *wl_display_create()
 {
+       if (WL_DISPLAY_CREATE_ERROR)
+               return NULL;
        return &ut_wl_display;
 }