aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-05-10 18:06:25 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-05-11 13:06:42 +0300
commitb8232e40e605b60234dae7ef92f257bab5c47723 (patch)
tree10325ce36b124a7cff8c46af27129806548517aa
parent463e3454bd8553c8ee26c813a83386beeecb9837 (diff)
Add machine manifest unit test
-rw-r--r--bbot/machine-manifest.cxx4
-rw-r--r--unit-tests/bootstrap-manifest/buildfile2
-rw-r--r--unit-tests/bootstrap-manifest/driver.cxx25
-rw-r--r--unit-tests/bootstrap-manifest/testscript149
-rw-r--r--unit-tests/machine-manifest/buildfile11
-rw-r--r--unit-tests/machine-manifest/driver.cxx62
-rw-r--r--unit-tests/machine-manifest/testscript252
7 files changed, 333 insertions, 172 deletions
diff --git a/bbot/machine-manifest.cxx b/bbot/machine-manifest.cxx
index 3417dd7..7f9a030 100644
--- a/bbot/machine-manifest.cxx
+++ b/bbot/machine-manifest.cxx
@@ -95,6 +95,8 @@ namespace bbot
if (mac)
bad_name ("machine mac redefinition");
+ // @@ Should we check that the value is a valid mac?
+ //
mac = move (v);
}
else if (n == "options")
@@ -245,7 +247,7 @@ namespace bbot
s.next ("", ""); // End of manifest.
}
- // bootstrapped_machine_manifest
+ // bootstrapped_machine_manifest
//
bootstrapped_machine_manifest::
bootstrapped_machine_manifest (parser& p, bool iu)
diff --git a/unit-tests/bootstrap-manifest/buildfile b/unit-tests/bootstrap-manifest/buildfile
index 51e54e3..2d2da8f 100644
--- a/unit-tests/bootstrap-manifest/buildfile
+++ b/unit-tests/bootstrap-manifest/buildfile
@@ -5,7 +5,7 @@
import libs = libbutl%lib{butl}
import libs += libbbot%lib{bbot}
-exe{driver}: cxx{driver} ../../bbot/{hxx cxx}{*-manifest} $libs \
+exe{driver}: cxx{driver} ../../bbot/{hxx cxx}{bootstrap-manifest} $libs \
test{testscript}
include ../../bbot/
diff --git a/unit-tests/bootstrap-manifest/driver.cxx b/unit-tests/bootstrap-manifest/driver.cxx
index f08cbca..a89d516 100644
--- a/unit-tests/bootstrap-manifest/driver.cxx
+++ b/unit-tests/bootstrap-manifest/driver.cxx
@@ -12,43 +12,26 @@
#include <bbot/utility.hxx>
#include <bbot/bootstrap-manifest.hxx>
-#include <bbot/machine-manifest.hxx>
using namespace std;
using namespace butl;
using namespace bbot;
-// Usage: argv[0] (-t|-b|-bm)
+// Usage: argv[0]
//
-// Read and parse manifest from STDIN and serialize it to STDOUT. The
-// following options specify the manifest type.
-//
-// -t parse toolchain manifest
-// -b parse bootstrap manifest
-// -bm parse bootstrapped machine manifest
+// Read and parse bootstrap manifest from STDIN and serialize it to STDOUT.
//
int
-main (int argc, char* argv[])
+main ()
try
{
- assert (argc == 2);
- string opt (argv[1]);
-
cin.exceptions (ios_base::failbit | ios_base::badbit);
cout.exceptions (ios_base::failbit | ios_base::badbit);
manifest_parser p (cin, "stdin");
manifest_serializer s (cout, "stdout");
- if (opt == "-t")
- toolchain_manifest (p).serialize (s);
- else if (opt == "-b")
- bootstrap_manifest (p).serialize (s);
- else if (opt == "-bm")
- bootstrapped_machine_manifest (p).serialize (s);
- else
- assert (false);
-
+ bootstrap_manifest (p).serialize (s);
return 0;
}
catch (const manifest_parsing& e)
diff --git a/unit-tests/bootstrap-manifest/testscript b/unit-tests/bootstrap-manifest/testscript
index e2af360..65f22ef 100644
--- a/unit-tests/bootstrap-manifest/testscript
+++ b/unit-tests/bootstrap-manifest/testscript
@@ -2,37 +2,9 @@
# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
# license : TBC; see accompanying LICENSE file
-: toolchain-manifest
-:
-{
- test.options += -t
-
- : valid
- :
- $* <<EOF >>EOF
- : 1
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- EOF
-
- : no-id
- :
- $* <<EOI 2>'stdin:2:1: error: no toolchain id specified' == 1
- : 1
- EOI
-
- : unknown
- :
- $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in toolchain manifest" == 1
- : 1
- x: y
- EOI
-}
-
: bootstrap-manifest
:
{
- test.options += -b
-
: valid
:
$* <<EOF >>EOF
@@ -69,124 +41,3 @@
x: y
EOI
}
-
-: bootstrapped-machine-manifest
-:
-{
- test.options += -bm
-
- : valid
- :
- {
- : all-values
- :
- $* <<EOF >>EOF
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- type: kvm
- mac: de:ad:be:ef:de:ad
- options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- :
- bbot-version: 1.1.2
- libbbot-version: 1.1.1
- EOF
-
- : no-options
- :
- $* <<EOF >>EOF
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- type: kvm
- mac: de:ad:be:ef:de:ad
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- :
- bbot-version: 1.1.2
- libbbot-version: 1.1.1
- EOF
- }
-
- : unknown
- :
- $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1
- : 1
- x: y
- EOI
-
- : no-machine
- :
- $* <<EOI 2>'stdin:2:1: error: machine manifest expected' == 1
- : 1
- EOI
-
- : no-machine-mac
- :
- $* <<EOI 2>'stdin:2:1: error: mac address must be present in machine manifest' == 1
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- type: kvm
- EOI
-
- : invalid-options
- :
- {
- : unquoted
- :
- $* <<EOI 2>'stdin:6:42: error: invalid machine options: unterminated quoted string' == 1
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- options: -device "virtio-scsi-pci,id=scsi
- EOI
-
- : empty
- :
- $* <<EOI 2>'stdin:6:9: error: empty machine options' == 1
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- options:
- EOI
- }
-
- : no-toolchain
- :
- $* <<EOI 2>'stdin:8:1: error: toolchain manifest expected' == 1
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- type: kvm
- mac: de:ad:be:ef:de:ad
- EOI
-
- : no-bootstrap
- :
- $* <<EOI 2>'stdin:10:1: error: bootstrap manifest expected' == 1
- : 1
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- name: windows_10-msvc_14
- summary: Windows 10 build 1607 with VC 14 update 3
- type: kvm
- mac: de:ad:be:ef:de:ad
- :
- id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- EOI
-}
diff --git a/unit-tests/machine-manifest/buildfile b/unit-tests/machine-manifest/buildfile
new file mode 100644
index 0000000..ae5ffa1
--- /dev/null
+++ b/unit-tests/machine-manifest/buildfile
@@ -0,0 +1,11 @@
+# file : unit-tests/machine-manifest/buildfile
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : TBC; see accompanying LICENSE file
+
+import libs = libbutl%lib{butl}
+import libs += libbbot%lib{bbot}
+
+exe{driver}: cxx{driver} ../../bbot/{hxx cxx}{*-manifest} $libs \
+ test{testscript}
+
+include ../../bbot/
diff --git a/unit-tests/machine-manifest/driver.cxx b/unit-tests/machine-manifest/driver.cxx
new file mode 100644
index 0000000..44b1e36
--- /dev/null
+++ b/unit-tests/machine-manifest/driver.cxx
@@ -0,0 +1,62 @@
+// file : unit-tests/machine-manifest/driver.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+// license : TBC; see accompanying LICENSE file
+
+#include <ios> // ios_base::failbit, ios_base::badbit
+#include <iostream>
+
+#include <libbutl/manifest-parser.hxx>
+#include <libbutl/manifest-serializer.hxx>
+
+#include <bbot/types.hxx>
+#include <bbot/utility.hxx>
+
+#include <bbot/machine-manifest.hxx>
+
+using namespace std;
+using namespace butl;
+using namespace bbot;
+
+// Usage: argv[0] (-m|-t|-bm)
+//
+// Read and parse manifest from STDIN and serialize it to STDOUT. The
+// following options specify the manifest type.
+//
+// -m parse machine manifest
+// -t parse toolchain manifest
+// -bm parse bootstrapped machine manifest
+//
+int
+main (int argc, char* argv[])
+try
+{
+ assert (argc == 2);
+ string opt (argv[1]);
+
+ cin.exceptions (ios_base::failbit | ios_base::badbit);
+ cout.exceptions (ios_base::failbit | ios_base::badbit);
+
+ manifest_parser p (cin, "stdin");
+ manifest_serializer s (cout, "stdout");
+
+ if (opt == "-m")
+ machine_manifest (p).serialize (s);
+ else if (opt == "-t")
+ toolchain_manifest (p).serialize (s);
+ else if (opt == "-bm")
+ bootstrapped_machine_manifest (p).serialize (s);
+ else
+ assert (false);
+
+ return 0;
+}
+catch (const manifest_parsing& e)
+{
+ cerr << e << endl;
+ return 1;
+}
+catch (const manifest_serialization& e)
+{
+ cerr << e << endl;
+ return 1;
+}
diff --git a/unit-tests/machine-manifest/testscript b/unit-tests/machine-manifest/testscript
new file mode 100644
index 0000000..66dedc6
--- /dev/null
+++ b/unit-tests/machine-manifest/testscript
@@ -0,0 +1,252 @@
+# file : unit-tests/machine-manifest/testscript
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : TBC; see accompanying LICENSE file
+
+: machine-manifest
+:
+{
+ test.options += -m
+
+ : valid
+ :
+ {
+ : all-values
+ :
+ $* <<EOF >>EOF
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: kvm
+ mac: de:ad:be:ef:de:ad
+ options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
+ EOF
+
+ : no-options
+ :
+ $* <<EOF >>EOF
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: nspawn
+ mac: de:ad:be:ef:de:ad
+ EOF
+ }
+
+ : redefinition
+ :
+ {
+ : type
+ :
+ $* <<EOI 2>'stdin:6:1: error: machine type redefinition' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: nspawn
+ type: kvm
+ EOI
+
+ : mac
+ :
+ $* <<EOI 2>'stdin:6:1: error: machine mac redefinition' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ mac: de:ad:be:ef:de:ad
+ mac: de:ad:be:ef:de:ad
+ EOI
+
+ : options
+ :
+ $* <<EOI 2>'stdin:6:1: error: machine options redefinition' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
+ options:
+ EOI
+ }
+
+ : invalid
+ :
+ {
+ : type
+ :
+ $* <<EOI 2>'stdin:5:7: error: invalid machine type' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: vmware
+ EOI
+
+ : options
+ :
+ {
+ : empty
+ :
+ $* <<EOI 2>'stdin:5:9: error: empty machine options' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ options:
+ EOI
+
+ : unquoted
+ :
+ $* <<EOI 2>'stdin:5:42: error: invalid machine options: unterminated quoted string' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ options: -device "virtio-scsi-pci,id=scsi
+ EOI
+ }
+ }
+
+ : missed
+ :
+ {
+ : type
+ :
+ $* <<EOI 2>'stdin:5:1: error: no machine type specified' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ EOI
+ }
+
+ : unknown-name
+ :
+ $* <<EOI 2>"stdin:5:1: error: unknown name 'x' in machine manifest" == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ x:
+ EOI
+}
+
+: toolchain-manifest
+:
+{
+ test.options += -t
+
+ : valid
+ :
+ $* <<EOF >>EOF
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ EOF
+
+ : no-id
+ :
+ $* <<EOI 2>'stdin:2:1: error: no toolchain id specified' == 1
+ : 1
+ EOI
+
+ : dup-id
+ :
+ $* <<EOI 2>'stdin:3:1: error: toolchain id redefinition' == 1
+ : 1
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ EOI
+
+ : empty-id
+ :
+ $* <<EOI 2>'stdin:2:4: error: empty toolchain id' == 1
+ : 1
+ id:
+ EOI
+
+ : unknown
+ :
+ $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in toolchain manifest" == 1
+ : 1
+ x: y
+ EOI
+}
+
+: bootstrapped-machine-manifest
+:
+{
+ test.options += -bm
+
+ : valid
+ :
+ {
+ : all-values
+ :
+ $* <<EOF >>EOF
+ : 1
+ :
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: kvm
+ mac: de:ad:be:ef:de:ad
+ :
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ :
+ bbot-version: 1.1.2
+ libbbot-version: 1.1.1
+ EOF
+ }
+
+ : unknown
+ :
+ $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1
+ : 1
+ x: y
+ EOI
+
+ : no-machine
+ :
+ $* <<EOI 2>'stdin:2:1: error: machine manifest expected' == 1
+ : 1
+ EOI
+
+ : no-machine-mac
+ :
+ $* <<EOI 2>'stdin:2:1: error: mac address must be present in machine manifest' == 1
+ : 1
+ :
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: kvm
+ EOI
+
+ : no-toolchain
+ :
+ $* <<EOI 2>'stdin:8:1: error: toolchain manifest expected' == 1
+ : 1
+ :
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: kvm
+ mac: de:ad:be:ef:de:ad
+ EOI
+
+ : no-bootstrap
+ :
+ $* <<EOI 2>'stdin:10:1: error: bootstrap manifest expected' == 1
+ : 1
+ :
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ name: windows_10-msvc_14
+ summary: Windows 10 build 1607 with VC 14 update 3
+ type: kvm
+ mac: de:ad:be:ef:de:ad
+ :
+ id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+ EOI
+}