aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-04-10 13:17:22 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-04-10 13:17:22 +0200
commitf5a74f868477c484a58f9deb7435afa88efaefa0 (patch)
tree1f48ba750354c6cce0676054da60d6d19ede1f8b
parent294058e21e33c7bfbb852f8f1a73b1555aa3eace (diff)
Split machine_manifest into machine_header_manifest and machine_manifest
-rw-r--r--bbot/manifest26
-rw-r--r--bbot/manifest.cxx78
-rw-r--r--tests/manifest/driver.cxx4
-rw-r--r--tests/manifest/machine-header.test (renamed from tests/manifest/machine.test)42
-rw-r--r--tests/manifest/task-request.test13
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