From 9341362e37944508ec6d566e896784f6b118d477 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Tue, 31 Dec 2024 10:36:12 +0100 Subject: [PATCH] split try catch for system and libraries loading --- src/solver/modeler/loadFiles/handleErrors.cpp | 6 ----- .../solver/modeler/loadFiles/loadFiles.h | 2 -- .../modeler/loadFiles/readLibraries.cpp | 25 +++++++++++++++---- .../modeler/loadFiles/readParameters.cpp | 2 +- src/solver/modeler/loadFiles/readSystem.cpp | 24 ++++++++++++++---- .../loadFiles/testLoadModelerFiles.cpp | 11 +++++++- .../modeler/loadFiles/testParameters.cpp | 6 +++++ 7 files changed, 56 insertions(+), 20 deletions(-) diff --git a/src/solver/modeler/loadFiles/handleErrors.cpp b/src/solver/modeler/loadFiles/handleErrors.cpp index dd675df6f5..4ee2352970 100644 --- a/src/solver/modeler/loadFiles/handleErrors.cpp +++ b/src/solver/modeler/loadFiles/handleErrors.cpp @@ -35,10 +35,4 @@ void handleYamlError(const YAML::Exception& e, const std::string& context) logs.error() << e.what(); } -void handleRuntimeError(const std::runtime_error& e, const std::string& context) -{ - logs.error() << "Error while parsing or converting the file: " << context; - logs.error() << e.what(); -} - } // namespace Antares::Solver::LoadFiles diff --git a/src/solver/modeler/loadFiles/include/antares/solver/modeler/loadFiles/loadFiles.h b/src/solver/modeler/loadFiles/include/antares/solver/modeler/loadFiles/loadFiles.h index aee860ff0e..ff3882e554 100644 --- a/src/solver/modeler/loadFiles/include/antares/solver/modeler/loadFiles/loadFiles.h +++ b/src/solver/modeler/loadFiles/include/antares/solver/modeler/loadFiles/loadFiles.h @@ -41,8 +41,6 @@ Study::SystemModel::System loadSystem(const std::filesystem::path& studyPath, void handleYamlError(const YAML::Exception& e, const std::string& context); -void handleRuntimeError(const std::runtime_error& e, const std::string& context); - /// Generic error class for all loading errors to catch in the main class ErrorLoadingYaml: public std::runtime_error { diff --git a/src/solver/modeler/loadFiles/readLibraries.cpp b/src/solver/modeler/loadFiles/readLibraries.cpp index d4ed6d955f..98b92b3f83 100644 --- a/src/solver/modeler/loadFiles/readLibraries.cpp +++ b/src/solver/modeler/loadFiles/readLibraries.cpp @@ -34,22 +34,37 @@ namespace Antares::Solver::LoadFiles static Study::SystemModel::Library loadSingleLibrary(const fs::path& filePath) { + std::string libraryStr; try { - const std::string libraryStr = IO::readFile(filePath); - ModelParser::Parser parser; - ModelParser::Library libraryObj = parser.parse(libraryStr); + libraryStr = IO::readFile(filePath); + } + catch (const std::runtime_error& e) + { + logs.error() << "Error while trying to read this library file: " << filePath; + throw ErrorLoadingYaml(e.what()); + } - return ModelConverter::convert(libraryObj); + ModelParser::Parser parser; + ModelParser::Library libraryObj; + + try + { + libraryObj = parser.parse(libraryStr); } catch (const YAML::Exception& e) { handleYamlError(e, filePath.string()); throw ErrorLoadingYaml(e.what()); } + + try + { + return ModelConverter::convert(libraryObj); + } catch (const std::runtime_error& e) { - handleRuntimeError(e, filePath.string()); + logs.error() << "Error while converting this library yaml: "<< filePath; throw ErrorLoadingYaml(e.what()); } } diff --git a/src/solver/modeler/loadFiles/readParameters.cpp b/src/solver/modeler/loadFiles/readParameters.cpp index a1a6658a45..bab889cb7e 100644 --- a/src/solver/modeler/loadFiles/readParameters.cpp +++ b/src/solver/modeler/loadFiles/readParameters.cpp @@ -41,7 +41,7 @@ ModelerParameters loadParameters(const fs::path& studyPath) } catch (const std::runtime_error& e) { - handleRuntimeError(e, filename); + logs.error() << "Error while trying to read file parameters.yml"; throw ErrorLoadingYaml(e.what()); } diff --git a/src/solver/modeler/loadFiles/readSystem.cpp b/src/solver/modeler/loadFiles/readSystem.cpp index bd3e6f6d6a..dac47889cc 100644 --- a/src/solver/modeler/loadFiles/readSystem.cpp +++ b/src/solver/modeler/loadFiles/readSystem.cpp @@ -36,22 +36,36 @@ Study::SystemModel::System loadSystem(const fs::path& studyPath, const std::vector& libraries) { std::string filename = "system.yml"; + std::string systemStr; try { - const std::string systemStr = IO::readFile(studyPath / "input" / filename); - SystemParser::Parser parser; - SystemParser::System systemObj = parser.parse(systemStr); + systemStr = IO::readFile(studyPath / "input" / filename); + } + catch (const std::runtime_error& e) + { + logs.error() << "Error while trying to read file system.yml"; + throw ErrorLoadingYaml(e.what()); + } - return SystemConverter::convert(systemObj, libraries); + SystemParser::Parser parser; + SystemParser::System systemObj; + try + { + systemObj = parser.parse(systemStr); } catch (const YAML::Exception& e) { handleYamlError(e, filename); throw ErrorLoadingYaml(e.what()); } + + try + { + return SystemConverter::convert(systemObj, libraries); + } catch (const std::runtime_error& e) { - handleRuntimeError(e, filename); + logs.error() << "Error while converting the system yaml to components"; throw ErrorLoadingYaml(e.what()); } } diff --git a/src/tests/src/solver/modeler/loadFiles/testLoadModelerFiles.cpp b/src/tests/src/solver/modeler/loadFiles/testLoadModelerFiles.cpp index 6c0d8c288a..7d02128b76 100644 --- a/src/tests/src/solver/modeler/loadFiles/testLoadModelerFiles.cpp +++ b/src/tests/src/solver/modeler/loadFiles/testLoadModelerFiles.cpp @@ -29,7 +29,7 @@ #include "files-system.h" -BOOST_AUTO_TEST_SUITE(read_modeler_parameters) +BOOST_AUTO_TEST_SUITE(test_modeler_files_loading) namespace fs = std::filesystem; @@ -52,6 +52,15 @@ struct FixtureLoadFile } }; +BOOST_AUTO_TEST_CASE(files_not_existing) +{ + fs::path studyPath = CREATE_TMP_DIR_BASED_ON_TEST_NAME(); + std::vector libraries; + + BOOST_CHECK_THROW(Antares::Solver::LoadFiles::loadLibraries(studyPath), std::runtime_error); + BOOST_CHECK_THROW(Antares::Solver::LoadFiles::loadSystem(studyPath, libraries), std::runtime_error); +} + BOOST_FIXTURE_TEST_CASE(read_one_lib_treile, FixtureLoadFile) { std::ofstream libStream(libraryDirPath / "simple.yml"); diff --git a/src/tests/src/solver/modeler/loadFiles/testParameters.cpp b/src/tests/src/solver/modeler/loadFiles/testParameters.cpp index b351160fc3..fb529f3111 100644 --- a/src/tests/src/solver/modeler/loadFiles/testParameters.cpp +++ b/src/tests/src/solver/modeler/loadFiles/testParameters.cpp @@ -78,3 +78,9 @@ BOOST_AUTO_TEST_CASE(parameters_missing) BOOST_CHECK_THROW(Antares::Solver::LoadFiles::loadParameters(studyPath), std::runtime_error); } + +BOOST_AUTO_TEST_CASE(file_missing) +{ + auto studyPath = CREATE_TMP_DIR_BASED_ON_TEST_NAME(); + BOOST_CHECK_THROW(Antares::Solver::LoadFiles::loadParameters(studyPath), std::runtime_error); +}