Unit Test: Adding unit test cases UsrMgr
This changes set will add needed unit test cases for User Manager
Change-Id: I848cdbde528d41c2a09abcf35527044b6084f023
Signed-off-by: Abhilash Raju <abhilash.kollam@gmail.com>
diff --git a/test/mock_user_mgr.hpp b/test/mock_user_mgr.hpp
index 99f2b37..b301ba7 100644
--- a/test/mock_user_mgr.hpp
+++ b/test/mock_user_mgr.hpp
@@ -25,6 +25,15 @@
friend class TestUserMgr;
};
-
+class MockUser : public Users
+{
+ public:
+ MockUser(sdbusplus::bus::bus& bus, const char* objPath,
+ std::vector<std::string> groupNames, const std::string& priv,
+ bool enabled, UserMgr& parent) :
+ Users(bus, objPath, groupNames, priv, enabled, parent)
+ {}
+ MOCK_METHOD0(createSecretKey, std::string());
+};
} // namespace user
} // namespace phosphor
diff --git a/test/user_mgr_test.cpp b/test/user_mgr_test.cpp
index 9dd799a..bb84e6d 100644
--- a/test/user_mgr_test.cpp
+++ b/test/user_mgr_test.cpp
@@ -55,9 +55,9 @@
.WillByDefault(testing::Return(false));
}
mockManager.usersList.emplace(
- userName, std::make_unique<phosphor::user::Users>(
- mockManager.bus, userObj.c_str(), groupNames, priv,
- enabled, mockManager));
+ userName,
+ std::make_unique<MockUser>(mockManager.bus, userObj.c_str(),
+ groupNames, priv, enabled, mockManager));
}
DbusUserObj createPrivilegeMapperDbusObject(void)
@@ -131,6 +131,59 @@
EXPECT_EQ(false, std::get<bool>(userInfo["UserPasswordExpired"]));
EXPECT_EQ(false, std::get<bool>(userInfo["RemoteUser"]));
}
+TEST_F(TestUserMgr, mfaEnabled)
+{
+ auto ret =
+ mockManager.enabled(MultiFactorAuthType::GoogleAuthenticator, false);
+ EXPECT_EQ(ret, MultiFactorAuthType::GoogleAuthenticator);
+ EXPECT_EQ(ret, mockManager.enabled());
+
+ ret = mockManager.enabled(MultiFactorAuthType::None, false);
+ EXPECT_EQ(ret, MultiFactorAuthType::None);
+ EXPECT_EQ(ret, mockManager.enabled());
+}
+TEST_F(TestUserMgr, mfaDefaultUser)
+{
+ std::string userName = "testUser";
+ std::string privilege = "priv-admin";
+ std::vector<std::string> groups{"testGroup"};
+ // Create local user
+ createLocalUser(userName, groups, privilege, true);
+ auto user = mockManager.getUserObject(userName);
+ EXPECT_EQ(user->secretKeyIsValid(), false);
+}
+TEST_F(TestUserMgr, mfaCreateSecretKeyEnableMFA)
+{
+ std::string userName = "testUser";
+ std::string privilege = "priv-admin";
+ std::vector<std::string> groups{"testGroup"};
+ // Create local user
+ createLocalUser(userName, groups, privilege, true);
+ MockUser* user =
+ static_cast<MockUser*>(mockManager.getUserObject(userName));
+ EXPECT_EQ(user->secretKeyIsValid(), false);
+ auto ret =
+ mockManager.enabled(MultiFactorAuthType::GoogleAuthenticator, true);
+ EXPECT_EQ(ret, MultiFactorAuthType::GoogleAuthenticator);
+ ON_CALL(*user, createSecretKey).WillByDefault(testing::Return("SKJDY&@H"));
+ user->createSecretKey();
+ EXPECT_EQ(user->secretKeyIsValid(), false);
+}
+TEST_F(TestUserMgr, bypassMFA)
+{
+ std::string userName = "testUser";
+ std::string privilege = "priv-admin";
+ std::vector<std::string> groups{"testGroup"};
+ // Create local user
+ createLocalUser(userName, groups, privilege, true);
+ MockUser* user =
+ static_cast<MockUser*>(mockManager.getUserObject(userName));
+ mockManager.enabled(MultiFactorAuthType::GoogleAuthenticator, true);
+ user->bypassedProtocol(MultiFactorAuthType::GoogleAuthenticator, false);
+ EXPECT_EQ(user->secretKeyGenerationRequired(), false);
+ user->bypassedProtocol(MultiFactorAuthType::None, false);
+ EXPECT_EQ(user->secretKeyGenerationRequired(), true);
+}
TEST_F(TestUserMgr, ldapUserWithPrivMapper)
{
diff --git a/user_mgr.hpp b/user_mgr.hpp
index b69cb87..752d72e 100644
--- a/user_mgr.hpp
+++ b/user_mgr.hpp
@@ -271,6 +271,12 @@
void createGroup(std::string groupName) override;
void deleteGroup(std::string groupName) override;
+
+ phosphor::user::Users* getUserObject(const std::string& userName)
+ {
+ return usersList[userName].get();
+ }
+
MultiFactorAuthType enabled() const override
{
return MultiFactorAuthConfigurationIface::enabled();