utest: support the gcov 53/169553/2
authorSangjin Lee <lsj119@samsung.com>
Wed, 7 Feb 2018 10:18:40 +0000 (19:18 +0900)
committerchangyeon lee <cyeon.lee@samsung.com>
Thu, 8 Feb 2018 07:12:46 +0000 (07:12 +0000)
Change-Id: Ib9c2577c3908434d5873769b60a606c3d56f3f9b

packaging/libwayland-tbm.spec
src/Makefile.am
tool/Makefile.am
utests/src/ut_base.cpp
utests/src/ut_main.cpp
utests/src/ut_wayland_tbm.cpp

index ed63bf9..de75d2c 100644 (file)
@@ -1,4 +1,5 @@
 %define UTEST_PACKAGE 1
+%define UTEST_GCOV    1
 
 Name:          libwayland-tbm
 Version:       0.3.2
@@ -70,6 +71,12 @@ UTEST="no"
 UTEST="yes"
 %endif
 
+%if "%{UTEST_GCOV}" == "1"
+CFLAGS+=" -fprofile-arcs -ftest-coverage -DTIZEN_TEST_GCOV"
+CXXFLAGS+=" -fprofile-arcs -ftest-coverage -DTIZEN_TEST_GCOV"
+LDFLAGS+=" -lgcov"
+%endif
+
 %reconfigure --with-utests=${UTEST} \
              CFLAGS="${CFLAGS} -Wall -Werror" \
              CXXFLAGS="${CXXFLAGS} -Wall -Werror" \
index 9b12e2f..91eff97 100644 (file)
@@ -12,7 +12,7 @@ nodist_include_HEADERS = \
        wayland-tbm-server-protocol.h \
        wayland-tbm-client-protocol.h
 
-libwayland_tbm_server_la_LDFLAGS = -export-dynamic
+libwayland_tbm_server_la_LDFLAGS = $(LDFLAGS) -export-dynamic
 libwayland_tbm_server_la_CFLAGS = \
        $(AM_CFLAGS) \
        $(WL_TBM_COMMON_CFLAGS) \
@@ -33,7 +33,7 @@ nodist_libwayland_tbm_server_la_SOURCES =             \
        wayland-tbm-client-protocol.h   \
        wayland-tbm-protocol.c
 
-libwayland_tbm_client_la_LDFLAGS = -export-dynamic
+libwayland_tbm_client_la_LDFLAGS = $(LDFLAGS) -export-dynamic
 libwayland_tbm_client_la_CFLAGS = \
        $(AM_CFLAGS) \
        $(WL_TBM_COMMON_CFLAGS) \
index 8063295..c6d1db7 100644 (file)
@@ -10,6 +10,7 @@ wayland_tbm_monitor_CFLAGS = \
        $(WL_TBM_CLIENT_CFLAGS)
 
 wayland_tbm_monitor_LDFLAGS = \
+       $(LDFLAGS) \
        -pie
 
 wayland_tbm_monitor_LDADD = \
index e336844..6c17fdf 100644 (file)
@@ -26,6 +26,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 DEALINGS IN THE SOFTWARE.
 */
+#include "gtest/gtest.h"
 #include "ut_base.h"
 #include "wayland-tbm-server.h"
 #include "wayland-tbm-test-server-protocol.h"
@@ -35,6 +36,9 @@ typedef struct
        struct wl_display *wl_disp;
        struct wayland_tbm_server *wl_tbm_server;
        struct wl_global *wl_tbm_test;
+
+       struct wl_listener client_add_cb;
+       struct wl_listener client_destroy_cb;
 } wlt_server_t;
 
 typedef struct
@@ -204,6 +208,26 @@ _wl_tbm_test_bind_cb(struct wl_client *client, void *data, uint32_t version, uin
        wl_resource_set_implementation(res, &wl_tbm_test_impl, data, _res_wl_tbm_test_destroy);
 }
 
