aboutsummaryrefslogtreecommitdiff
path: root/tests/ci
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-08-31 21:41:53 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-09-01 18:36:07 +0300
commitb1888e516c9c9d750726318227bf69856ec91b8b (patch)
tree446fa1cdd1a9a9bf1827eba2a4f5bac7876f65ad /tests/ci
parentd22f466823192963c22eb8f51ae930cb5af8fa9a (diff)
Add ci-load
Diffstat (limited to 'tests/ci')
-rw-r--r--tests/ci/8716f424-fd94-4def-9e2e-687203bbf4ad/request.manifest7
-rw-r--r--tests/ci/README11
-rw-r--r--tests/ci/buildfile6
-rw-r--r--tests/ci/ci-dir.test19
-rw-r--r--tests/ci/ci-load.test141
-rw-r--r--tests/ci/data.test32
6 files changed, 195 insertions, 21 deletions
diff --git a/tests/ci/8716f424-fd94-4def-9e2e-687203bbf4ad/request.manifest b/tests/ci/8716f424-fd94-4def-9e2e-687203bbf4ad/request.manifest
new file mode 100644
index 0000000..3ef553a
--- /dev/null
+++ b/tests/ci/8716f424-fd94-4def-9e2e-687203bbf4ad/request.manifest
@@ -0,0 +1,7 @@
+: 1
+id: 8716f424-fd94-4def-9e2e-687203bbf4ad
+repository: https://git.build2.org/hello/hello.git#master
+package: hello
+timestamp: 2018-09-01T08:38:55Z
+client-ip: fe80::56e1:adff:fe83:82f5
+user-agent: curl/7.59.0
diff --git a/tests/ci/README b/tests/ci/README
new file mode 100644
index 0000000..14defe5
--- /dev/null
+++ b/tests/ci/README
@@ -0,0 +1,11 @@
+Prepare the test data with the following instructions.
+
+Locally run brep server configured to use ci-dir handler.
+
+$ curl \
+--form-string repository=https://git.build2.org/hello/hello.git#master \
+--form-string package=hello \
+http://localhost/pkg?ci
+
+Replace the submission data directory in brep/tests/ci/ with the one produced
+with the above command, removing all files it contains except request.manifest.
diff --git a/tests/ci/buildfile b/tests/ci/buildfile
index b1c3146..1e085e0 100644
--- a/tests/ci/buildfile
+++ b/tests/ci/buildfile
@@ -11,6 +11,8 @@ include $dir
commons = data
-./: test{* -{$commons}} common{$commons} $dir/exe{brep-ci-dir}
+./: test{* -{$commons}} common{$commons} \
+ $dir/exe{brep-ci-dir} $dir/exe{brep-ci-load}
-test{ci-dir}@./: test = $out_base/$dir/brep-ci-dir
+test{ci-dir}@./: test = $out_base/$dir/brep-ci-dir
+test{ci-load}@./: test = $out_base/$dir/brep-ci-load
diff --git a/tests/ci/ci-dir.test b/tests/ci/ci-dir.test
index 0e98f3a..11de2f0 100644
--- a/tests/ci/ci-dir.test
+++ b/tests/ci/ci-dir.test
@@ -12,7 +12,7 @@
%\[.+\] \[brep:error\] \[ref \] \[brep-ci-dir\]: usage: .+brep-ci-dir <dir>%
EOE
- : not-exist
+ : dir-not-exist
:
$* $~/dir 2>>~%EOE% != 0
%\[.+\] \[brep:error\] \[ref dir\] \[brep-ci-dir\]: '.+dir' does not exist or is not a directory%
@@ -74,4 +74,21 @@
reference: $request_id
EOO
}
+
+ : unable-fetch-repo
+ :
+ {
+ $clone_root_data_clean;
+
+ sed -i -e "s%^\(repository:\) .+\$%\\1 http://example.com/repo.git%" \
+ $data_dir/request.manifest;
+
+ $* >>~"%EOO%"
+ : 1
+ status: 422
+ %message: unable to fetch repository information .+%
+ %.*
+ reference: $request_id
+ EOO
+ }
}
diff --git a/tests/ci/ci-load.test b/tests/ci/ci-load.test
new file mode 100644
index 0000000..c4a4c62
--- /dev/null
+++ b/tests/ci/ci-load.test
@@ -0,0 +1,141 @@
+# file : tests/ci/ci-load.test
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include data.test
+
+: args
+{
+ : none
+ :
+ $* 2>>~%EOE% != 0
+ %\[.+\] \[brep:error\] \[ref \] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url <url>\] <loader-path> \[<loader-options>\] <dir>%
+ EOE
+
+ : no-dir
+ :
+ $* brep-load 2>>~%EOE% != 0
+ %\[.+\] \[brep:error\] \[ref brep-load\] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url <url>\] <loader-path> \[<loader-options>\] <dir>%
+ EOE
+
+ : dir-not-exist
+ :
+ $* brep-load $~/dir 2>>~%EOE% != 0
+ %\[.+\] \[brep:error\] \[ref dir\] \[brep-ci-load\]: '.+dir' does not exist or is not a directory%
+ EOE
+}
+
+: success
+:
+{
+ : simulate
+ :
+ {
+ $clone_root_data;
+
+ echo 'simulate: success' >+$data_dir/request.manifest;
+
+ $* ./brep-load $data_dir >>"EOO";
+ : 1
+ status: 200
+ message: CI request is queued
+ reference: $request_id
+ EOO
+
+ test -d $data_dir != 0
+ }
+
+ : for-real
+ :
+ {
+ # Create the loader script that validates the arguments passed and the
+ # files produced by the handler.
+ #
+ loader=$~/brep-load
+
+ cat <<"EOI" >=$loader;
+ #!/usr/bin/env bash
+ if [ "\$#" != 5 -o \
+ "\$1" != "--db-host=localhost" -o \
+ "\$2" != "--db-port=8432" -o \
+ "\$3" != "--force" -o \
+ "\$4" != "--shallow" -o \
+ "\$5" != "$data_dir/loadtab" -o \
+ ! -f "$data_dir/cache/repositories.manifest" -o \
+ ! -f "$data_dir/cache/packages.manifest" ]; then
+ exit 1
+ fi
+ if ! diff "$data_dir/loadtab" - <<<"https://git.build2.org/hello/hello.git#master hello cache:cache"; then
+ exit 1
+ fi
+ EOI
+
+ chmod 755 $loader;
+
+ $clone_root_data;
+
+ $* $loader --db-host=localhost --db-port=8432 $data_dir >>"EOO"
+ : 1
+ status: 200
+ message: CI request is queued
+ reference: $request_id
+ EOO
+
+ $clone_root_data;
+
+ $* --result-url "http://example.com/" \
+ $loader --db-host=localhost --db-port=8432 \
+ $data_dir >>"EOO"
+ : 1
+ status: 200
+ message: CI request is queued: http://example.com
+ reference: $request_id
+ EOO
+ }
+}
+
+: failure
+:
+{
+ test.arguments += ./brep-load $data_dir
+
+ : bad-simulate
+ :
+ {
+ $clone_root_data_clean;
+
+ echo 'simulate: fly' >+$data_dir/request.manifest;
+
+ $* >>"EOO"
+ : 1
+ status: 400
+ message: unrecognized simulation outcome 'fly'
+ reference: $request_id
+ EOO
+ }
+
+ : unable-fetch-repo
+ :
+ {
+ $clone_root_data_clean;
+
+ sed -i -e "s%^\(repository:\) .+\$%\\1 http://example.com/repo.git%" \
+ $data_dir/request.manifest;
+
+ $* >>~"%EOO%"
+ : 1
+ status: 422
+ %message: unable to fetch repository information .+%
+ %.*
+ reference: $request_id
+ EOO
+ }
+
+ : loader-not-exist
+ :
+ {
+ $clone_root_data_clean;
+
+ $* 2>~'%.*brep-load.*%' != 0
+ }
+}
diff --git a/tests/ci/data.test b/tests/ci/data.test
index c30a691..19383b1 100644
--- a/tests/ci/data.test
+++ b/tests/ci/data.test
@@ -2,28 +2,24 @@
# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
# license : MIT; see accompanying LICENSE file
-# Pre-created CI request submission data directory that will be copied by
-# subsequent tests and scope setup commands. The common approach will be that
-# group scopes copy and modify the parent scope submission directory as
-# required by the nested tests and scopes. Tests will also clone the parent
-# scope submission data directory to optionally modify it, use and cleanup at
-# the end. Note that configuration can not be shared between multiple
-# submission handler processes. Also we need to make sure that submission data
+# Pre-created CI request data directory that will be copied by subsequent
+# tests and scope setup commands. The common approach will be that group
+# scopes copy and modify the parent scope submission directory as required
+# by the nested tests and scopes. Tests will also clone the parent scope
+# submission data directory to optionally modify it, use and cleanup at the
+# end. Note that configuration can not be shared between multiple submission
+# handler processes. Also we need to make sure that submission data
# directories are not cloned while being used by submission handler scripts.
#
-request_id = 4cfa00ec-8459-4f4f-9ef0-8883ddcc4f5b
-data_dir = $request_id/
+data_dir = $regex.replace($path_search('*/request.manifest', $src_base), \
+ '(.*)/.*', \
+ '\1')
-+mkdir $data_dir
+request_id = "$data_dir"
-+cat <<"EOI" >=$data_dir/request.manifest
- : 1
- id: $request_id
- repository: https://example.com/hello.git#master
- package: foo
- package: bar/1.0
- timestamp: 2018-08-24T18:08:01Z
- EOI
+# Copy the original CI request data directory to the root scope.
+#
++cp -r $src_base/$data_dir ./
root_data_dir = $~/$data_dir