aboutsummaryrefslogtreecommitdiff
path: root/bbot
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2019-03-06 16:30:31 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2019-03-08 17:04:08 +0300
commitd3a0e798e5af401b78ecbfb550cb6eabc825df44 (patch)
tree6c5fb15591a46664dd6df769e10060de49477147 /bbot
parent77c639f4db23b554c7d453dcfd012e7dfbc3dea6 (diff)
Use new setup for unit tests
Diffstat (limited to 'bbot')
-rw-r--r--bbot/.gitignore7
-rw-r--r--bbot/bootstrap-manifest.test.cxx46
-rw-r--r--bbot/bootstrap-manifest.test.testscript43
-rw-r--r--bbot/buildfile43
-rw-r--r--bbot/machine-manifest.test.cxx62
-rw-r--r--bbot/machine-manifest.test.testscript312
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
+}