blob: 818a18b11e3b138fc2688f70362a041e76998b7f [file] [log] [blame]
raviteja-b8cc44052019-02-27 23:29:36 -06001#include "mock_user_mgr.hpp"
Patrick Williams9638afb2021-02-22 17:16:24 -06002
Ravi Teja417c0892020-08-22 08:04:01 -05003#include <sdbusplus/test/sdbus_mock.hpp>
Patrick Williams9638afb2021-02-22 17:16:24 -06004#include <xyz/openbmc_project/Common/error.hpp>
5#include <xyz/openbmc_project/User/Common/error.hpp>
6
7#include <exception>
8
9#include <gtest/gtest.h>
raviteja-b8cc44052019-02-27 23:29:36 -060010
11namespace phosphor
12{
13namespace user
14{
15
16using ::testing::Return;
17
18using InternalFailure =
19 sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
20
21class TestUserMgr : public testing::Test
22{
23 public:
Ravi Teja417c0892020-08-22 08:04:01 -050024 sdbusplus::SdBusMock sdbusMock;
raviteja-b8cc44052019-02-27 23:29:36 -060025 sdbusplus::bus::bus bus;
26 MockManager mockManager;
27
28 TestUserMgr() :
Ravi Teja417c0892020-08-22 08:04:01 -050029 bus(sdbusplus::get_mocked_new(&sdbusMock)), mockManager(bus, objpath)
Patrick Williams9638afb2021-02-22 17:16:24 -060030 {}
raviteja-b8cc44052019-02-27 23:29:36 -060031
Patrick Williams9638afb2021-02-22 17:16:24 -060032 void createLocalUser(const std::string& userName,
raviteja-b8cc44052019-02-27 23:29:36 -060033 std::vector<std::string> groupNames,
Patrick Williams9638afb2021-02-22 17:16:24 -060034 const std::string& priv, bool enabled)
raviteja-b8cc44052019-02-27 23:29:36 -060035 {
36 std::string userObj = std::string(usersObjPath) + "/" + userName;
37 mockManager.usersList.emplace(
38 userName, std::move(std::make_unique<phosphor::user::Users>(
39 mockManager.bus, userObj.c_str(), groupNames, priv,
40 enabled, mockManager)));
41 }
42
43 DbusUserObj createPrivilegeMapperDbusObject(void)
44 {
45 DbusUserObj object;
46 DbusUserObjValue objValue;
Ravi Teja5fe724a2019-05-07 05:14:42 -050047
48 DbusUserObjPath obj_path("/xyz/openbmc_project/user/ldap/openldap");
49 DbusUserPropVariant enabled(true);
50 DbusUserObjProperties property = {std::make_pair("Enabled", enabled)};
51 std::string intf = "xyz.openbmc_project.Object.Enable";
52 objValue.emplace(intf, property);
53 object.emplace(obj_path, objValue);
54
55 DbusUserObjPath object_path(
56 "/xyz/openbmc_project/user/ldap/openldap/role_map/1");
57 std::string group = "ldapGroup";
58 std::string priv = "priv-admin";
raviteja-b8cc44052019-02-27 23:29:36 -060059 DbusUserObjProperties properties = {std::make_pair("GroupName", group),
60 std::make_pair("Privilege", priv)};
61 std::string interface = "xyz.openbmc_project.User.PrivilegeMapperEntry";
62
63 objValue.emplace(interface, properties);
64 object.emplace(object_path, objValue);
65
66 return object;
67 }
Ravi Teja5fe724a2019-05-07 05:14:42 -050068
69 DbusUserObj createLdapConfigObjectWithoutPrivilegeMapper(void)
70 {
71 DbusUserObj object;
72 DbusUserObjValue objValue;
73
74 DbusUserObjPath obj_path("/xyz/openbmc_project/user/ldap/openldap");
75 DbusUserPropVariant enabled(true);
76 DbusUserObjProperties property = {std::make_pair("Enabled", enabled)};
77 std::string intf = "xyz.openbmc_project.Object.Enable";
78 objValue.emplace(intf, property);
79 object.emplace(obj_path, objValue);
80 return object;
81 }
raviteja-b8cc44052019-02-27 23:29:36 -060082};
83
84TEST_F(TestUserMgr, ldapEntryDoesNotExist)
85{
86 std::string userName = "user";
87 UserInfoMap userInfo;
88
89 EXPECT_CALL(mockManager, getLdapGroupName(userName))
90 .WillRepeatedly(Return(""));
91 EXPECT_THROW(userInfo = mockManager.getUserInfo(userName), InternalFailure);
92}
93
94TEST_F(TestUserMgr, localUser)
95{
96 UserInfoMap userInfo;
97 std::string userName = "testUser";
98 std::string privilege = "priv-admin";
99 std::vector<std::string> groups{"testGroup"};
100 // Create local user
101 createLocalUser(userName, groups, privilege, true);
102 EXPECT_CALL(mockManager, userLockedForFailedAttempt(userName)).Times(1);
103 userInfo = mockManager.getUserInfo(userName);
104
105 EXPECT_EQ(privilege, std::get<std::string>(userInfo["UserPrivilege"]));
106 EXPECT_EQ(groups,
107 std::get<std::vector<std::string>>(userInfo["UserGroups"]));
108 EXPECT_EQ(true, std::get<bool>(userInfo["UserEnabled"]));
109 EXPECT_EQ(false, std::get<bool>(userInfo["UserLockedForFailedAttempt"]));
Joseph Reynolds3ab6cc22020-03-03 14:09:03 -0600110 EXPECT_EQ(false, std::get<bool>(userInfo["UserPasswordExpired"]));
raviteja-b8cc44052019-02-27 23:29:36 -0600111 EXPECT_EQ(false, std::get<bool>(userInfo["RemoteUser"]));
112}
113
114TEST_F(TestUserMgr, ldapUserWithPrivMapper)
115{
116 UserInfoMap userInfo;
117 std::string userName = "ldapUser";
118 std::string ldapGroup = "ldapGroup";
119
120 EXPECT_CALL(mockManager, getLdapGroupName(userName))
121 .WillRepeatedly(Return(ldapGroup));
122 // Create privilege mapper dbus object
123 DbusUserObj object = createPrivilegeMapperDbusObject();
124 EXPECT_CALL(mockManager, getPrivilegeMapperObject())
125 .WillRepeatedly(Return(object));
126 userInfo = mockManager.getUserInfo(userName);
127 EXPECT_EQ(true, std::get<bool>(userInfo["RemoteUser"]));
128 EXPECT_EQ("priv-admin", std::get<std::string>(userInfo["UserPrivilege"]));
129}
130
131TEST_F(TestUserMgr, ldapUserWithoutPrivMapper)
132{
133 UserInfoMap userInfo;
134 std::string userName = "ldapUser";
135 std::string ldapGroup = "ldapGroup";
raviteja-b8cc44052019-02-27 23:29:36 -0600136
137 EXPECT_CALL(mockManager, getLdapGroupName(userName))
138 .WillRepeatedly(Return(ldapGroup));
Ravi Teja5fe724a2019-05-07 05:14:42 -0500139 // Create LDAP config object without privilege mapper
140 DbusUserObj object = createLdapConfigObjectWithoutPrivilegeMapper();
raviteja-b8cc44052019-02-27 23:29:36 -0600141 EXPECT_CALL(mockManager, getPrivilegeMapperObject())
142 .WillRepeatedly(Return(object));
143 userInfo = mockManager.getUserInfo(userName);
144 EXPECT_EQ(true, std::get<bool>(userInfo["RemoteUser"]));
145 EXPECT_EQ("", std::get<std::string>(userInfo["UserPrivilege"]));
146}
147} // namespace user
148} // namespace phosphor