xref: /openbmc/phosphor-user-manager/test/ldap_mapper_serialize_test.cpp (revision 889651d6f2f761eec8f7ab871715f2be229a6d0e)
1*889651d6SRavi Teja #include "config.h"
2*889651d6SRavi Teja 
3*889651d6SRavi Teja #include "phosphor-ldap-config/ldap_config.hpp"
4*889651d6SRavi Teja #include "phosphor-ldap-config/ldap_config_mgr.hpp"
5*889651d6SRavi Teja #include "phosphor-ldap-config/ldap_mapper_entry.hpp"
6*889651d6SRavi Teja #include "phosphor-ldap-config/ldap_mapper_serialize.hpp"
7*889651d6SRavi Teja 
8*889651d6SRavi Teja #include <sdbusplus/bus.hpp>
9*889651d6SRavi Teja 
10*889651d6SRavi Teja #include <filesystem>
11*889651d6SRavi Teja #include <fstream>
12*889651d6SRavi Teja #include <string>
13*889651d6SRavi Teja 
14*889651d6SRavi Teja #include <gtest/gtest.h>
15*889651d6SRavi Teja 
16*889651d6SRavi Teja namespace phosphor
17*889651d6SRavi Teja {
18*889651d6SRavi Teja namespace ldap
19*889651d6SRavi Teja {
20*889651d6SRavi Teja namespace fs = std::filesystem;
21*889651d6SRavi Teja 
22*889651d6SRavi Teja class MockConfigMgr : public phosphor::ldap::ConfigMgr
23*889651d6SRavi Teja {
24*889651d6SRavi Teja   public:
MockConfigMgr(sdbusplus::bus_t & bus,const char * path,const char * filePath,const char * dbusPersistentFile,const char * caCertFile,const char * certFile)25*889651d6SRavi Teja     MockConfigMgr(sdbusplus::bus_t& bus, const char* path, const char* filePath,
26*889651d6SRavi Teja                   const char* dbusPersistentFile, const char* caCertFile,
27*889651d6SRavi Teja                   const char* certFile) :
28*889651d6SRavi Teja         phosphor::ldap::ConfigMgr(bus, path, filePath, dbusPersistentFile,
29*889651d6SRavi Teja                                   caCertFile, certFile)
30*889651d6SRavi Teja     {}
31*889651d6SRavi Teja 
getADConfigPtr()32*889651d6SRavi Teja     std::unique_ptr<Config>& getADConfigPtr()
33*889651d6SRavi Teja     {
34*889651d6SRavi Teja         return ADConfigPtr;
35*889651d6SRavi Teja     }
36*889651d6SRavi Teja 
createDefaultObjects()37*889651d6SRavi Teja     void createDefaultObjects()
38*889651d6SRavi Teja     {
39*889651d6SRavi Teja         phosphor::ldap::ConfigMgr::createDefaultObjects();
40*889651d6SRavi Teja     }
41*889651d6SRavi Teja };
42*889651d6SRavi Teja 
43*889651d6SRavi Teja class TestLDAPMapperSerialize : public testing::Test
44*889651d6SRavi Teja {
45*889651d6SRavi Teja   public:
TestLDAPMapperSerialize()46*889651d6SRavi Teja     TestLDAPMapperSerialize() : bus(sdbusplus::bus::new_default()) {}
47*889651d6SRavi Teja 
SetUp()48*889651d6SRavi Teja     void SetUp() override
49*889651d6SRavi Teja     {
50*889651d6SRavi Teja         char tmpldap[] = "/tmp/ldap_serialize_test.XXXXXX";
51*889651d6SRavi Teja         dir = fs::path(mkdtemp(tmpldap));
52*889651d6SRavi Teja 
53*889651d6SRavi Teja         fs::path tlsCacertFilePath{TLS_CACERT_PATH};
54*889651d6SRavi Teja         tlsCACertFile = tlsCacertFilePath.filename().c_str();
55*889651d6SRavi Teja         fs::path tlsCertFilePath{TLS_CERT_FILE};
56*889651d6SRavi Teja         tlsCertFile = tlsCertFilePath.filename().c_str();
57*889651d6SRavi Teja         fs::path confFilePath{LDAP_CONFIG_FILE};
58*889651d6SRavi Teja         ldapConfFile = confFilePath.filename().c_str();
59*889651d6SRavi Teja 
60*889651d6SRavi Teja         std::fstream fs;
61*889651d6SRavi Teja         fs.open(dir / tlsCACertFile, std::fstream::out);
62*889651d6SRavi Teja         fs.close();
63*889651d6SRavi Teja         fs.open(dir / tlsCertFile, std::fstream::out);
64*889651d6SRavi Teja         fs.close();
65*889651d6SRavi Teja     }
66*889651d6SRavi Teja 
TearDown()67*889651d6SRavi Teja     void TearDown() override
68*889651d6SRavi Teja     {
69*889651d6SRavi Teja         fs::remove_all(dir);
70*889651d6SRavi Teja     }
71*889651d6SRavi Teja 
72*889651d6SRavi Teja   protected:
73*889651d6SRavi Teja     fs::path dir;
74*889651d6SRavi Teja     std::string tlsCACertFile;
75*889651d6SRavi Teja     std::string tlsCertFile;
76*889651d6SRavi Teja     std::string ldapConfFile;
77*889651d6SRavi Teja     sdbusplus::bus_t bus;
78*889651d6SRavi Teja };
79*889651d6SRavi Teja 
TEST_F(TestLDAPMapperSerialize,testSerializeMapperEntry)80*889651d6SRavi Teja TEST_F(TestLDAPMapperSerialize, testSerializeMapperEntry)
81*889651d6SRavi Teja {
82*889651d6SRavi Teja     auto configFilePath = std::string(dir.c_str()) + "/" + ldapConfFile;
83*889651d6SRavi Teja     auto tlsCACertFilePath = std::string(dir.c_str()) + "/" + tlsCACertFile;
84*889651d6SRavi Teja     auto tlsCertFilePath = std::string(dir.c_str()) + "/" + tlsCertFile;
85*889651d6SRavi Teja     auto dbusPersistentFilePath = std::string(dir.c_str());
86*889651d6SRavi Teja 
87*889651d6SRavi Teja     MockConfigMgr manager(bus, LDAP_CONFIG_ROOT, configFilePath.c_str(),
88*889651d6SRavi Teja                           dbusPersistentFilePath.c_str(),
89*889651d6SRavi Teja                           tlsCACertFilePath.c_str(), tlsCertFilePath.c_str());
90*889651d6SRavi Teja     manager.createDefaultObjects();
91*889651d6SRavi Teja 
92*889651d6SRavi Teja     std::string groupName = "testGroup";
93*889651d6SRavi Teja     std::string privilege = "priv-admin";
94*889651d6SRavi Teja     size_t entryId = 1;
95*889651d6SRavi Teja     auto dbusPath = std::string(LDAP_CONFIG_ROOT) +
96*889651d6SRavi Teja                     "/active_directory/role_map/" + std::to_string(entryId);
97*889651d6SRavi Teja     auto persistPath = dbusPersistentFilePath + dbusPath;
98*889651d6SRavi Teja 
99*889651d6SRavi Teja     auto entry = std::make_unique<LDAPMapperEntry>(
100*889651d6SRavi Teja         bus, dbusPath.c_str(), persistPath.c_str(), groupName, privilege,
101*889651d6SRavi Teja         *(manager.getADConfigPtr()));
102*889651d6SRavi Teja 
103*889651d6SRavi Teja     auto serializedPath = serialize(*entry, persistPath);
104*889651d6SRavi Teja     EXPECT_TRUE(fs::exists(serializedPath));
105*889651d6SRavi Teja }
106*889651d6SRavi Teja 
TEST_F(TestLDAPMapperSerialize,testDeserializeMapperEntry)107*889651d6SRavi Teja TEST_F(TestLDAPMapperSerialize, testDeserializeMapperEntry)
108*889651d6SRavi Teja {
109*889651d6SRavi Teja     auto configFilePath = std::string(dir.c_str()) + "/" + ldapConfFile;
110*889651d6SRavi Teja     auto tlsCACertFilePath = std::string(dir.c_str()) + "/" + tlsCACertFile;
111*889651d6SRavi Teja     auto tlsCertFilePath = std::string(dir.c_str()) + "/" + tlsCertFile;
112*889651d6SRavi Teja     auto dbusPersistentFilePath = std::string(dir.c_str());
113*889651d6SRavi Teja 
114*889651d6SRavi Teja     MockConfigMgr manager(bus, LDAP_CONFIG_ROOT, configFilePath.c_str(),
115*889651d6SRavi Teja                           dbusPersistentFilePath.c_str(),
116*889651d6SRavi Teja                           tlsCACertFilePath.c_str(), tlsCertFilePath.c_str());
117*889651d6SRavi Teja     manager.createDefaultObjects();
118*889651d6SRavi Teja 
119*889651d6SRavi Teja     std::string groupName = "testGroup";
120*889651d6SRavi Teja     std::string privilege = "priv-admin";
121*889651d6SRavi Teja     size_t entryId = 1;
122*889651d6SRavi Teja     auto dbusPath = std::string(LDAP_CONFIG_ROOT) +
123*889651d6SRavi Teja                     "/active_directory/role_map/" + std::to_string(entryId);
124*889651d6SRavi Teja     auto persistPath = dbusPersistentFilePath + dbusPath;
125*889651d6SRavi Teja 
126*889651d6SRavi Teja     fs::path serializedPath;
127*889651d6SRavi Teja 
128*889651d6SRavi Teja     {
129*889651d6SRavi Teja         auto entry1 = std::make_unique<LDAPMapperEntry>(
130*889651d6SRavi Teja             bus, dbusPath.c_str(), persistPath.c_str(), groupName, privilege,
131*889651d6SRavi Teja             *(manager.getADConfigPtr()));
132*889651d6SRavi Teja 
133*889651d6SRavi Teja         serializedPath = serialize(*entry1, persistPath);
134*889651d6SRavi Teja         EXPECT_TRUE(fs::exists(serializedPath));
135*889651d6SRavi Teja     }
136*889651d6SRavi Teja 
137*889651d6SRavi Teja     auto entry2 = std::make_unique<LDAPMapperEntry>(
138*889651d6SRavi Teja         bus, dbusPath.c_str(), persistPath.c_str(),
139*889651d6SRavi Teja         *(manager.getADConfigPtr()));
140*889651d6SRavi Teja 
141*889651d6SRavi Teja     bool result = deserialize(serializedPath, *entry2);
142*889651d6SRavi Teja     EXPECT_TRUE(result);
143*889651d6SRavi Teja     EXPECT_EQ(entry2->groupName(), groupName);
144*889651d6SRavi Teja     EXPECT_EQ(entry2->privilege(), privilege);
145*889651d6SRavi Teja }
146*889651d6SRavi Teja 
TEST_F(TestLDAPMapperSerialize,testDeserializeNonExistentFile)147*889651d6SRavi Teja TEST_F(TestLDAPMapperSerialize, testDeserializeNonExistentFile)
148*889651d6SRavi Teja {
149*889651d6SRavi Teja     auto configFilePath = std::string(dir.c_str()) + "/" + ldapConfFile;
150*889651d6SRavi Teja     auto tlsCACertFilePath = std::string(dir.c_str()) + "/" + tlsCACertFile;
151*889651d6SRavi Teja     auto tlsCertFilePath = std::string(dir.c_str()) + "/" + tlsCertFile;
152*889651d6SRavi Teja     auto dbusPersistentFilePath = std::string(dir.c_str());
153*889651d6SRavi Teja 
154*889651d6SRavi Teja     MockConfigMgr manager(bus, LDAP_CONFIG_ROOT, configFilePath.c_str(),
155*889651d6SRavi Teja                           dbusPersistentFilePath.c_str(),
156*889651d6SRavi Teja                           tlsCACertFilePath.c_str(), tlsCertFilePath.c_str());
157*889651d6SRavi Teja     manager.createDefaultObjects();
158*889651d6SRavi Teja 
159*889651d6SRavi Teja     size_t entryId = 1;
160*889651d6SRavi Teja     auto dbusPath = std::string(LDAP_CONFIG_ROOT) +
161*889651d6SRavi Teja                     "/active_directory/role_map/" + std::to_string(entryId);
162*889651d6SRavi Teja     auto persistPath = dbusPersistentFilePath + dbusPath;
163*889651d6SRavi Teja 
164*889651d6SRavi Teja     auto entry = std::make_unique<LDAPMapperEntry>(
165*889651d6SRavi Teja         bus, dbusPath.c_str(), persistPath.c_str(),
166*889651d6SRavi Teja         *(manager.getADConfigPtr()));
167*889651d6SRavi Teja 
168*889651d6SRavi Teja     fs::path nonExistentPath = dir / "non_existent_file";
169*889651d6SRavi Teja     bool result = deserialize(nonExistentPath, *entry);
170*889651d6SRavi Teja     EXPECT_FALSE(result);
171*889651d6SRavi Teja }
172*889651d6SRavi Teja 
TEST_F(TestLDAPMapperSerialize,testSerializeCreatesDirectory)173*889651d6SRavi Teja TEST_F(TestLDAPMapperSerialize, testSerializeCreatesDirectory)
174*889651d6SRavi Teja {
175*889651d6SRavi Teja     auto configFilePath = std::string(dir.c_str()) + "/" + ldapConfFile;
176*889651d6SRavi Teja     auto tlsCACertFilePath = std::string(dir.c_str()) + "/" + tlsCACertFile;
177*889651d6SRavi Teja     auto tlsCertFilePath = std::string(dir.c_str()) + "/" + tlsCertFile;
178*889651d6SRavi Teja     auto dbusPersistentFilePath = std::string(dir.c_str());
179*889651d6SRavi Teja 
180*889651d6SRavi Teja     MockConfigMgr manager(bus, LDAP_CONFIG_ROOT, configFilePath.c_str(),
181*889651d6SRavi Teja                           dbusPersistentFilePath.c_str(),
182*889651d6SRavi Teja                           tlsCACertFilePath.c_str(), tlsCertFilePath.c_str());
183*889651d6SRavi Teja     manager.createDefaultObjects();
184*889651d6SRavi Teja 
185*889651d6SRavi Teja     std::string groupName = "testGroup";
186*889651d6SRavi Teja     std::string privilege = "priv-admin";
187*889651d6SRavi Teja     size_t entryId = 1;
188*889651d6SRavi Teja     auto dbusPath = std::string(LDAP_CONFIG_ROOT) +
189*889651d6SRavi Teja                     "/active_directory/role_map/" + std::to_string(entryId);
190*889651d6SRavi Teja 
191*889651d6SRavi Teja     auto persistPath = dbusPersistentFilePath + "/nested/path" + dbusPath;
192*889651d6SRavi Teja 
193*889651d6SRavi Teja     auto entry = std::make_unique<LDAPMapperEntry>(
194*889651d6SRavi Teja         bus, dbusPath.c_str(), persistPath.c_str(), groupName, privilege,
195*889651d6SRavi Teja         *(manager.getADConfigPtr()));
196*889651d6SRavi Teja 
197*889651d6SRavi Teja     auto serializedPath = serialize(*entry, persistPath);
198*889651d6SRavi Teja     EXPECT_TRUE(fs::exists(serializedPath));
199*889651d6SRavi Teja     EXPECT_TRUE(fs::exists(serializedPath.parent_path()));
200*889651d6SRavi Teja }
201*889651d6SRavi Teja 
202*889651d6SRavi Teja } // namespace ldap
203*889651d6SRavi Teja } // namespace phosphor
204