blob: 88911cdf26a4abcaa48b10258b92acc39a0aed35 [file] [log] [blame]
raviteja-b8cc44052019-02-27 23:29:36 -06001#include "mock_user_mgr.hpp"
2#include <xyz/openbmc_project/User/Common/error.hpp>
3#include <xyz/openbmc_project/Common/error.hpp>
4#include <gtest/gtest.h>
5#include <exception>
Ravi Teja417c0892020-08-22 08:04:01 -05006#include <sdbusplus/test/sdbus_mock.hpp>
raviteja-b8cc44052019-02-27 23:29:36 -06007
8namespace phosphor
9{
10namespace user
11{
12
13using ::testing::Return;
14
15using InternalFailure =
16 sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
17
18class TestUserMgr : public testing::Test
19{
20 public:
Ravi Teja417c0892020-08-22 08:04:01 -050021 sdbusplus::SdBusMock sdbusMock;
raviteja-b8cc44052019-02-27 23:29:36 -060022 sdbusplus::bus::bus bus;
23 MockManager mockManager;
24
25 TestUserMgr() :
Ravi Teja417c0892020-08-22 08:04:01 -050026 bus(sdbusplus::get_mocked_new(&sdbusMock)), mockManager(bus, objpath)
raviteja-b8cc44052019-02-27 23:29:36 -060027 {
28 }
29
30 void createLocalUser(const std::string &userName,
31 std::vector<std::string> groupNames,
32 const std::string &priv, bool enabled)
33 {
34 std::string userObj = std::string(usersObjPath) + "/" + userName;
35 mockManager.usersList.emplace(
36 userName, std::move(std::make_unique<phosphor::user::Users>(
37 mockManager.bus, userObj.c_str(), groupNames, priv,
38 enabled, mockManager)));
39 }
40
41 DbusUserObj createPrivilegeMapperDbusObject(void)
42 {
43 DbusUserObj object;
44 DbusUserObjValue objValue;
Ravi Teja5fe724a2019-05-07 05:14:42 -050045
46 DbusUserObjPath obj_path("/xyz/openbmc_project/user/ldap/openldap");
47 DbusUserPropVariant enabled(true);
48 DbusUserObjProperties property = {std::make_pair("Enabled", enabled)};
49 std::string intf = "xyz.openbmc_project.Object.Enable";
50 objValue.emplace(intf, property);
51 object.emplace(obj_path, objValue);
52
53 DbusUserObjPath object_path(
54 "/xyz/openbmc_project/user/ldap/openldap/role_map/1");
55 std::string group = "ldapGroup";
56 std::string priv = "priv-admin";
raviteja-b8cc44052019-02-27 23:29:36 -060057 DbusUserObjProperties properties = {std::make_pair("GroupName", group),
58 std::make_pair("Privilege", priv)};
59 std::string interface = "xyz.openbmc_project.User.PrivilegeMapperEntry";
60
61 objValue.emplace(interface, properties);
62 object.emplace(object_path, objValue);
63
64 return object;
65 }
Ravi Teja5fe724a2019-05-07 05:14:42 -050066
67 DbusUserObj createLdapConfigObjectWithoutPrivilegeMapper(void)
68 {
69 DbusUserObj object;
70 DbusUserObjValue objValue;
71
72 DbusUserObjPath obj_path("/xyz/openbmc_project/user/ldap/openldap");
73 DbusUserPropVariant enabled(true);
74 DbusUserObjProperties property = {std::make_pair("Enabled", enabled)};
75 std::string intf = "xyz.openbmc_project.Object.Enable";
76 objValue.emplace(intf, property);
77 object.emplace(obj_path, objValue);
78 return object;
79 }
raviteja-b8cc44052019-02-27 23:29:36 -060080};
81
82TEST_F(TestUserMgr, ldapEntryDoesNotExist)
83{
84 std::string userName = "user";
85 UserInfoMap userInfo;
86
87 EXPECT_CALL(mockManager, getLdapGroupName(userName))
88 .WillRepeatedly(Return(""));
89 EXPECT_THROW(userInfo = mockManager.getUserInfo(userName), InternalFailure);
90}
91
92TEST_F(TestUserMgr, localUser)
93{
94 UserInfoMap userInfo;
95 std::string userName = "testUser";
96 std::string privilege = "priv-admin";
97 std::vector<std::string> groups{"testGroup"};
98 // Create local user
99 createLocalUser(userName, groups, privilege, true);
100 EXPECT_CALL(mockManager, userLockedForFailedAttempt(userName)).Times(1);
101 userInfo = mockManager.getUserInfo(userName);
102
103 EXPECT_EQ(privilege, std::get<std::string>(userInfo["UserPrivilege"]));
104 EXPECT_EQ(groups,
105 std::get<std::vector<std::string>>(userInfo["UserGroups"]));
106 EXPECT_EQ(true, std::get<bool>(userInfo["UserEnabled"]));
107 EXPECT_EQ(false, std::get<bool>(userInfo["UserLockedForFailedAttempt"]));
Joseph Reynolds3ab6cc22020-03-03 14:09:03 -0600108 EXPECT_EQ(false, std::get<bool>(userInfo["UserPasswordExpired"]));
raviteja-b8cc44052019-02-27 23:29:36 -0600109 EXPECT_EQ(false, std::get<bool>(userInfo["RemoteUser"]));
110}
111
112TEST_F(TestUserMgr, ldapUserWithPrivMapper)
113{
114 UserInfoMap userInfo;
115 std::string userName = "ldapUser";
116 std::string ldapGroup = "ldapGroup";
117
118 EXPECT_CALL(mockManager, getLdapGroupName(userName))
119 .WillRepeatedly(Return(ldapGroup));
120 // Create privilege mapper dbus object
121 DbusUserObj object = createPrivilegeMapperDbusObject();
122 EXPECT_CALL(mockManager, getPrivilegeMapperObject())
123 .WillRepeatedly(Return(object));
124 userInfo = mockManager.getUserInfo(userName);
125 EXPECT_EQ(true, std::get<bool>(userInfo["RemoteUser"]));
126 EXPECT_EQ("priv-admin", std::get<std::string>(userInfo["UserPrivilege"]));
127}
128
129TEST_F(TestUserMgr, ldapUserWithoutPrivMapper)
130{
131 UserInfoMap userInfo;
132 std::string userName = "ldapUser";
133 std::string ldapGroup = "ldapGroup";
raviteja-b8cc44052019-02-27 23:29:36 -0600134
135 EXPECT_CALL(mockManager, getLdapGroupName(userName))
136 .WillRepeatedly(Return(ldapGroup));
Ravi Teja5fe724a2019-05-07 05:14:42 -0500137 // Create LDAP config object without privilege mapper
138 DbusUserObj object = createLdapConfigObjectWithoutPrivilegeMapper();
raviteja-b8cc44052019-02-27 23:29:36 -0600139 EXPECT_CALL(mockManager, getPrivilegeMapperObject())
140 .WillRepeatedly(Return(object));
141 userInfo = mockManager.getUserInfo(userName);
142 EXPECT_EQ(true, std::get<bool>(userInfo["RemoteUser"]));
143 EXPECT_EQ("", std::get<std::string>(userInfo["UserPrivilege"]));
144}
145} // namespace user
146} // namespace phosphor