From 022d5cb4f246809ce8d9a08d3499edd309ed26e7 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 29 Sep 2021 21:22:00 +0300 Subject: Add agent, worker, and dependency checksums to task/result manifests --- libbbot/manifest.cxx | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) (limited to 'libbbot/manifest.cxx') diff --git a/libbbot/manifest.cxx b/libbbot/manifest.cxx index 36f92a0..c604810 100644 --- a/libbbot/manifest.cxx +++ b/libbbot/manifest.cxx @@ -43,6 +43,7 @@ namespace bbot { switch (s) { + case result_status::skip: return "skip"; case result_status::success: return "success"; case result_status::warning: return "warning"; case result_status::error: return "error"; @@ -57,7 +58,8 @@ namespace bbot result_status to_result_status (const string& s) { - if (s == "success") return result_status::success; + if (s == "skip") return result_status::skip; + else if (s == "success") return result_status::success; else if (s == "warning") return result_status::warning; else if (s == "error") return result_status::error; else if (s == "abort") return result_status::abort; @@ -621,6 +623,16 @@ namespace bbot bad_value (e.what ()); } } + else if (n == "dependency-checksum") + { + if (dependency_checksum) + bad_name ("task dependency checksum redefinition"); + + if (v.empty ()) + bad_value ("empty task dependency checksum"); + + dependency_checksum = move (v); + } else if (n == "machine") { if (!machine.empty ()) @@ -697,6 +709,16 @@ namespace bbot interactive = move (v); } + else if (n == "worker-checksum") + { + if (worker_checksum) + bad_name ("task worker checksum redefinition"); + + if (v.empty ()) + bad_value ("empty task worker checksum"); + + worker_checksum = move (v); + } else if (!iu) bad_name ("unknown name '" + n + "' in task manifest"); } @@ -768,6 +790,9 @@ namespace bbot for (const test_dependency& t: tests) s.next (to_string (t.type), t.string ()); + if (dependency_checksum) + s.next ("dependency-checksum", *dependency_checksum); + s.next ("machine", machine); s.next ("target", target.string ()); @@ -804,6 +829,9 @@ namespace bbot if (interactive) s.next ("interactive", *interactive); + if (worker_checksum) + s.next ("worker-checksum", *worker_checksum); + s.next ("", ""); // End of manifest. } @@ -898,6 +926,16 @@ namespace bbot result_url = move (v); } + else if (n == "agent-checksum") + { + if (agent_checksum) + bad_name ("task response agent checksum redefinition"); + + if (v.empty ()) + bad_value ("empty task response agent checksum"); + + agent_checksum = move (v); + } else if (!iu) bad_name ("unknown name '" + n + "' in task response manifest"); } @@ -925,6 +963,9 @@ namespace bbot if (result_url) bad_value ("unexpected task response result url"); + + if (agent_checksum) + bad_value ("unexpected task response agent checksum"); } // If session is not empty then the task manifest must follow, otherwise it @@ -964,6 +1005,9 @@ namespace bbot if (result_url) s.next ("result-url", *result_url); + if (agent_checksum) + s.next ("agent-checksum", *agent_checksum); + s.next ("", ""); // End of manifest. if (task) @@ -1130,6 +1174,26 @@ namespace bbot // results[nlog++].log = move (v); } + else if (n == "worker-checksum") + { + if (worker_checksum) + bad_name ("result worker checksum redefinition"); + + if (v.empty ()) + bad_value ("empty result worker checksum"); + + worker_checksum = move (v); + } + else if (n == "dependency-checksum") + { + if (dependency_checksum) + bad_name ("result dependency checksum redefinition"); + + if (v.empty ()) + bad_value ("empty result dependency checksum"); + + dependency_checksum = move (v); + } else if (!iu) bad_name ("unknown name '" + n + "' in result manifest"); } @@ -1186,6 +1250,12 @@ namespace bbot for (const auto& r: results) s.next (r.operation + "-log", r.log); + if (worker_checksum) + s.next ("worker-checksum", *worker_checksum); + + if (dependency_checksum) + s.next ("dependency-checksum", *dependency_checksum); + s.next ("", ""); // End of manifest. } @@ -1248,6 +1318,16 @@ namespace bbot bad_value ("invalid result request challenge"); } } + else if (n == "agent-checksum") + { + if (!agent_checksum.empty ()) + bad_name ("result request agent checksum redefinition"); + + if (v.empty ()) + bad_value ("empty result request agent checksum"); + + agent_checksum = move (v); + } else if (!iu) bad_name ("unknown name '" + n + "' in result request manifest"); } @@ -1257,6 +1337,9 @@ namespace bbot if (session.empty ()) bad_value ("no result request session specified"); + if (agent_checksum.empty ()) + bad_value ("no result request agent checksum specified"); + nv = p.next (); if (nv.empty ()) bad_value ("result manifest expected"); @@ -1283,6 +1366,8 @@ namespace bbot if (challenge) s.next ("challenge", base64_encode (*challenge)); + s.next ("agent-checksum", agent_checksum); + s.next ("", ""); // End of manifest. result.serialize (s); -- cgit v1.1