summaryrefslogtreecommitdiffstats
path: root/test/ldap_config_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/ldap_config_test.cpp')
-rw-r--r--test/ldap_config_test.cpp335
1 files changed, 335 insertions, 0 deletions
diff --git a/test/ldap_config_test.cpp b/test/ldap_config_test.cpp
new file mode 100644
index 0000000..8f9a07c
--- /dev/null
+++ b/test/ldap_config_test.cpp
@@ -0,0 +1,335 @@
+#include "config.h"
+#include "phosphor-ldap-config/ldap_configuration.hpp"
+
+#include <experimental/filesystem>
+#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog-errors.hpp>
+#include <sdbusplus/bus.hpp>
+#include <xyz/openbmc_project/Common/error.hpp>
+#include <sdbusplus/bus.hpp>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <fstream>
+#include <string>
+#include <sys/types.h>
+
+namespace phosphor
+{
+namespace ldap
+{
+namespace fs = std::experimental::filesystem;
+namespace ldap_base = sdbusplus::xyz::openbmc_project::User::Ldap::server;
+using Config = phosphor::ldap::Config;
+
+class TestLDAPConfig : public testing::Test
+{
+ public:
+ TestLDAPConfig() : bus(sdbusplus::bus::new_default())
+ {
+ }
+ void SetUp() override
+ {
+ using namespace phosphor::ldap;
+ char tmpldap[] = "/tmp/ldap_test.XXXXXX";
+ dir = fs::path(mkdtemp(tmpldap));
+ fs::path tslCacertFilePath{TLS_CACERT_FILE};
+ tslCacertFile = tslCacertFilePath.filename().c_str();
+ fs::path confFilePath{LDAP_CONFIG_FILE};
+ ldapconfFile = confFilePath.filename().c_str();
+ std::fstream fs;
+ fs.open(dir / defaultNslcdFile, std::fstream::out);
+ fs.close();
+ fs.open(dir / nsSwitchFile, std::fstream::out);
+ fs.close();
+ fs.open(dir / LDAPNsSwitchFile, std::fstream::out);
+ fs.close();
+ fs.open(dir / linuxNsSwitchFile, std::fstream::out);
+ fs.close();
+ fs.open(dir / tslCacertFile, std::fstream::out);
+ fs.close();
+ }
+
+ void TearDown() override
+ {
+ fs::remove_all(dir);
+ }
+
+ protected:
+ fs::path dir;
+ std::string tslCacertFile;
+ std::string ldapconfFile;
+ sdbusplus::bus::bus bus;
+};
+
+class MockConfigMgr : public phosphor::ldap::ConfigMgr
+{
+ public:
+ MockConfigMgr(sdbusplus::bus::bus& bus, const char* path,
+ const char* filePath) :
+ phosphor::ldap::ConfigMgr(bus, path, filePath)
+ {
+ }
+ MOCK_METHOD1(restartService, void(const std::string& service));
+ MOCK_METHOD1(stopService, void(const std::string& service));
+ std::unique_ptr<Config>& getConfigPtr()
+ {
+ return configPtr;
+ }
+
+ void restore(const char* filePath)
+ {
+ phosphor::ldap::ConfigMgr::restore(filePath);
+ return;
+ }
+
+ friend class TestLDAPConfig;
+};
+
+TEST_F(TestLDAPConfig, testCreate)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr manager(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(manager, restartService("nslcd.service")).Times(2);
+ EXPECT_CALL(manager, restartService("nscd.service")).Times(1);
+ manager.createConfig("ldap://9.194.251.136/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+
+ EXPECT_TRUE(fs::exists(configFilePath));
+ EXPECT_EQ(manager.getConfigPtr()->lDAPServerURI(), "ldap://9.194.251.136/");
+ EXPECT_EQ(manager.getConfigPtr()->lDAPBindDN(), "cn=Users,dc=com");
+ EXPECT_EQ(manager.getConfigPtr()->lDAPBaseDN(), "cn=Users,dc=corp");
+ EXPECT_EQ(manager.getConfigPtr()->lDAPSearchScope(),
+ ldap_base::Config::SearchScope::sub);
+ EXPECT_EQ(manager.getConfigPtr()->lDAPType(),
+ ldap_base::Config::Type::ActiveDirectory);
+}
+
+TEST_F(TestLDAPConfig, testRestores)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr* managerPtr =
+ new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(4);
+ EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(2);
+ managerPtr->createConfig("ldap://9.194.251.138/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+ EXPECT_TRUE(fs::exists(configFilePath));
+ // Delete LDAP configuration
+ managerPtr->deleteObject();
+ EXPECT_TRUE(fs::exists(configFilePath));
+ // Restore from configFilePath
+ managerPtr->restore(configFilePath.c_str());
+ // validate restored properties
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPServerURI(),
+ "ldap://9.194.251.138/");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPBindDN(), "cn=Users,dc=com");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPBaseDN(), "cn=Users,dc=corp");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPSearchScope(),
+ ldap_base::Config::SearchScope::sub);
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPType(),
+ ldap_base::Config::Type::ActiveDirectory);
+ delete managerPtr;
+}
+
+TEST_F(TestLDAPConfig, testLDAPServerURI)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr* managerPtr =
+ new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(6);
+ EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(2);
+
+ managerPtr->createConfig("ldap://9.194.251.138/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+ // Change LDAP Server URI
+ managerPtr->getConfigPtr()->lDAPServerURI("ldap://9.194.251.139");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPServerURI(),
+ "ldap://9.194.251.139");
+ // Change LDAP Server URI
+ managerPtr->getConfigPtr()->lDAPServerURI("ldaps://9.194.251.139");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPServerURI(),
+ "ldaps://9.194.251.139");
+ // Delete LDAP configuration
+ managerPtr->deleteObject();
+
+ managerPtr->restore(configFilePath.c_str());
+ // Check LDAP Server URI
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPServerURI(),
+ "ldaps://9.194.251.139");
+ delete managerPtr;
+}
+
+TEST_F(TestLDAPConfig, testLDAPBindDN)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr* managerPtr =
+ new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(5);
+ EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(2);
+
+ managerPtr->createConfig("ldap://9.194.251.138/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+ // Change LDAP BindDN
+ managerPtr->getConfigPtr()->lDAPBindDN(
+ "cn=Administrator,cn=Users,dc=corp,dc=ibm,dc=com");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPBindDN(),
+ "cn=Administrator,cn=Users,dc=corp,dc=ibm,dc=com");
+ // Change LDAP BindDN
+ EXPECT_THROW(
+ {
+ try
+ {
+ managerPtr->getConfigPtr()->lDAPBindDN("");
+ }
+ catch (const InvalidArgument& e)
+ {
+ throw;
+ }
+ },
+ InvalidArgument);
+ // Delete LDAP configuration
+ managerPtr->deleteObject();
+
+ managerPtr->restore(configFilePath.c_str());
+ // Check LDAP BindDN after restoring
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPBindDN(),
+ "cn=Administrator,cn=Users,dc=corp,dc=ibm,dc=com");
+ delete managerPtr;
+}
+
+TEST_F(TestLDAPConfig, testLDAPBaseDN)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr* managerPtr =
+ new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(5);
+ EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(2);
+ managerPtr->createConfig("ldap://9.194.251.138/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+ // Change LDAP BaseDN
+ managerPtr->getConfigPtr()->lDAPBaseDN(
+ "cn=Administrator,cn=Users,dc=corp,dc=ibm,dc=com");
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPBaseDN(),
+ "cn=Administrator,cn=Users,dc=corp,dc=ibm,dc=com");
+ // Change LDAP BaseDN
+ EXPECT_THROW(
+ {
+ try
+ {
+ managerPtr->getConfigPtr()->lDAPBaseDN("");
+ }
+ catch (const InvalidArgument& e)
+ {
+ throw;
+ }
+ },
+ InvalidArgument);
+ // Delete LDAP configuration
+ managerPtr->deleteObject();
+
+ managerPtr->restore(configFilePath.c_str());
+ // Check LDAP BaseDN after restoring
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPBaseDN(),
+ "cn=Administrator,cn=Users,dc=corp,dc=ibm,dc=com");
+ delete managerPtr;
+}
+
+TEST_F(TestLDAPConfig, testSearchScope)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr* managerPtr =
+ new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(5);
+ EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(2);
+ managerPtr->createConfig("ldap://9.194.251.138/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+ // Change LDAP SearchScope
+ managerPtr->getConfigPtr()->lDAPSearchScope(
+ ldap_base::Config::SearchScope::one);
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPSearchScope(),
+ ldap_base::Config::SearchScope::one);
+ // Delete LDAP configuration
+ managerPtr->deleteObject();
+
+ managerPtr->restore(configFilePath.c_str());
+ // Check LDAP SearchScope after restoring
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPSearchScope(),
+ ldap_base::Config::SearchScope::one);
+ delete managerPtr;
+}
+
+TEST_F(TestLDAPConfig, testLDAPType)
+{
+ auto configFilePath = std::string(dir.c_str()) + "/" + ldapconfFile;
+ if (fs::exists(configFilePath))
+ {
+ fs::remove(configFilePath);
+ }
+ EXPECT_FALSE(fs::exists(configFilePath));
+ MockConfigMgr* managerPtr =
+ new MockConfigMgr(bus, LDAP_CONFIG_ROOT, configFilePath.c_str());
+ EXPECT_CALL(*managerPtr, restartService("nslcd.service")).Times(5);
+ EXPECT_CALL(*managerPtr, restartService("nscd.service")).Times(2);
+ managerPtr->createConfig("ldap://9.194.251.138/", "cn=Users,dc=com",
+ "cn=Users,dc=corp", "MyLdap12",
+ ldap_base::Create::SearchScope::sub,
+ ldap_base::Create::Type::ActiveDirectory);
+ // Change LDAP type
+ managerPtr->getConfigPtr()->lDAPType(ldap_base::Config::Type::OpenLdap);
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPType(),
+ ldap_base::Config::Type::OpenLdap);
+ // Delete LDAP configuration
+ managerPtr->deleteObject();
+
+ managerPtr->restore(configFilePath.c_str());
+ // Check LDAP type after restoring
+ EXPECT_EQ(managerPtr->getConfigPtr()->lDAPType(),
+ ldap_base::Config::Type::OpenLdap);
+ delete managerPtr;
+}
+} // namespace ldap
+} // namespace phosphor
OpenPOWER on IntegriCloud