From b071654447fef378e960b7624b03c85d3dd49ba7 Mon Sep 17 00:00:00 2001 From: Davide Pesavento Date: Mon, 16 Dec 2024 19:12:11 -0500 Subject: [PATCH] Switch to std::filesystem Change-Id: Idd88815c8971a1dd6a592ac9d3f46d5925afd21b --- .jenkins.d/00-deps.sh | 1 - .waf-tools/default-compiler-flags.py | 2 +- src/conf-file-processor.cpp | 63 +++++++++---------- tests/key-chain-fixture.cpp | 7 ++- tests/security/test-certificate-store.cpp | 8 +-- tests/test-lsa-rule.cpp | 8 +-- tests/test-sequencing-manager.cpp | 20 +++--- tests/update/test-prefix-update-processor.cpp | 8 +-- tests/update/test-save-delete-prefix.cpp | 9 +-- wscript | 2 +- 10 files changed, 60 insertions(+), 68 deletions(-) diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh index bac6927..3f3235a 100755 --- a/.jenkins.d/00-deps.sh +++ b/.jenkins.d/00-deps.sh @@ -7,7 +7,6 @@ APT_PKGS=( libboost-chrono-dev libboost-date-time-dev libboost-dev - libboost-filesystem-dev libboost-iostreams-dev libboost-log-dev libboost-program-options-dev diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py index 9899d05..090e65d 100644 --- a/.waf-tools/default-compiler-flags.py +++ b/.waf-tools/default-compiler-flags.py @@ -136,7 +136,7 @@ def getDebugFlags(self, conf): return { 'CXXFLAGS': [], 'LINKFLAGS': [], - 'DEFINES': ['BOOST_ASIO_NO_DEPRECATED', 'BOOST_FILESYSTEM_NO_DEPRECATED'], + 'DEFINES': ['BOOST_ASIO_NO_DEPRECATED'], } def getOptimizedFlags(self, conf): diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp index af0ad52..29f22cf 100644 --- a/src/conf-file-processor.cpp +++ b/src/conf-file-processor.cpp @@ -1,6 +1,6 @@ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* - * Copyright (c) 2014-2023, The University of Memphis, + * Copyright (c) 2014-2024, The University of Memphis, * Regents of the University of California, * Arizona Board of Regents. * @@ -29,16 +29,16 @@ #include #include -#include #include +#include #include #include -namespace bf = boost::filesystem; - namespace nlsr { +namespace fs = std::filesystem; + template class ConfigurationVariable { @@ -330,14 +330,14 @@ ConfFileProcessor::processConfSectionGeneral(const ConfigSection& section) return false; } + // state-dir try { - std::string stateDir = section.get("state-dir"); - if (bf::exists(stateDir)) { - if (bf::is_directory(stateDir)) { + fs::path stateDir(section.get("state-dir")); + if (fs::exists(stateDir)) { + if (fs::is_directory(stateDir)) { // copying nlsr.conf file to a user-defined directory for possible modification - std::string conFileDynamic = (bf::path(stateDir) / "nlsr.conf").string(); - - if (m_confFileName == conFileDynamic) { + auto conFileDynamic = stateDir / "nlsr.conf"; + if (m_confFileName == conFileDynamic.string()) { std::cerr << "Please use nlsr.conf stored at another location " << "or change the state-dir in the configuration." << std::endl; std::cerr << "The file at " << conFileDynamic << @@ -347,45 +347,39 @@ ConfFileProcessor::processConfSectionGeneral(const ConfigSection& section) return false; } - m_confParam.setConfFileNameDynamic(conFileDynamic); + m_confParam.setConfFileNameDynamic(conFileDynamic.string()); try { - bf::copy_file(m_confFileName, conFileDynamic, -#if BOOST_VERSION >= 107400 - bf::copy_options::overwrite_existing -#else - bf::copy_option::overwrite_if_exists -#endif - ); + fs::copy_file(m_confFileName, conFileDynamic, fs::copy_options::overwrite_existing); } - catch (const bf::filesystem_error& e) { - std::cerr << "Error copying conf file to the state directory: " << e.what() << std::endl; + catch (const fs::filesystem_error& e) { + std::cerr << "Error copying conf file to state-dir: " << e.what() << std::endl; return false; } - std::string testFileName = (bf::path(stateDir) / "test.seq").string(); - std::ofstream testOutFile(testFileName); - if (testOutFile) { - m_confParam.setStateFileDir(stateDir); + auto testFilePath = stateDir / "test.seq"; + std::ofstream testFile(testFilePath); + if (testFile) { + m_confParam.setStateFileDir(stateDir.string()); } else { - std::cerr << "NLSR does not have read/write permission on the state directory" << std::endl; + std::cerr << "NLSR does not have read/write permission on state-dir" << std::endl; return false; } - testOutFile.close(); - remove(testFileName.c_str()); + testFile.close(); + fs::remove(testFilePath); } else { - std::cerr << "Provided path '" << stateDir << "' is not a directory" << std::endl; + std::cerr << "Provided state-dir " << stateDir << " is not a directory" << std::endl; return false; } } else { - std::cerr << "Provided state directory '" << stateDir << "' does not exist" << std::endl; + std::cerr << "Provided state-dir " << stateDir << " does not exist" << std::endl; return false; } } catch (const std::exception& ex) { - std::cerr << "You must configure state directory" << std::endl; + std::cerr << "You must configure state-dir" << std::endl; std::cerr << ex.what() << std::endl; return false; } @@ -654,20 +648,19 @@ ConfFileProcessor::processConfSectionSecurity(const ConfigSection& section) return false; } - std::string file = it->second.data(); - bf::path certfilePath = absolute(file, bf::path(m_confFileName).parent_path()); - std::ifstream ifs(certfilePath.string()); + fs::path certPath = fs::canonical(fs::path(m_confFileName).parent_path() / it->second.data()); + std::ifstream ifs(certPath); ndn::security::Certificate idCert; try { idCert = ndn::io::loadTlv(ifs); } catch (const std::exception& e) { - std::cerr << "Error: Cannot load cert-to-publish '" << file << "': " << e.what() << std::endl; + std::cerr << "Error: Cannot load cert-to-publish " << certPath << ": " << e.what() << std::endl; return false; } - m_confParam.addCertPath(certfilePath.string()); + m_confParam.addCertPath(certPath.string()); m_confParam.loadCertToValidator(idCert); } } diff --git a/tests/key-chain-fixture.cpp b/tests/key-chain-fixture.cpp index f29153f..bae6ca7 100644 --- a/tests/key-chain-fixture.cpp +++ b/tests/key-chain-fixture.cpp @@ -27,7 +27,8 @@ #include -#include +#include +#include namespace nlsr::tests { @@ -40,9 +41,9 @@ KeyChainFixture::KeyChainFixture() KeyChainFixture::~KeyChainFixture() { - boost::system::error_code ec; + std::error_code ec; for (const auto& certFile : m_certFiles) { - boost::filesystem::remove(certFile, ec); // ignore error + std::filesystem::remove(certFile, ec); // ignore error } } diff --git a/tests/security/test-certificate-store.cpp b/tests/security/test-certificate-store.cpp index 484959e..b00744f 100644 --- a/tests/security/test-certificate-store.cpp +++ b/tests/security/test-certificate-store.cpp @@ -26,11 +26,11 @@ #include "tests/io-key-chain-fixture.hpp" #include "tests/test-common.hpp" -#include -#include #include #include +#include + namespace nlsr::tests { class CertificateStoreFixture : public IoKeyChainFixture @@ -50,7 +50,7 @@ class CertificateStoreFixture : public IoKeyChainFixture , nlsr(face, m_keyChain, conf) , lsdb(nlsr.getLsdb()) , certStore(face, conf, lsdb) - , ROOT_CERT_PATH(boost::filesystem::current_path() / "root.cert") + , ROOT_CERT_PATH(std::filesystem::current_path() / "root.cert") { rootId = m_keyChain.createIdentity(rootIdName); siteIdentity = addSubCertificate(siteIdentityName, rootId); @@ -112,7 +112,7 @@ class CertificateStoreFixture : public IoKeyChainFixture ndn::security::Certificate certificate; ndn::Name certificateKey; security::CertificateStore certStore; - const boost::filesystem::path ROOT_CERT_PATH; + const std::filesystem::path ROOT_CERT_PATH; }; BOOST_FIXTURE_TEST_SUITE(TestCertificateStore, CertificateStoreFixture) diff --git a/tests/test-lsa-rule.cpp b/tests/test-lsa-rule.cpp index 87f915d..ddd5969 100644 --- a/tests/test-lsa-rule.cpp +++ b/tests/test-lsa-rule.cpp @@ -25,12 +25,12 @@ #include "tests/io-key-chain-fixture.hpp" #include "tests/test-common.hpp" -#include -#include #include #include #include +#include + namespace nlsr::tests { using namespace ndn; @@ -48,7 +48,7 @@ class LsaRuleFixture : public IoKeyChainFixture , confProcessor(confParam, SyncProtocol::PSYNC, HYPERBOLIC_STATE_OFF, "/ndn/", "/edu/test-site", "/%C1.Router/router1") , lsdb(face, m_keyChain, confParam) - , ROOT_CERT_PATH(boost::filesystem::current_path() / std::string("root.cert")) + , ROOT_CERT_PATH(std::filesystem::current_path() / "root.cert") { rootId = m_keyChain.createIdentity(rootIdName); siteIdentity = addSubCertificate(siteIdentityName, rootId); @@ -92,7 +92,7 @@ class LsaRuleFixture : public IoKeyChainFixture DummyConfFileProcessor confProcessor; Lsdb lsdb; - const boost::filesystem::path ROOT_CERT_PATH; + const std::filesystem::path ROOT_CERT_PATH; }; BOOST_FIXTURE_TEST_SUITE(TestLsaDataValidation, LsaRuleFixture) diff --git a/tests/test-sequencing-manager.cpp b/tests/test-sequencing-manager.cpp index dd098c0..9941d1d 100644 --- a/tests/test-sequencing-manager.cpp +++ b/tests/test-sequencing-manager.cpp @@ -23,8 +23,9 @@ #include "tests/boost-test.hpp" -#include +#include #include +#include namespace nlsr::tests { @@ -33,22 +34,17 @@ using namespace ndn; class SequencingManagerFixture { public: - SequencingManagerFixture() - : m_seqManager("/tmp", HYPERBOLIC_STATE_OFF) - { - } - ~SequencingManagerFixture() { - boost::filesystem::remove(seqFile); + std::error_code ec; + std::filesystem::remove(m_seqFile, ec); // ignore error } void writeToFile(const std::string& testSeq) { - std::ofstream outputFile(seqFile, std::ofstream::trunc); + std::ofstream outputFile(m_seqFile, std::ofstream::trunc); outputFile << testSeq; - outputFile.close(); } void @@ -66,8 +62,10 @@ class SequencingManagerFixture } public: - std::string seqFile = "/tmp/nlsrSeqNo.txt"; - SequencingManager m_seqManager; + SequencingManager m_seqManager{"/tmp", HYPERBOLIC_STATE_OFF}; + +private: + std::filesystem::path m_seqFile{"/tmp/nlsrSeqNo.txt"}; }; BOOST_FIXTURE_TEST_SUITE(TestSequencingManager, SequencingManagerFixture) diff --git a/tests/update/test-prefix-update-processor.cpp b/tests/update/test-prefix-update-processor.cpp index 493d73d..229e2d3 100644 --- a/tests/update/test-prefix-update-processor.cpp +++ b/tests/update/test-prefix-update-processor.cpp @@ -29,12 +29,12 @@ #include #include -#include -#include #include #include #include +#include + namespace nlsr::tests { using namespace ndn; @@ -50,7 +50,7 @@ class PrefixUpdateFixture : public IoKeyChainFixture , confProcessor(conf) , nlsr(face, m_keyChain, conf) , namePrefixList(conf.getNamePrefixList()) - , SITE_CERT_PATH(boost::filesystem::current_path() / std::string("site.cert")) + , SITE_CERT_PATH(std::filesystem::current_path() / "site.cert") { // Site cert siteIdentity = m_keyChain.createIdentity(siteIdentityName); @@ -139,7 +139,7 @@ class PrefixUpdateFixture : public IoKeyChainFixture Nlsr nlsr; NamePrefixList& namePrefixList; - const boost::filesystem::path SITE_CERT_PATH; + const std::filesystem::path SITE_CERT_PATH; }; BOOST_FIXTURE_TEST_SUITE(TestPrefixUpdateProcessor, PrefixUpdateFixture) diff --git a/tests/update/test-save-delete-prefix.cpp b/tests/update/test-save-delete-prefix.cpp index ef38cef..5c582cd 100644 --- a/tests/update/test-save-delete-prefix.cpp +++ b/tests/update/test-save-delete-prefix.cpp @@ -30,10 +30,10 @@ #include #include -#include -#include #include +#include + namespace nlsr::tests { namespace bpt = boost::property_tree; @@ -49,7 +49,7 @@ class PrefixSaveDeleteFixture : public IoKeyChainFixture , conf(face, m_keyChain, testConfFile) , confProcessor(conf) , nlsr(face, m_keyChain, conf) - , SITE_CERT_PATH(boost::filesystem::current_path() / std::string("site.cert")) + , SITE_CERT_PATH(std::filesystem::current_path() / "site.cert") , counter(0) { std::ifstream source("nlsr.conf", std::ios::binary); @@ -69,6 +69,7 @@ class PrefixSaveDeleteFixture : public IoKeyChainFixture std::ifstream inputFile; inputFile.open(testConfFile); BOOST_REQUIRE(inputFile.is_open()); + bpt::ptree pt; bpt::read_info(inputFile, pt); // Loads section and file name @@ -164,7 +165,7 @@ class PrefixSaveDeleteFixture : public IoKeyChainFixture ConfParameter conf; DummyConfFileProcessor confProcessor; Nlsr nlsr; - const boost::filesystem::path SITE_CERT_PATH; + const std::filesystem::path SITE_CERT_PATH; ndn::Name sessionTime; int counter; }; diff --git a/wscript b/wscript index fbadf9f..be9030c 100644 --- a/wscript +++ b/wscript @@ -72,7 +72,7 @@ def configure(conf): conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.9.0', '--cflags', '--libs'], uselib_store='NDN_CXX', pkg_config_path=pkg_config_path) - conf.check_boost(lib='filesystem', mt=True) + conf.check_boost() if conf.env.BOOST_VERSION_NUMBER < 107100: conf.fatal('The minimum supported version of Boost is 1.71.0.\n' 'Please upgrade your distribution or manually install a newer version of Boost.\n'