diff options
Diffstat (limited to 'bbot')
-rw-r--r-- | bbot/.gitignore | 7 | ||||
-rw-r--r-- | bbot/bootstrap-manifest.test.cxx | 46 | ||||
-rw-r--r-- | bbot/bootstrap-manifest.test.testscript | 43 | ||||
-rw-r--r-- | bbot/buildfile | 43 | ||||
-rw-r--r-- | bbot/machine-manifest.test.cxx | 62 | ||||
-rw-r--r-- | bbot/machine-manifest.test.testscript | 312 |
6 files changed, 504 insertions, 9 deletions
diff --git a/bbot/.gitignore b/bbot/.gitignore index e7ffd50..bed4dc1 100644 --- a/bbot/.gitignore +++ b/bbot/.gitignore @@ -1,4 +1,9 @@ -*-options.?xx bbot-agent bbot-worker +*.test +*-options.?xx version.hxx + +# Testscript output directory (can be symlink). +# +test-*.test diff --git a/bbot/bootstrap-manifest.test.cxx b/bbot/bootstrap-manifest.test.cxx new file mode 100644 index 0000000..da41fd7 --- /dev/null +++ b/bbot/bootstrap-manifest.test.cxx @@ -0,0 +1,46 @@ +// file : bbot/bootstrap-manifest.test.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd +// license : TBC; see accompanying LICENSE file + +#include <ios> // ios_base::failbit, ios_base::badbit +#include <iostream> + +#include <libbutl/manifest-parser.mxx> +#include <libbutl/manifest-serializer.mxx> + +#include <bbot/types.hxx> +#include <bbot/utility.hxx> + +#include <bbot/bootstrap-manifest.hxx> + +using namespace std; +using namespace butl; +using namespace bbot; + +// Usage: argv[0] +// +// Read and parse bootstrap manifest from STDIN and serialize it to STDOUT. +// +int +main () +try +{ + 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"); + + bootstrap_manifest (p).serialize (s); + 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/bbot/bootstrap-manifest.test.testscript b/bbot/bootstrap-manifest.test.testscript new file mode 100644 index 0000000..626497c --- /dev/null +++ b/bbot/bootstrap-manifest.test.testscript @@ -0,0 +1,43 @@ +# file : bbot/bootstrap-manifest.test.testscript +# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd +# license : TBC; see accompanying LICENSE file + +: bootstrap-manifest +: +{ + : valid + : + $* <<EOF >>EOF + : 1 + bbot-version: 1.1.2 + libbbot-version: 1.1.1 + EOF + + : dup + : + $* <<EOI 2>'stdin:3:1: error: bbot-version redefinition' == 1 + : 1 + bbot-version: 1.1.2 + bbot-version: 1.1.3 + EOI + + : invalid-version + : + $* <<EOI 2>'stdin:2:15: error: invalid package version: invalid major version' == 1 + : 1 + bbot-version: abc + EOI + + : no-versions + : + $* <<EOI 2>'stdin:2:1: error: no package versions specified' == 1 + : 1 + EOI + + : unknown + : + $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in bootstrap manifest" == 1 + : 1 + x: y + EOI +} diff --git a/bbot/buildfile b/bbot/buildfile index dbb32c6..3925585 100644 --- a/bbot/buildfile +++ b/bbot/buildfile @@ -28,22 +28,49 @@ if ($cxx.target.class == "linux") { ./: exe{bbot-agent} service{'bbot-agent@'} - exe{bbot-agent}: agent/{hxx ixx txx cxx}{* -agent-options} \ - agent/{hxx ixx cxx}{agent-options} libue{bbot} + exe{bbot-agent}: agent/cxx{agent} agent/libue{bbot} + + agent/ + { + libue{bbot}: {hxx ixx txx cxx}{* -agent -agent-options -*.test...} \ + {hxx ixx cxx}{agent-options} \ + ../libue{bbot} + } } -./: exe{bbot-worker} +./: exe{bbot-worker}: worker/cxx{worker} worker/libue{bbot} -exe{bbot-worker}: worker/{hxx ixx txx cxx}{* -worker-options} \ - worker/{hxx ixx cxx}{worker-options} libue{bbot} + worker/ +{ + libue{bbot}: {hxx ixx txx cxx}{* -worker -worker-options -*.test...} \ + {hxx ixx cxx}{worker-options} \ + ../libue{bbot} +} -libue{bbot}: bin.whole = false -libue{bbot}: {hxx ixx txx cxx}{* -common-options -version} \ - {hxx ixx cxx}{common-options} {hxx}{version} \ +libue{bbot}: {hxx ixx txx cxx}{* -common-options -version -*.test...} \ + {hxx ixx cxx}{common-options} \ + {hxx}{version} \ $libs hxx{version}: in{version} $src_root/manifest +# Unit tests. +# +exe{*.test}: +{ + test = true + install = false +} + +for t: cxx{**.test...} +{ + d = $directory($t) + n = $name($t)... + + ./: $d/exe{$n}: $t $d/{hxx ixx txx}{+$n} $d/testscript{+$n} + $d/exe{$n}: $d/libue{bbot}: bin.whole = false +} + # Generated options parser. # if $cli.configured diff --git a/bbot/machine-manifest.test.cxx b/bbot/machine-manifest.test.cxx new file mode 100644 index 0000000..c1287dc --- /dev/null +++ b/bbot/machine-manifest.test.cxx @@ -0,0 +1,62 @@ +// file : bbot/machine-manifest.test.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd +// license : TBC; see accompanying LICENSE file + +#include <ios> // ios_base::failbit, ios_base::badbit +#include <iostream> + +#include <libbutl/manifest-parser.mxx> +#include <libbutl/manifest-serializer.mxx> + +#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/bbot/machine-manifest.test.testscript b/bbot/machine-manifest.test.testscript new file mode 100644 index 0000000..fe8c59a --- /dev/null +++ b/bbot/machine-manifest.test.testscript @@ -0,0 +1,312 @@ +# file : bbot/machine-manifest.test.testscript +# copyright : Copyright (c) 2014-2019 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" + changes: \ + 0.7.0 + - mac is changed to de:ad:be:ef:de:ad + - increased disk size to 30GB + \ + EOF + + : multi-line-options + : + $* <<EOI >>EOO + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + type: kvm + options: \ + -device "virtio-scsi-pci,id=scsi" + -device "scsi-hd,drive=disk0" + \ + EOI + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + type: kvm + options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0" + EOO + + : no-mac + : + $* <<EOF >>EOF + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + type: nspawn + 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 + + : unquoted-multi-line + : + $* <<EOI 2>'stdin:7:29: 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" + -device "scsi-hd,drive=disk0 + \ + EOI + } + + : changes + : + $* <<EOI 2>'stdin:5:9: error: empty machine changes' == 1 + : 1 + id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + name: windows_10-msvc_14 + summary: Windows 10 build 1607 with VC 14 update 3 + changes: + 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 +} |