+static void
+_wl_tbm_test_client_add_cb(struct wl_listener *listener, void *data)
+{
+       struct wl_client *client = (struct wl_client*) data;
+       wl_client_add_destroy_listener(client, &wlt_server.client_destroy_cb);
+}
+
+static void
+_wl_tbm_test_client_destory_cb(struct wl_listener *listener, void *data)
+{
+       wayland_tbm_server_deinit(wlt_server.wl_tbm_server);
+       wlt_server.wl_tbm_server = nullptr;
+
+       wl_display_terminate(wlt_server.wl_disp);
+}
+
+#ifdef TIZEN_TEST_GCOV
+extern "C" void __gcov_flush(void);
+#endif
+
 int
 launch_server(void)
 {
@@ -213,6 +237,10 @@ launch_server(void)
        if (pid != 0)
                return pid;
 
+#ifdef TIZEN_TEST_GCOV
+       setenv("GCOV_PREFIX", "/tmp", 1);
+#endif
+
        wlt_server.wl_disp = wl_display_create();
        if (!wlt_server.wl_disp)
                exit(-1);
@@ -224,6 +252,10 @@ launch_server(void)
        if (!wlt_server.wl_tbm_server)
                exit(-1);
 
+       wlt_server.client_add_cb.notify = _wl_tbm_test_client_add_cb;
+       wlt_server.client_destroy_cb.notify = _wl_tbm_test_client_destory_cb;
+       wl_display_add_client_created_listener(wlt_server.wl_disp, &wlt_server.client_add_cb);
+
        wlt_server.wl_tbm_test = wl_global_create(wlt_server.wl_disp,
                                                                                          &wl_tbm_test_interface,
                                                                                          1,
@@ -234,11 +266,19 @@ launch_server(void)
 
        wl_display_run(wlt_server.wl_disp);
 
+       wl_display_destroy(wlt_server.wl_disp);
+#ifdef TIZEN_TEST_GCOV
+       __gcov_flush();
+#endif
+       exit(0);
+
        return pid;
 }
 
 void
 kill_server(int pid)
 {
+       printf("[Client] Pre kill Server(%d)\n", pid);
        kill(pid, SIGINT);
+       printf("[Client] Post kill Server(%d)\n", pid);
 }
\ No newline at end of file
index 79f8ccb..02f2f0b 100644 (file)
@@ -29,8 +29,18 @@ DEALINGS IN THE SOFTWARE.
 
 #include "gtest/gtest.h"
 
+#ifdef TIZEN_TEST_GCOV
+extern "C" void __gcov_flush(void);
+#endif
+
 int main(int argc, char **argv)
 {
+       auto AllTestSuccess = false;
+
+#ifdef TIZEN_TEST_GCOV
+       setenv("GCOV_PREFIX", "/tmp", 1);
+#endif
+
        try {
                ::testing::InitGoogleTest(&argc, argv);
                ::testing::FLAGS_gtest_death_test_style = "fast";
@@ -38,5 +48,10 @@ int main(int argc, char **argv)
                exit(EXIT_FAILURE);
        }
 
-       return RUN_ALL_TESTS();
+       AllTestSuccess = RUN_ALL_TESTS();
+
+#ifdef TIZEN_TEST_GCOV
+       __gcov_flush();
+#endif
+       return AllTestSuccess;
 }
\ No newline at end of file
index f731541..55ea25e 100644 (file)
@@ -104,7 +104,7 @@ void UtWlTbm::SetUpTestCase()
                wl_disp = wl_display_connect("ut_wayland_tbm");
                if (wl_disp == nullptr)
                {
-                       sleep(1);
+                       usleep(1000);
                        printf("Wait... connect to server\n");
                }
        } while (wl_disp == nullptr && cnt++ < 10);
@@ -124,10 +124,11 @@ void UtWlTbm::TearDownTestCase()
        wayland_tbm_client_deinit(wl_tbm_client);
        wl_tbm_client = nullptr;
 
+       wl_tbm_test_destroy(wl_tbm_test);
+       wl_tbm_test = nullptr;
+
        wl_display_roundtrip(wl_disp);
        wl_display_disconnect(wl_disp);
-
-       kill_server(server_pid);
 }
 
 void UtWlTbm::SetUp()