From f5a74f868477c484a58f9deb7435afa88efaefa0 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 10 Apr 2017 13:17:22 +0200 Subject: Split machine_manifest into machine_header_manifest and machine_manifest --- bbot/manifest | 26 +++--- bbot/manifest.cxx | 78 +++--------------- tests/manifest/driver.cxx | 4 +- tests/manifest/machine-header.test | 127 ++++++++++++++++++++++++++++++ tests/manifest/machine.test | 157 ------------------------------------- tests/manifest/task-request.test | 13 --- 6 files changed, 152 insertions(+), 253 deletions(-) create mode 100644 tests/manifest/machine-header.test delete mode 100644 tests/manifest/machine.test 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 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; + using machine_header_manifests = std::vector; 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-header.test b/tests/manifest/machine-header.test new file mode 100644 index 0000000..051f62f --- /dev/null +++ b/tests/manifest/machine-header.test @@ -0,0 +1,127 @@ +# file : tests/manifest/machine-header.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +test.options += -m + +: valid +: +: Roundtrip the machine header manifest. +: +{ + : kvm + : + $* <>EOF + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + EOF + + : nspawn + : + $* <>EOF + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + EOF +} + +: multiple +: +$* <'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 +: +EOI + +: redefinition +: +{ + : id + : + $* <'stdin:3:1: error: machine id redefinition' == 1 + : 1 + id: 123 + id: 123 + EOI + + : name + : + $* <'stdin:3:1: error: machine name redefinition' == 1 + : 1 + name: windows + name: windows + EOI + + : summary + : + $* <'stdin:3:1: error: machine summary redefinition' == 1 + : 1 + summary: Windows + summary: Windows + EOI +} + +: empty +: +{ + : id + : + $* <'stdin:2:4: error: empty machine id' == 1 + : 1 + id: + EOI + + : name + : + $* <'stdin:2:6: error: empty machine name' == 1 + : 1 + name: + EOI + + : summary + : + $* <'stdin:2:9: error: empty machine summary' == 1 + : 1 + summary: + EOI +} + +: unknown-name +: +$* <"stdin:2:1: error: unknown name 'x' in machine manifest" == 1 +: 1 +x: +EOI + +: missed +: +{ + : id + : + $* <'stdin:4:1: error: no machine id specified' == 1 + : 1 + name: windows + summary: Windows + EOI + + : name + : + $* <'stdin:4:1: error: no machine name specified' == 1 + : 1 + id: 123 + summary: Windows + EOI + + : summary + : + $* <'stdin:4:1: error: no machine summary specified' == 1 + : 1 + id: 123 + name: windows + EOI +} diff --git a/tests/manifest/machine.test b/tests/manifest/machine.test deleted file mode 100644 index 96619f9..0000000 --- a/tests/manifest/machine.test +++ /dev/null @@ -1,157 +0,0 @@ -# file : tests/manifest/machine.test -# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -test.options += -m - -: valid -: -: Roundtrip the machine manifest. -: -{ - : kvm - : - $* <>EOF - : 1 - id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - name: windows_10-msvc_14 - summary: Windows 10 build 1607 with VC 14 update 3 - type: kvm - EOF - - : nspawn - : - $* <>EOF - : 1 - id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - name: windows_10-msvc_14 - summary: Windows 10 build 1607 with VC 14 update 3 - type: nspawn - EOF -} - -: multiple -: -$* <'stdin:6: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 - -: redefinition -: -{ - : id - : - $* <'stdin:3:1: error: machine id redefinition' == 1 - : 1 - id: 123 - id: 123 - EOI - - : name - : - $* <'stdin:3:1: error: machine name redefinition' == 1 - : 1 - name: windows - name: windows - EOI - - : type - : - $* <'stdin:3:1: error: machine type redefinition' == 1 - : 1 - type: kvm - type: kvm - EOI - - : summary - : - $* <'stdin:3:1: error: machine summary redefinition' == 1 - : 1 - summary: Windows - summary: Windows - EOI -} - -: empty -: -{ - : id - : - $* <'stdin:2:4: error: empty machine id' == 1 - : 1 - id: - EOI - - : name - : - $* <'stdin:2:6: error: empty machine name' == 1 - : 1 - name: - EOI - - : summary - : - $* <'stdin:2:9: error: empty machine summary' == 1 - : 1 - summary: - EOI -} - -: invalid-type -: -$* <'stdin:2:7: error: invalid machine type' == 1 -: 1 -type: unknown -EOI - -: unknown-name -: -$* <"stdin:2:1: error: unknown name 'x' in machine manifest" == 1 -: 1 -x: -EOI - -: missed -: -{ - : id - : - $* <'stdin:5:1: error: no machine id specified' == 1 - : 1 - name: windows - type: kvm - summary: Windows - EOI - - : name - : - $* <'stdin:5:1: error: no machine name specified' == 1 - : 1 - id: 123 - type: kvm - summary: Windows - EOI - - : type - : - $* <'stdin:5:1: error: no machine type specified' == 1 - : 1 - id: 123 - name: windows - summary: Windows - EOI - - : summary - : - $* <'stdin:5: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 @@ $* <'stdin:4:1: error: no task request machines specified' == 1 agent: upsa fingerprint: 1105fb394ee870adb154b7abfbbae5755df7dcef6c81db34e8d1b68d2653734e EOI - -: type-not-allowed -: -$* <'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 -- cgit v1.1