From b8232e40e605b60234dae7ef92f257bab5c47723 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 10 May 2017 18:06:25 +0300 Subject: Add machine manifest unit test --- bbot/machine-manifest.cxx | 4 +- unit-tests/bootstrap-manifest/buildfile | 2 +- unit-tests/bootstrap-manifest/driver.cxx | 25 +-- unit-tests/bootstrap-manifest/testscript | 149 ------------------ unit-tests/machine-manifest/buildfile | 11 ++ unit-tests/machine-manifest/driver.cxx | 62 ++++++++ unit-tests/machine-manifest/testscript | 252 +++++++++++++++++++++++++++++++ 7 files changed, 333 insertions(+), 172 deletions(-) create mode 100644 unit-tests/machine-manifest/buildfile create mode 100644 unit-tests/machine-manifest/driver.cxx create mode 100644 unit-tests/machine-manifest/testscript 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 #include -#include 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 - : 1 - id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - EOF - - : no-id - : - $* <'stdin:2:1: error: no toolchain id specified' == 1 - : 1 - EOI - - : unknown - : - $* <"stdin:2:1: error: unknown name 'x' in toolchain manifest" == 1 - : 1 - x: y - EOI -} - : bootstrap-manifest : { - test.options += -b - : valid : $* <>EOF @@ -69,124 +41,3 @@ x: y EOI } - -: bootstrapped-machine-manifest -: -{ - test.options += -bm - - : valid - : - { - : all-values - : - $* <>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 - : 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 - : - $* <"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1 - : 1 - x: y - EOI - - : no-machine - : - $* <'stdin:2:1: error: machine manifest expected' == 1 - : 1 - EOI - - : no-machine-mac - : - $* <'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 - : - $* <'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 - : - $* <'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 - : - $* <'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 - : - $* <'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_base::failbit, ios_base::badbit +#include + +#include +#include + +#include +#include + +#include + +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 + : 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 + : 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 + : + $* <'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 + : + $* <'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 + : + $* <'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 + : + $* <'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 + : + $* <'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 + : + $* <'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 + : + $* <'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 + : + $* <"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 + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + EOF + + : no-id + : + $* <'stdin:2:1: error: no toolchain id specified' == 1 + : 1 + EOI + + : dup-id + : + $* <'stdin:3:1: error: toolchain id redefinition' == 1 + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + EOI + + : empty-id + : + $* <'stdin:2:4: error: empty toolchain id' == 1 + : 1 + id: + EOI + + : unknown + : + $* <"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 + : 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 + : + $* <"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1 + : 1 + x: y + EOI + + : no-machine + : + $* <'stdin:2:1: error: machine manifest expected' == 1 + : 1 + EOI + + : no-machine-mac + : + $* <'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 + : + $* <'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 + : + $* <'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 +} -- cgit v1.1