diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-04-10 13:17:22 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-04-10 13:17:22 +0200 |
commit | f5a74f868477c484a58f9deb7435afa88efaefa0 (patch) | |
tree | 1f48ba750354c6cce0676054da60d6d19ede1f8b | |
parent | 294058e21e33c7bfbb852f8f1a73b1555aa3eace (diff) |
Split machine_manifest into machine_header_manifest and machine_manifest
-rw-r--r-- | bbot/manifest | 26 | ||||
-rw-r--r-- | bbot/manifest.cxx | 78 | ||||
-rw-r--r-- | tests/manifest/driver.cxx | 4 | ||||
-rw-r--r-- | tests/manifest/machine-header.test (renamed from tests/manifest/machine.test) | 42 | ||||
-rw-r--r-- | tests/manifest/task-request.test | 13 |
5 files changed, 31 insertions, 132 deletions
diff --git a/bbot/manifest b/bbot/manifest index 4a5d449..c5a321a 100644 --- a/bbot/manifest +++ b/bbot/manifest @@ -21,35 +21,29 @@ namespace bbot { - enum class machine_type {kvm, nspawn}; - - class LIBBBOT_EXPORT machine_manifest + class LIBBBOT_EXPORT machine_header_manifest { public: - // A "machine header". - // std::string id; std::string name; std::string summary; - butl::optional<machine_type> type; - - machine_manifest (std::string i, std::string n, std::string s) + machine_header_manifest (std::string i, std::string n, std::string s) : id (std::move (i)), name (std::move (n)), summary (std::move (s)) {} public: - machine_manifest () = default; // VC export. - machine_manifest (butl::manifest_parser&, bool ignore_unknown = false); - machine_manifest (butl::manifest_parser&, - butl::manifest_name_value start, - bool header_only = false, - bool ignore_unknown = false); + machine_header_manifest () = default; // VC export. + machine_header_manifest (butl::manifest_parser&, + bool ignore_unknown = false); + machine_header_manifest (butl::manifest_parser&, + butl::manifest_name_value start, + bool ignore_unknown = false); void serialize (butl::manifest_serializer&) const; }; - using machine_manifests = std::vector<machine_manifest>; + using machine_header_manifests = std::vector<machine_header_manifest>; class LIBBBOT_EXPORT task_request_manifest { @@ -66,7 +60,7 @@ namespace bbot // std::string fingerprint; - machine_manifests machines; // Only machine headers. + machine_header_manifests machines; public: task_request_manifest () = default; // VC export. diff --git a/bbot/manifest.cxx b/bbot/manifest.cxx index b18389e..52841f3 100644 --- a/bbot/manifest.cxx +++ b/bbot/manifest.cxx @@ -61,29 +61,6 @@ namespace bbot else throw invalid_argument ("invalid result status '" + s + "'"); } - // machine_type - // - static string - to_string (machine_type t) - { - switch (t) - { - case machine_type::kvm: return "kvm"; - case machine_type::nspawn: return "nspawn"; - } - - assert (false); - return string (); - } - - machine_type - to_machine_type (const string& t) - { - if (t == "kvm") return machine_type::kvm; - else if (t == "nspawn") return machine_type::nspawn; - else throw invalid_argument ("invalid machine type '" + t + "'"); - } - // Utility functions // inline static bool @@ -101,22 +78,22 @@ namespace bbot return true; } - // machine_manifest + // machine_header_manifest // - machine_manifest:: - machine_manifest (parser& p, bool iu) - : machine_manifest (p, p.next (), false, iu) + machine_header_manifest:: + machine_header_manifest (parser& p, bool iu) + : machine_header_manifest (p, p.next (), iu) { // Make sure this is the end. // name_value nv (p.next ()); if (!nv.empty ()) throw parsing (p.name (), nv.name_line, nv.name_column, - "single machine manifest expected"); + "single machine header manifest expected"); } - machine_manifest:: - machine_manifest (parser& p, name_value nv, bool ho, bool iu) + machine_header_manifest:: + machine_header_manifest (parser& p, name_value nv, bool iu) { auto bad_name = [&p, &nv] (const string& d) { @@ -131,7 +108,7 @@ namespace bbot // Make sure this is the start and we support the version. // if (!nv.name.empty ()) - bad_name ("start of machine manifest expected"); + bad_name ("start of machine header manifest expected"); if (nv.value != "1") bad_value ("unsupported format version"); @@ -171,25 +148,8 @@ namespace bbot summary = move (v); } - else if (n == "type") - { - if (ho) - bad_name ("machine type not allowed"); - - if (type) - bad_name ("machine type redefinition"); - - try - { - type = to_machine_type (v); - } - catch (const invalid_argument&) - { - bad_value ("invalid machine type"); - } - } else if (!iu) - bad_name ("unknown name '" + n + "' in machine manifest"); + bad_name ("unknown name '" + n + "' in machine header manifest"); } // Verify all non-optional values were specified. @@ -202,12 +162,9 @@ namespace bbot if (summary.empty ()) bad_value ("no machine summary specified"); - - if (!ho && !type) - bad_value ("no machine type specified"); } - void machine_manifest:: + void machine_header_manifest:: serialize (serializer& s) const { // @@ Should we check that all non-optional values are specified and all @@ -217,10 +174,6 @@ namespace bbot s.next ("id", id); s.next ("name", name); s.next ("summary", summary); - - if (type) - s.next ("type", to_string (*type)); - s.next ("", ""); // End of manifest. } @@ -288,10 +241,10 @@ namespace bbot if (fingerprint.empty ()) bad_value ("no task request fingerprint specified"); - // Parse machine manifests. + // Parse machine header manifests. // for (nv = p.next (); !nv.empty (); nv = p.next ()) - machines.emplace_back (machine_manifest (p, nv, true, iu)); + machines.emplace_back (machine_header_manifest (p, nv, iu)); if (machines.empty ()) bad_value ("no task request machines specified"); @@ -308,13 +261,8 @@ namespace bbot s.next ("fingerprint", fingerprint); s.next ("", ""); // End of manifest. - for (const machine_manifest& m: machines) - { - if (m.type) - throw serialization (s.name (), "machine type is forbidden"); - + for (const machine_header_manifest& m: machines) m.serialize (s); - } s.next ("", ""); // End of stream. } diff --git a/tests/manifest/driver.cxx b/tests/manifest/driver.cxx index 0f24c8a..16240a5 100644 --- a/tests/manifest/driver.cxx +++ b/tests/manifest/driver.cxx @@ -22,7 +22,7 @@ using namespace bbot; // Read and parse manifest from STDIN and serialize it to STDOUT. The // following options specify the manifest type. // -// -m parse machine manifest +// -m parse machine header manifest // -t parse task manifest // -r parse result manifest // -tq parse task request manifest @@ -43,7 +43,7 @@ try manifest_serializer s (cout, "stdout"); if (opt == "-m") - machine_manifest (p).serialize (s); + machine_header_manifest (p).serialize (s); else if (opt == "-t") task_manifest (p).serialize (s); else if (opt == "-r") diff --git a/tests/manifest/machine.test b/tests/manifest/machine-header.test index 96619f9..051f62f 100644 --- a/tests/manifest/machine.test +++ b/tests/manifest/machine-header.test @@ -1,4 +1,4 @@ -# file : tests/manifest/machine.test +# file : tests/manifest/machine-header.test # copyright : Copyright (c) 2014-2017 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file @@ -6,7 +6,7 @@ test.options += -m : valid : -: Roundtrip the machine manifest. +: Roundtrip the machine header manifest. : { : kvm @@ -16,7 +16,6 @@ test.options += -m id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 name: windows_10-msvc_14 summary: Windows 10 build 1607 with VC 14 update 3 - type: kvm EOF : nspawn @@ -26,18 +25,16 @@ test.options += -m id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 name: windows_10-msvc_14 summary: Windows 10 build 1607 with VC 14 update 3 - type: nspawn EOF } : multiple : -$* <<EOI 2>'stdin:6:1: error: single machine manifest expected' == 1 +$* <<EOI 2>'stdin:5:1: error: single machine manifest expected' == 1 : 1 id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 name: windows_10-msvc_14 summary: Windows 10 build 1607 with VC 14 update 3 -type: kvm : EOI @@ -60,14 +57,6 @@ EOI name: windows EOI - : type - : - $* <<EOI 2>'stdin:3:1: error: machine type redefinition' == 1 - : 1 - type: kvm - type: kvm - EOI - : summary : $* <<EOI 2>'stdin:3:1: error: machine summary redefinition' == 1 @@ -102,13 +91,6 @@ EOI EOI } -: invalid-type -: -$* <<EOI 2>'stdin:2:7: error: invalid machine type' == 1 -: 1 -type: unknown -EOI - : unknown-name : $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in machine manifest" == 1 @@ -121,37 +103,25 @@ EOI { : id : - $* <<EOI 2>'stdin:5:1: error: no machine id specified' == 1 + $* <<EOI 2>'stdin:4:1: error: no machine id specified' == 1 : 1 name: windows - type: kvm summary: Windows EOI : name : - $* <<EOI 2>'stdin:5:1: error: no machine name specified' == 1 + $* <<EOI 2>'stdin:4:1: error: no machine name specified' == 1 : 1 id: 123 - type: kvm - summary: Windows - EOI - - : type - : - $* <<EOI 2>'stdin:5:1: error: no machine type specified' == 1 - : 1 - id: 123 - name: windows summary: Windows EOI : summary : - $* <<EOI 2>'stdin:5:1: error: no machine summary specified' == 1 + $* <<EOI 2>'stdin:4:1: error: no machine summary specified' == 1 : 1 id: 123 name: windows - type: kvm EOI } diff --git a/tests/manifest/task-request.test b/tests/manifest/task-request.test index 2e3fb75..135dc8d 100644 --- a/tests/manifest/task-request.test +++ b/tests/manifest/task-request.test @@ -81,16 +81,3 @@ $* <<EOI 2>'stdin:4:1: error: no task request machines specified' == 1 agent: upsa fingerprint: 1105fb394ee870adb154b7abfbbae5755df7dcef6c81db34e8d1b68d2653734e EOI - -: type-not-allowed -: -$* <<EOI 2>'stdin:7:1: error: machine type not allowed' == 1 -: 1 -agent: upsa -fingerprint: 1105fb394ee870adb154b7abfbbae5755df7dcef6c81db34e8d1b68d2653734e -: -id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -name: windows_10-msvc_14 -type: vm -summary: Windows 10 build 1607 with VC 14 update 3 -EOI |