aboutsummaryrefslogtreecommitdiff
path: root/contrib/kyua/engine/requirements.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/kyua/engine/requirements.cpp')
-rw-r--r--contrib/kyua/engine/requirements.cpp57
1 files changed, 27 insertions, 30 deletions
diff --git a/contrib/kyua/engine/requirements.cpp b/contrib/kyua/engine/requirements.cpp
index dff43e531a57..d5838b83f33a 100644
--- a/contrib/kyua/engine/requirements.cpp
+++ b/contrib/kyua/engine/requirements.cpp
@@ -41,10 +41,6 @@
#include "utils/sanity.hpp"
#include "utils/units.hpp"
-#ifdef __FreeBSD__
-#include <libutil.h>
-#endif
-
namespace config = utils::config;
namespace fs = utils::fs;
namespace passwd = utils::passwd;
@@ -224,26 +220,6 @@ check_required_programs(const model::paths_set& required_programs)
}
-#ifdef __FreeBSD__
-/// Checks if all required kmods are loaded.
-///
-/// \param required_programs Set of kmods.
-///
-/// \return Empty if the required kmods are all loaded or an error
-/// message otherwise.
-static std::string
-check_required_kmods(const model::strings_set& required_kmods)
-{
- for (model::strings_set::const_iterator iter = required_kmods.begin();
- iter != required_kmods.end(); iter++) {
- if (!kld_isloaded((*iter).c_str()))
- return F("Required kmod '%s' not loaded") % *iter;
- }
- return "";
-}
-#endif
-
-
/// Checks if the current system has the specified amount of memory.
///
/// \param required_memory Amount of required physical memory, or zero if not
@@ -289,9 +265,29 @@ check_required_disk_space(const units::bytes& required_disk_space,
}
+/// List of registered extra requirement checkers.
+///
+/// Use register_reqs_checker() to add an entry to this global list.
+static std::vector< std::shared_ptr< engine::reqs_checker > > _reqs_checkers;
+
+
} // anonymous namespace
+const std::vector< std::shared_ptr< engine::reqs_checker > >
+engine::reqs_checkers()
+{
+ return _reqs_checkers;
+}
+
+void
+engine::register_reqs_checker(
+ const std::shared_ptr< engine::reqs_checker > checker)
+{
+ _reqs_checkers.push_back(checker);
+}
+
+
/// Checks if all the requirements specified by the test case are met.
///
/// \param md The test metadata.
@@ -336,12 +332,6 @@ engine::check_reqs(const model::metadata& md, const config::tree& cfg,
if (!reason.empty())
return reason;
-#ifdef __FreeBSD__
- reason = check_required_kmods(md.required_kmods());
- if (!reason.empty())
- return reason;
-#endif
-
reason = check_required_memory(md.required_memory());
if (!reason.empty())
return reason;
@@ -351,6 +341,13 @@ engine::check_reqs(const model::metadata& md, const config::tree& cfg,
if (!reason.empty())
return reason;
+ // Iterate over extra checkers registered.
+ for (auto& checker : engine::reqs_checkers()) {
+ reason = checker->exec(md, cfg, test_suite, work_directory);
+ if (!reason.empty())
+ return reason;
+ }
+
INV(reason.empty());
return reason;
}