Apply meyer's singleton to policy-manager
authorSangwan Kwon <sangwan.kwon@samsung.com>
Wed, 25 Sep 2019 11:17:43 +0000 (20:17 +0900)
committer권상완/Security 2Lab(SR)/Engineer/삼성전자 <sangwan.kwon@samsung.com>
Thu, 10 Oct 2019 06:26:21 +0000 (15:26 +0900)
Signed-off-by: Sangwan Kwon <sangwan.kwon@samsung.com>
src/policyd/core/policy-manager.h
src/policyd/core/tests/core-tests.cpp

index 63736b0e56a5de79e21d500bf89b1dc21d5e290b..07fdedf4e95211e9456c58eb9cc760bcde31cc40 100644 (file)
@@ -29,12 +29,24 @@ namespace policyd {
 
 class PolicyManager final {
 public:
-       explicit PolicyManager() : storage(DB_PATH) {}
+       PolicyManager(const PolicyManager&) = delete;
+       PolicyManager& operator=(const PolicyManager&) = delete;
+
+       PolicyManager(PolicyManager&&) = delete;
+       PolicyManager& operator=(PolicyManager&&) = delete;
+
+       static PolicyManager& instance() {
+               static PolicyManager manager;
+               return manager;
+       }
 
        std::pair<int, int> loadProviders(const std::string& path);
        int loadPolicies();
 
 private:
+       explicit PolicyManager() : storage(DB_PATH) {}
+       ~PolicyManager() = default;
+
        PolicyStorage storage;
        std::vector<std::shared_ptr<PolicyProvider>> providers;
 
index f3a8913ef96c038c208b2615d67e224ee3c2bc14..d86bc97918124f8d2cf77f802cc612316d76db51 100644 (file)
@@ -23,12 +23,12 @@ using namespace policyd;
 class PolicyCoreTests : public testing::Test {};
 
 TEST_F(PolicyCoreTests, policy_loader) {
-       PolicyManager pm;
-       auto result = pm.loadProviders(PLUGIN_INSTALL_DIR);
+       auto& manager = PolicyManager::instance();
+       auto result = manager.loadProviders(PLUGIN_INSTALL_DIR);
 
        EXPECT_TRUE(result.first > 0);
        EXPECT_TRUE(result.second == 0);
 
-       auto size = pm.loadPolicies();
+       auto size = manager.loadPolicies();
        EXPECT_TRUE(size > 0);
 }