Add utc for preference-manager-vconf 07/236107/1
authorJi-hoon Lee <dalton.lee@samsung.com>
Mon, 15 Jun 2020 01:38:50 +0000 (10:38 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Mon, 15 Jun 2020 02:47:59 +0000 (11:47 +0900)
Change-Id: Idac4acc21d911a0d08f1322eefb2ecadfd3f8b13

tests/utc/CMakeLists.txt
tests/utc/preference-manager-vconf/CMakeLists.txt [new file with mode: 0644]
tests/utc/preference-manager-vconf/test_preference_manager_vconf.cpp [new file with mode: 0644]
tests/utc/preference-manager-vconf/vconf_mock.cpp [new file with mode: 0644]
tests/utc/preference-manager-vconf/vconf_mock.h [new file with mode: 0644]

index 332b649371c18459876c7cb5ae848f4e897d658e..09b035faf5e2029196a7857340d37ddf40531217 100644 (file)
@@ -4,3 +4,4 @@ ADD_SUBDIRECTORY(config)
 ADD_SUBDIRECTORY(client-manager)
 ADD_SUBDIRECTORY(audio-manager)
 ADD_SUBDIRECTORY(service-main)
+ADD_SUBDIRECTORY(preference-manager-vconf)
diff --git a/tests/utc/preference-manager-vconf/CMakeLists.txt b/tests/utc/preference-manager-vconf/CMakeLists.txt
new file mode 100644 (file)
index 0000000..96c7491
--- /dev/null
@@ -0,0 +1,59 @@
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wno-unused-function -Wno-sign-compare")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wl,-zdefs" )
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fPIE")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Werror")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -std=c++11")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_DEFINITIONS("-DFULLVER=\"${FULLVER}\"")
+
+SET(TEST_SOURCES
+       test_preference_manager_vconf.cpp
+       vconf_mock.cpp
+       ${CMAKE_SOURCE_DIR}/src/preference_manager_vconf.cpp
+)
+
+# Find Packages
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       capi-appfw-application
+       capi-appfw-preference
+       multi-assistant
+       dlog
+       libxml-2.0
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+FIND_PACKAGE(GTest REQUIRED)
+INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIRS})
+LINK_DIRECTORIES(${GTEST_LIBRARY_DIRS})
+
+SET(TEST_PREFERENCE_MANAGER_VCONF test-preference-manager-vconf)
+ADD_EXECUTABLE(${TEST_PREFERENCE_MANAGER_VCONF}
+       ${TEST_SOURCES}
+       )
+
+TARGET_LINK_LIBRARIES(${TEST_PREFERENCE_MANAGER_VCONF} -ldl ${GTEST_LIBRARIES} pthread
+       ${EXTRA_LDFLAGS} ${pkgs_LDFLAGS})
+
+SET_TARGET_PROPERTIES(${TEST_PREFERENCE_MANAGER_VCONF} PROPERTIES
+       COMPILE_FLAGS "-fPIE"
+       #Never add any space for LINKFLAGS
+       LINK_FLAGS "-Wl,\
+--wrap=vconf_get_int,\
+--wrap=vconf_get_bool,\
+--wrap=vconf_get_str,\
+--wrap=vconf_notify_key_changed,\
+--wrap=vconf_ignore_key_changed,\
+--wrap=vconf_keynode_get_name")
+
+INSTALL(TARGETS ${TEST_PREFERENCE_MANAGER_VCONF} DESTINATION bin)
+
+ADD_TEST(NAME ${TEST_PREFERENCE_MANAGER_VCONF} COMMAND ${TEST_PREFERENCE_MANAGER_VCONF})
diff --git a/tests/utc/preference-manager-vconf/test_preference_manager_vconf.cpp b/tests/utc/preference-manager-vconf/test_preference_manager_vconf.cpp
new file mode 100644 (file)
index 0000000..5ffe0c2
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2020 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+
+#include "preference_manager_vconf.h"
+
+#include <string>
+
+class DefaultFixture : public testing::Test
+{
+public:
+       DefaultFixture() {
+       }
+       virtual ~DefaultFixture() {
+       }
+       void SetUp() override {
+       }
+       void TearDown() override {
+       }
+
+       static void dummy_callback(std::string key, void* user_data) {
+               return;
+       }
+       CPreferenceManagerVconf preference_manager;
+};
+
+TEST_F(DefaultFixture, CanRegisterOneCallback) {
+       std::string arbitrary_key{"ArbitraryKey"};
+
+       bool ret = preference_manager.register_changed_callback(arbitrary_key, dummy_callback, nullptr);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanRegisterTwoCallbacksForOneKey) {
+       std::string arbitrary_key{"ArbitraryKey"};
+       preference_manager.register_changed_callback(arbitrary_key, dummy_callback, nullptr);
+
+       bool ret = preference_manager.register_changed_callback(arbitrary_key, dummy_callback, nullptr);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanRegisterTwoCallbacksForTwoDifferentKeys) {
+       std::string arbitrary_key_1{"ArbitraryKey1"};
+       std::string arbitrary_key_2{"ArbitraryKey2"};
+       preference_manager.register_changed_callback(arbitrary_key_1, dummy_callback, nullptr);
+
+       bool ret = preference_manager.register_changed_callback(arbitrary_key_2, dummy_callback, nullptr);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanUnregisterOneCallback) {
+       std::string arbitrary_key{"ArbitraryKey"};
+       preference_manager.register_changed_callback(arbitrary_key, dummy_callback, nullptr);
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key, dummy_callback);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanUnregisterTwoCallbacksForOneKey) {
+       std::string arbitrary_key{"ArbitraryKey"};
+       preference_manager.register_changed_callback(arbitrary_key, dummy_callback, nullptr);
+       preference_manager.register_changed_callback(arbitrary_key, dummy_callback, nullptr);
+       preference_manager.unregister_changed_callback(arbitrary_key, dummy_callback);
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key, dummy_callback);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanUnregisterTwoCallbacksForTwoDifferentKeys) {
+       std::string arbitrary_key_1{"ArbitraryKey1"};
+       std::string arbitrary_key_2{"ArbitraryKey2"};
+       preference_manager.register_changed_callback(arbitrary_key_1, dummy_callback, nullptr);
+       preference_manager.register_changed_callback(arbitrary_key_2, dummy_callback, nullptr);
+       preference_manager.unregister_changed_callback(arbitrary_key_1, dummy_callback);
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key_2, dummy_callback);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanUnregisterThreeCallbacksForThreeDifferentKeysForward) {
+       std::string arbitrary_key_1{"ArbitraryKey1"};
+       std::string arbitrary_key_2{"ArbitraryKey2"};
+       std::string arbitrary_key_3{"ArbitraryKey3"};
+       preference_manager.register_changed_callback(arbitrary_key_1, dummy_callback, nullptr);
+       preference_manager.register_changed_callback(arbitrary_key_2, dummy_callback, nullptr);
+       preference_manager.register_changed_callback(arbitrary_key_3, dummy_callback, nullptr);
+       preference_manager.unregister_changed_callback(arbitrary_key_1, dummy_callback);
+       preference_manager.unregister_changed_callback(arbitrary_key_2, dummy_callback);
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key_3, dummy_callback);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, CanUnregisterThreeCallbacksForThreeDifferentKeysBackward) {
+       std::string arbitrary_key_1{"ArbitraryKey1"};
+       std::string arbitrary_key_2{"ArbitraryKey2"};
+       std::string arbitrary_key_3{"ArbitraryKey3"};
+       preference_manager.register_changed_callback(arbitrary_key_1, dummy_callback, nullptr);
+       preference_manager.register_changed_callback(arbitrary_key_2, dummy_callback, nullptr);
+       preference_manager.register_changed_callback(arbitrary_key_3, dummy_callback, nullptr);
+       preference_manager.unregister_changed_callback(arbitrary_key_3, dummy_callback);
+       preference_manager.unregister_changed_callback(arbitrary_key_2, dummy_callback);
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key_1, dummy_callback);
+
+       ASSERT_EQ(ret, true);
+}
+
+TEST_F(DefaultFixture, UnregisterFailsOnKeyNotExists) {
+       std::string arbitrary_key{"ArbitraryKey"};
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key, dummy_callback);
+
+       ASSERT_EQ(ret, false);
+}
+
+TEST_F(DefaultFixture, UnregisterFailurePreservesExistingEntry) {
+       std::string arbitrary_key_1{"ArbitraryKey1"};
+       std::string arbitrary_key_2{"ArbitraryKey2"};
+       preference_manager.register_changed_callback(arbitrary_key_1, dummy_callback, nullptr);
+       preference_manager.unregister_changed_callback(arbitrary_key_2, dummy_callback);
+
+       bool ret = preference_manager.unregister_changed_callback(arbitrary_key_1, dummy_callback);
+
+       ASSERT_EQ(ret, true);
+}
+
+int main(int argc, char** argv) {
+       testing::InitGoogleTest(&argc, argv);
+       int ret = RUN_ALL_TESTS();
+       return ret;
+}
diff --git a/tests/utc/preference-manager-vconf/vconf_mock.cpp b/tests/utc/preference-manager-vconf/vconf_mock.cpp
new file mode 100644 (file)
index 0000000..edaf16e
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2020 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "vconf_mock.h"
+
+int __wrap_vconf_get_int(const char *in_key, int *intval) { return 0; }
+int __wrap_vconf_get_bool(const char *in_key, int *boolval) { return 0; }
+char *__wrap_vconf_get_str(const char *in_key) { return nullptr; }
+int __wrap_vconf_notify_key_changed(const char *in_key, vconf_callback_fn cb, void *user_data) { return 0; }
+int __wrap_vconf_ignore_key_changed(const char *in_key, vconf_callback_fn cb) { return 0; }
+char *__wrap_vconf_keynode_get_name(keynode_t *keynode) { return nullptr; }
diff --git a/tests/utc/preference-manager-vconf/vconf_mock.h b/tests/utc/preference-manager-vconf/vconf_mock.h
new file mode 100644 (file)
index 0000000..23d3750
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2020 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef VCONF_MOCK_H
+#define VCONF_MOCK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _keynode_t {
+       char *keyname;           /**< Keyname for keynode */
+       int type;                /**< Keynode type */
+       union {
+               int i;               /**< Integer type */
+               int b;               /**< Bool type */
+               double d;            /**< Double type */
+               char *s;             /**< String type */
+       } value;                 /**< Value for keynode */
+} keynode_t;
+typedef void (*vconf_callback_fn) (keynode_t *node, void *user_data);
+
+int __wrap_vconf_get_int(const char *in_key, int *intval);
+int __wrap_vconf_get_bool(const char *in_key, int *boolval);
+char *__wrap_vconf_get_str(const char *in_key);
+int __wrap_vconf_notify_key_changed(const char *in_key, vconf_callback_fn cb, void *user_data);
+int __wrap_vconf_ignore_key_changed(const char *in_key, vconf_callback_fn cb);
+char *__wrap_vconf_keynode_get_name(keynode_t *keynode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif