aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/test/common.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-10-10 17:22:46 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2020-11-06 19:32:09 +0300
commitf41599c8e9435f3dfec60b872c2b4ae31177efdd (patch)
tree088f8d9bf906e4a2ed734e034699163c9ccc7306 /libbuild2/test/common.hxx
parentac76a4fd2afff48a0d5db84592babe5cabef3a2c (diff)
Add support for test timeouts
Diffstat (limited to 'libbuild2/test/common.hxx')
-rw-r--r--libbuild2/test/common.hxx39
1 files changed, 39 insertions, 0 deletions
diff --git a/libbuild2/test/common.hxx b/libbuild2/test/common.hxx
index 01628fd..a43b2b1 100644
--- a/libbuild2/test/common.hxx
+++ b/libbuild2/test/common.hxx
@@ -20,6 +20,7 @@ namespace build2
{
const variable& config_test;
const variable& config_test_output;
+ const variable& config_test_timeout;
const variable& var_test;
const variable& test_options;
@@ -40,11 +41,28 @@ namespace build2
output_before before = output_before::warn;
output_after after = output_after::clean;
+ // The config.test.timeout values.
+ //
+ optional<duration> operation_timeout;
+ optional<duration> test_timeout;
+
// The config.test query interface.
//
const names* test_ = nullptr; // The config.test value if any.
scope* root_ = nullptr; // The root scope for target resolution.
+ // Store it as the underlying representation and use the release-consume
+ // ordering (see mtime_target for the reasoning).
+ //
+ mutable atomic<timestamp::rep> operation_deadline_ {
+ timestamp_unknown_rep};
+
+ // Return the test operation deadline, calculating it on the first call
+ // as an offset from now by the operation timeout.
+ //
+ optional<timestamp>
+ operation_deadline () const;
+
// Return true if the specified alias target should pass-through to its
// prerequisites.
//
@@ -65,6 +83,27 @@ namespace build2
explicit
common (common_data&& d): common_data (move (d)) {}
};
+
+ // Helpers.
+ //
+
+ // Return the nearest of the target-enclosing root scopes test operation
+ // deadlines.
+ //
+ optional<timestamp>
+ operation_deadline (const target&);
+
+ // Return the lesser of the target-enclosing root scopes test timeouts.
+ //
+ optional<duration>
+ test_timeout (const target&);
+
+ // Convert the test timeouts in the target-enclosing root scopes into
+ // deadlines and return the nearest between them and the operation
+ // deadlines in the enclosing root scopes.
+ //
+ optional<timestamp>
+ test_deadline (const target&);
}
}