From f15e175b3ed29232bf95cb541ffe3658d19adefe Mon Sep 17 00:00:00 2001 From: "SukHyung, Kang" Date: Fri, 14 Aug 2020 15:14:18 +0900 Subject: [PATCH] Add unittest for badge Change-Id: I398efb3a576ea7416448febbdead494464e45696 Signed-off-by: SukHyung, Kang --- CMakeLists.txt | 7 + packaging/badge.spec | 2 +- tests/CMakeLists.txt | 7 - tests/mock/gio_mock.cc | 54 +++--- tests/mock/gio_mock.h | 29 +-- tests/unit_tests/src/test_badge.cc | 382 ++++++++++++++++++++++++++++++++++++- 6 files changed, 414 insertions(+), 67 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2398072..541863a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,4 +63,11 @@ INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ INSTALL(FILES ${CMAKE_BINARY_DIR}/11_badge-add.post DESTINATION ${SYSCONF_INSTALL_DIR}/gumd/useradd.d/) INSTALL(TARGETS badge_init DESTINATION bin) +IF(NOT DEFINED MINIMUM_BUILD) ADD_SUBDIRECTORY(tests) +ENABLE_TESTING() +SET(BADGE_UNIT_TESTS badge_unittests) +ADD_TEST(NAME ${BADGE_UNIT_TESTS} COMMAND ${BADGE_UNIT_TESTS}) + +ADD_DEPENDENCIES(${BADGE_UNIT_TESTS} badge) +ENDIF(NOT DEFINED MINIMUM_BUILD) diff --git a/packaging/badge.spec b/packaging/badge.spec index a6e8564..234b925 100644 --- a/packaging/badge.spec +++ b/packaging/badge.spec @@ -94,7 +94,7 @@ find . -name '*.gcno' -exec cp '{}' gcov-obj ';' %endif %check -ctest --output-on-failure %{?_smp_mflags} +ctest -V %if 0%{?gcov:1} lcov -c --ignore-errors graph --no-external -q -d . -o badge.info genhtml badge.info -o badge.out diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 848994b..c90fac8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,8 +1 @@ -IF(NOT DEFINED MINIMUM_BUILD) -ENABLE_TESTING() -SET(BADGE_UNIT_TESTS badge_unittests) -ADD_TEST(NAME ${BADGE_UNIT_TESTS} COMMAND ${BADGE_UNIT_TESTS}) - ADD_SUBDIRECTORY(unit_tests) -ADD_DEPENDENCIES(${BADGE_UNIT_TESTS} badge) -ENDIF(NOT DEFINED MINIMUM_BUILD) diff --git a/tests/mock/gio_mock.cc b/tests/mock/gio_mock.cc index cd176fb..67f4fde 100644 --- a/tests/mock/gio_mock.cc +++ b/tests/mock/gio_mock.cc @@ -47,34 +47,6 @@ extern "C" GVariant* g_dbus_message_get_body(GDBusMessage* arg0) { return MOCK_HOOK_P1(GioMock, g_dbus_message_get_body, arg0); } -extern "C" gboolean g_dbus_connection_emit_signal(GDBusConnection* arg0, - const gchar* arg1, const gchar* arg2, const gchar* arg3, const gchar* arg4, - GVariant* arg5, GError** arg6) { - return MOCK_HOOK_P7(GioMock, g_dbus_connection_emit_signal, - arg0, arg1, arg2, arg3, arg4, arg5, arg6); -} - -extern "C" GDBusNodeInfo* g_dbus_node_info_new_for_xml( - const gchar* arg0, GError** arg1) { - return MOCK_HOOK_P2(GioMock, g_dbus_node_info_new_for_xml, arg0, arg1); -} - -extern "C" guint g_dbus_connection_register_object(GDBusConnection* arg0, - const gchar* arg1, GDBusInterfaceInfo* arg2, - const GDBusInterfaceVTable* arg3, gpointer arg4, - GDestroyNotify arg5, GError** arg6) { - return MOCK_HOOK_P7(GioMock, g_dbus_connection_register_object, - arg0, arg1, arg2, arg3, arg4, arg5, arg6); -} - -extern "C" guint g_bus_own_name_on_connection(GDBusConnection* arg0, - const gchar* arg1, GBusNameOwnerFlags arg2, - GBusNameAcquiredCallback arg3, GBusNameLostCallback arg4, - gpointer arg5, GDestroyNotify arg6) { - return MOCK_HOOK_P7(GioMock, g_bus_own_name_on_connection, - arg0, arg1, arg2, arg3, arg4, arg5, arg6); -} - extern "C" guint g_dbus_connection_signal_subscribe(GDBusConnection* arg0, const gchar* arg1, const gchar* arg2, const gchar* arg3, const gchar* arg4, const gchar* arg5, GDBusSignalFlags arg6, GDBusSignalCallback arg7, @@ -91,8 +63,26 @@ extern "C" void g_dbus_connection_send_message_with_reply(GDBusConnection* arg0, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -extern "C" GDBusMessage* g_dbus_connection_send_message_with_reply_finish( - GDBusConnection* arg0, GAsyncResult* arg1, GError** arg2) { - return MOCK_HOOK_P3(GioMock, g_dbus_connection_send_message_with_reply_finish, - arg0, arg1, arg2); +extern "C" gboolean g_dbus_message_to_gerror( + GDBusMessage* arg0, GError** arg1) { + return MOCK_HOOK_P2(GioMock, g_dbus_message_to_gerror, + arg0, arg1); +} + +extern "C" guint g_bus_watch_name_on_connection( + GDBusConnection* arg0, const gchar* arg1, GBusNameWatcherFlags arg2, + GBusNameAppearedCallback arg3, GBusNameVanishedCallback arg4, + gpointer arg5, GDestroyNotify arg6) { + return MOCK_HOOK_P7(GioMock, g_bus_watch_name_on_connection, + arg0, arg1, arg2, arg3, arg4, arg5, arg6); +} + +extern "C" void g_bus_unwatch_name(guint arg0) { + return MOCK_HOOK_P1(GioMock, g_bus_unwatch_name, arg0); +} + +extern "C" void g_dbus_connection_signal_unsubscribe( + GDBusConnection* arg0, guint arg1) { + return MOCK_HOOK_P2(GioMock, g_dbus_connection_signal_unsubscribe, + arg0, arg1); } diff --git a/tests/mock/gio_mock.h b/tests/mock/gio_mock.h index ab343d0..298ce50 100644 --- a/tests/mock/gio_mock.h +++ b/tests/mock/gio_mock.h @@ -28,25 +28,13 @@ class GioMock : public virtual ModuleMock { MOCK_METHOD3(g_bus_get_sync, GDBusConnection*(GBusType, GCancellable*, GError**)); - MOCK_METHOD7(g_bus_own_name_on_connection, - guint(GDBusConnection*, const gchar*, GBusNameOwnerFlags, - GBusNameAcquiredCallback, GBusNameLostCallback, - gpointer, GDestroyNotify)); - MOCK_METHOD4(g_dbus_message_new_method_call, GDBusMessage*(const gchar*, const gchar*, const gchar*, const gchar*)); MOCK_METHOD2(g_dbus_message_set_body, void(GDBusMessage*, GVariant*)); MOCK_METHOD1(g_dbus_message_get_body, GVariant*(GDBusMessage*)); - MOCK_METHOD7(g_dbus_connection_send_message_with_reply_sync, GDBusMessage*(GDBusConnection*, GDBusMessage*, GDBusSendMessageFlags, gint, volatile guint32*, GCancellable*, GError**)); - MOCK_METHOD7(g_dbus_connection_emit_signal, - gboolean(GDBusConnection*, const gchar*, const gchar*, const gchar*, - const gchar*, GVariant*, GError**)); - MOCK_METHOD7(g_dbus_connection_register_object, - guint(GDBusConnection*, const gchar*, GDBusInterfaceInfo*, - const GDBusInterfaceVTable*, gpointer, GDestroyNotify, GError**)); MOCK_METHOD10(g_dbus_connection_signal_subscribe, guint(GDBusConnection*, const gchar*, const gchar*, const gchar*, const gchar*, const gchar*, GDBusSignalFlags, GDBusSignalCallback, @@ -54,14 +42,15 @@ class GioMock : public virtual ModuleMock { MOCK_METHOD8(g_dbus_connection_send_message_with_reply, void(GDBusConnection*, GDBusMessage*, GDBusSendMessageFlags, gint, volatile guint32*, GCancellable*, GAsyncReadyCallback, gpointer)); - MOCK_METHOD3(g_dbus_connection_send_message_with_reply_finish, - GDBusMessage*(GDBusConnection*, GAsyncResult*, GError**)); - - MOCK_METHOD2(g_dbus_node_info_new_for_xml, - GDBusNodeInfo*(const gchar*, GError**)); - - MOCK_METHOD2(g_dbus_method_invocation_return_value, - GDBusNodeInfo*(GDBusMethodInvocation*, GVariant*)); + MOCK_METHOD2(g_dbus_message_to_gerror, + gboolean(GDBusMessage*, GError**)); + MOCK_METHOD7(g_bus_watch_name_on_connection, + guint(GDBusConnection*, const gchar*, GBusNameWatcherFlags, + GBusNameAppearedCallback, GBusNameVanishedCallback, gpointer, + GDestroyNotify)); + MOCK_METHOD1(g_bus_unwatch_name, void(guint)); + MOCK_METHOD2(g_dbus_connection_signal_unsubscribe, + void(GDBusConnection*, guint)); }; #endif // MOCK_GIO_MOCK_H_ diff --git a/tests/unit_tests/src/test_badge.cc b/tests/unit_tests/src/test_badge.cc index cc531d5..0288c18 100644 --- a/tests/unit_tests/src/test_badge.cc +++ b/tests/unit_tests/src/test_badge.cc @@ -16,7 +16,7 @@ #include #include -#include +#include "badge.h" #include @@ -30,14 +30,11 @@ using ::testing::_; using ::testing::DoAll; using ::testing::Return; using ::testing::SetArgPointee; -using ::testing::Invoke; -using ::testing::SetArrayArgument; class Mocks : public ::testing::NiceMock, - ::testing::NiceMock, - ::testing::NiceMock, - ::testing::NiceMock { -}; + public ::testing::NiceMock, + public ::testing::NiceMock, + public ::testing::NiceMock {}; class BadgeTest : public TestFixture { public: @@ -50,3 +47,374 @@ class BadgeTest : public TestFixture { virtual void TearDown() { } }; + +TEST_F(BadgeTest, badge_new) { + int ret; + bool is_supported = true; + char *_pkgid = (char *)"mypkgid"; + GDBusConnection *_conn = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + aul_app_get_pkgname_bypid(_, _, _)). + WillOnce(DoAll(SetArgPointee<1>(*_pkgid), + Return(0))); + + EXPECT_CALL(GetMock(), + g_bus_get_sync(_, _, _)). + WillOnce(Return(_conn)); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_new("testappid"); + + g_object_unref(_conn); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_add) { + int ret; + bool is_supported = true; + char *_pkgid = (char *)"mypkgid"; + package_manager_compare_result_type_e comp_ret = PACKAGE_MANAGER_COMPARE_MATCH; + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + aul_app_get_pkgname_bypid(_, _, _)). + WillOnce(DoAll(SetArgPointee<1>(*_pkgid), + Return(0))); + + EXPECT_CALL(GetMock(), + package_manager_compare_app_cert_info(_, _, _)). + WillOnce(DoAll(SetArgPointee<2>(comp_ret), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_add("myappid"); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_remove) { + int ret; + bool is_supported = true; + char *_pkgid = (char *)"mypkgid"; + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + aul_app_get_pkgname_bypid(_, _, _)). + WillOnce(DoAll(SetArgPointee<1>(*_pkgid), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_remove("myappid"); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_set_count) { + int ret; + bool is_supported = true; + char *_pkgid = (char *)"mypkgid"; + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + aul_app_get_pkgname_bypid(_, _, _)). + WillOnce(DoAll(SetArgPointee<1>(*_pkgid), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_set_count("myappid", 9); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_get_count) { + int ret; + bool is_supported = true; + unsigned int count = 0; + GVariant *body = g_variant_new("(i)", 3); + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_get_body(_)). + WillOnce(Return(body)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_get_count("myappid", &count); + + if (body) + g_variant_unref(body); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_set_display) { + int ret; + bool is_supported = true; + char *_pkgid = (char *)"mypkgid"; + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + aul_app_get_pkgname_bypid(_, _, _)). + WillOnce(DoAll(SetArgPointee<1>(*_pkgid), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_set_display("myappid", 1); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_get_display) { + int ret; + bool is_supported = true; + unsigned int is_display = 0; + GVariant *body = g_variant_new("(i)", 1); + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_get_body(_)). + WillOnce(Return(body)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_get_display("myappid", &is_display); + + if (body) + g_variant_unref(body); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +bool _badge_foreach_cb(const char *app_id, unsigned int count, void *user_data) { + return true; +} + +TEST_F(BadgeTest, badge_foreach) { + int ret; + bool is_supported = true; + GVariant *body = g_variant_new("(a(v))", NULL); + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_message_get_body(_)). + WillOnce(Return(body)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillOnce(Return(FALSE)); + + ret = badge_foreach(_badge_foreach_cb, NULL); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +void _badge_change_cb(unsigned int action, const char *app_id, + unsigned int count, void *user_data) { +} + +TEST_F(BadgeTest, badge_register_changed_cb) { + int ret; + bool is_supported = true; + GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + GDBusMessage *_msg4 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL); + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + g_dbus_connection_signal_subscribe( + _, _, _, _, _, _, _, _, _, _)). + WillOnce(Return(99)); + + EXPECT_CALL(GetMock(), + g_dbus_message_new_method_call(_, _, _, _)). + WillOnce(Return(_msg)). + WillOnce(Return(_msg2)); + + EXPECT_CALL(GetMock(), + g_dbus_connection_send_message_with_reply_sync( + _, _, _, _, _, _, _)). + WillOnce(Return(_msg3)). + WillOnce(Return(_msg4)); + + EXPECT_CALL(GetMock(), + g_dbus_message_to_gerror(_, _)). + WillRepeatedly(Return(FALSE)); + + EXPECT_CALL(GetMock(), + g_bus_watch_name_on_connection( + _, _, _, _, _, _, _)). + WillOnce(Return(88)); + + ret = badge_register_changed_cb(_badge_change_cb, NULL); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} + +TEST_F(BadgeTest, badge_unregister_changed_cb) { + int ret; + bool is_supported = true; + + EXPECT_CALL(GetMock(), + system_info_get_platform_bool(_, _)). + WillRepeatedly(DoAll(SetArgPointee<1>(is_supported), + Return(0))); + + EXPECT_CALL(GetMock(), + g_bus_unwatch_name(_)). + Times(1); + + EXPECT_CALL(GetMock(), + g_dbus_connection_signal_unsubscribe(_, _)). + Times(1); + + ret = badge_unregister_changed_cb(_badge_change_cb); + + EXPECT_EQ(ret, BADGE_ERROR_NONE); +} -- 2.7.4