From c11b9b69bcf161658275876d2fd991cc5c103d64 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 4 Sep 2018 14:58:18 +0300 Subject: Rename .test/test{} to .testscript/testscript{} --- tests/ci/buildfile | 8 +- tests/ci/ci-dir.test | 94 ---- tests/ci/ci-dir.testscript | 94 ++++ tests/ci/ci-load.test | 141 ------ tests/ci/ci-load.testscript | 141 ++++++ tests/ci/data.test | 35 -- tests/ci/data.testscript | 35 ++ tests/submit/buildfile | 8 +- tests/submit/data.test | 35 -- tests/submit/data.testscript | 35 ++ tests/submit/submit-dir.test | 92 ---- tests/submit/submit-dir.testscript | 92 ++++ tests/submit/submit-git.test | 954 ------------------------------------- tests/submit/submit-git.testscript | 954 +++++++++++++++++++++++++++++++++++++ 14 files changed, 1359 insertions(+), 1359 deletions(-) delete mode 100644 tests/ci/ci-dir.test create mode 100644 tests/ci/ci-dir.testscript delete mode 100644 tests/ci/ci-load.test create mode 100644 tests/ci/ci-load.testscript delete mode 100644 tests/ci/data.test create mode 100644 tests/ci/data.testscript delete mode 100644 tests/submit/data.test create mode 100644 tests/submit/data.testscript delete mode 100644 tests/submit/submit-dir.test create mode 100644 tests/submit/submit-dir.testscript delete mode 100644 tests/submit/submit-git.test create mode 100644 tests/submit/submit-git.testscript (limited to 'tests') diff --git a/tests/ci/buildfile b/tests/ci/buildfile index 1e085e0..95a1d6b 100644 --- a/tests/ci/buildfile +++ b/tests/ci/buildfile @@ -3,7 +3,7 @@ # license : MIT; see accompanying LICENSE file define common: file -common{*}: extension = test +common{*}: extension = testscript dir = ../../brep/handler/ci/ @@ -11,8 +11,8 @@ include $dir commons = data -./: test{* -{$commons}} common{$commons} \ +./: testscript{* -{$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-load}@./: test = $out_base/$dir/brep-ci-load +testscript{ci-dir}@./: test = $out_base/$dir/brep-ci-dir +testscript{ci-load}@./: test = $out_base/$dir/brep-ci-load diff --git a/tests/ci/ci-dir.test b/tests/ci/ci-dir.test deleted file mode 100644 index 11de2f0..0000000 --- a/tests/ci/ci-dir.test +++ /dev/null @@ -1,94 +0,0 @@ -# file : tests/ci/ci-dir.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-dir\]: usage: .+brep-ci-dir % - EOE - - : dir-not-exist - : - $* $~/dir 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref dir\] \[brep-ci-dir\]: '.+dir' does not exist or is not a directory% - EOE -} - -: success -: -{ - test.arguments += $data_dir - - : simulate - : - { - $clone_root_data; - - echo 'simulate: success' >+$data_dir/request.manifest; - - $* >>"EOO"; - : 1 - status: 200 - message: CI request is queued - reference: $request_id - EOO - - test -d $data_dir != 0 - } - - : for-real - : - { - $clone_root_data_clean; - - $* >>"EOO" - : 1 - status: 200 - message: CI request is queued - reference: $request_id - EOO - } -} - -: failure -: -{ - test.arguments += $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 - } -} diff --git a/tests/ci/ci-dir.testscript b/tests/ci/ci-dir.testscript new file mode 100644 index 0000000..8388616 --- /dev/null +++ b/tests/ci/ci-dir.testscript @@ -0,0 +1,94 @@ +# file : tests/ci/ci-dir.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include data.testscript + +: args +{ + : none + : + $* 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref \] \[brep-ci-dir\]: usage: .+brep-ci-dir % + EOE + + : dir-not-exist + : + $* $~/dir 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref dir\] \[brep-ci-dir\]: '.+dir' does not exist or is not a directory% + EOE +} + +: success +: +{ + test.arguments += $data_dir + + : simulate + : + { + $clone_root_data; + + echo 'simulate: success' >+$data_dir/request.manifest; + + $* >>"EOO"; + : 1 + status: 200 + message: CI request is queued + reference: $request_id + EOO + + test -d $data_dir != 0 + } + + : for-real + : + { + $clone_root_data_clean; + + $* >>"EOO" + : 1 + status: 200 + message: CI request is queued + reference: $request_id + EOO + } +} + +: failure +: +{ + test.arguments += $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 + } +} diff --git a/tests/ci/ci-load.test b/tests/ci/ci-load.test deleted file mode 100644 index c4a4c62..0000000 --- a/tests/ci/ci-load.test +++ /dev/null @@ -1,141 +0,0 @@ -# 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 \] \[\] % - EOE - - : no-dir - : - $* brep-load 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref brep-load\] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url \] \[\] % - 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/ci-load.testscript b/tests/ci/ci-load.testscript new file mode 100644 index 0000000..de23b79 --- /dev/null +++ b/tests/ci/ci-load.testscript @@ -0,0 +1,141 @@ +# file : tests/ci/ci-load.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include data.testscript + +: args +{ + : none + : + $* 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref \] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url \] \[\] % + EOE + + : no-dir + : + $* brep-load 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref brep-load\] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url \] \[\] % + 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 deleted file mode 100644 index 19383b1..0000000 --- a/tests/ci/data.test +++ /dev/null @@ -1,35 +0,0 @@ -# file : tests/ci/data.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -# 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. -# -data_dir = $regex.replace($path_search('*/request.manifest', $src_base), \ - '(.*)/.*', \ - '\1') - -request_id = "$data_dir" - -# Copy the original CI request data directory to the root scope. -# -+cp -r $src_base/$data_dir ./ - -root_data_dir = $~/$data_dir - -# The most commonly used submission data directory cloning command that copies -# it from the parent scope working directory. -# -clone_data = cp --no-cleanup -r ../$data_dir ./ -clone_data_clean = cp --no-cleanup -r ../$data_dir ./ &$data_dir/*** - -# Clones the original submission data directory. -# -clone_root_data = cp --no-cleanup -r $root_data_dir ./ -clone_root_data_clean = cp --no-cleanup -r $root_data_dir ./ &$data_dir/*** diff --git a/tests/ci/data.testscript b/tests/ci/data.testscript new file mode 100644 index 0000000..711c7b1 --- /dev/null +++ b/tests/ci/data.testscript @@ -0,0 +1,35 @@ +# file : tests/ci/data.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# 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. +# +data_dir = $regex.replace($path_search('*/request.manifest', $src_base), \ + '(.*)/.*', \ + '\1') + +request_id = "$data_dir" + +# Copy the original CI request data directory to the root scope. +# ++cp -r $src_base/$data_dir ./ + +root_data_dir = $~/$data_dir + +# The most commonly used submission data directory cloning command that copies +# it from the parent scope working directory. +# +clone_data = cp --no-cleanup -r ../$data_dir ./ +clone_data_clean = cp --no-cleanup -r ../$data_dir ./ &$data_dir/*** + +# Clones the original submission data directory. +# +clone_root_data = cp --no-cleanup -r $root_data_dir ./ +clone_root_data_clean = cp --no-cleanup -r $root_data_dir ./ &$data_dir/*** diff --git a/tests/submit/buildfile b/tests/submit/buildfile index 32bb44e..91a8881 100644 --- a/tests/submit/buildfile +++ b/tests/submit/buildfile @@ -3,7 +3,7 @@ # license : MIT; see accompanying LICENSE file define common: file -common{*}: extension = test +common{*}: extension = testscript dir = ../../brep/handler/submit/ @@ -11,8 +11,8 @@ include $dir commons = data -./: test{* -{$commons}} common{$commons} {*/ -test/}{**} \ +./: testscript{* -{$commons}} common{$commons} {*/ -test/}{**} \ $dir/exe{brep-submit-dir} $dir/exe{brep-submit-git} -test{submit-dir}@./: test = $out_base/$dir/brep-submit-dir -test{submit-git}@./: test = $out_base/$dir/brep-submit-git +testscript{submit-dir}@./: test = $out_base/$dir/brep-submit-dir +testscript{submit-git}@./: test = $out_base/$dir/brep-submit-git diff --git a/tests/submit/data.test b/tests/submit/data.test deleted file mode 100644 index 938d6b8..0000000 --- a/tests/submit/data.test +++ /dev/null @@ -1,35 +0,0 @@ -# file : tests/submit/data.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -# Pre-created 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 -# directories are not cloned while being used by submission handler scripts. -# -data_dir = $regex.replace($path_search('*/request.manifest', $src_base), \ - '(.*)/.*', \ - '\1') - -checksum = "$data_dir" - -# Copy the original submission data directory to the root scope. -# -+cp -r $src_base/$data_dir ./ - -root_data_dir = $~/$data_dir - -# The most commonly used submission data directory cloning command that copies -# it from the parent scope working directory. -# -clone_data = cp --no-cleanup -r ../$data_dir ./ -clone_data_clean = cp --no-cleanup -r ../$data_dir ./ &$data_dir/*** - -# Clones the original submission data directory. -# -clone_root_data = cp --no-cleanup -r $root_data_dir ./ -clone_root_data_clean = cp --no-cleanup -r $root_data_dir ./ &$data_dir/*** diff --git a/tests/submit/data.testscript b/tests/submit/data.testscript new file mode 100644 index 0000000..0be9ffa --- /dev/null +++ b/tests/submit/data.testscript @@ -0,0 +1,35 @@ +# file : tests/submit/data.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Pre-created 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 +# directories are not cloned while being used by submission handler scripts. +# +data_dir = $regex.replace($path_search('*/request.manifest', $src_base), \ + '(.*)/.*', \ + '\1') + +checksum = "$data_dir" + +# Copy the original submission data directory to the root scope. +# ++cp -r $src_base/$data_dir ./ + +root_data_dir = $~/$data_dir + +# The most commonly used submission data directory cloning command that copies +# it from the parent scope working directory. +# +clone_data = cp --no-cleanup -r ../$data_dir ./ +clone_data_clean = cp --no-cleanup -r ../$data_dir ./ &$data_dir/*** + +# Clones the original submission data directory. +# +clone_root_data = cp --no-cleanup -r $root_data_dir ./ +clone_root_data_clean = cp --no-cleanup -r $root_data_dir ./ &$data_dir/*** diff --git a/tests/submit/submit-dir.test b/tests/submit/submit-dir.test deleted file mode 100644 index 821898e..0000000 --- a/tests/submit/submit-dir.test +++ /dev/null @@ -1,92 +0,0 @@ -# file : tests/submit/submit-dir.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-submit-dir\]: usage: .+brep-submit-dir % - EOE - - : dir-not-exist - : - $* $~/dir 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-dir\]: '.+dir' does not exist or is not a directory% - EOE -} - -: success -: -{ - test.arguments += $data_dir - - : simulate - : - { - $clone_root_data; - - echo 'simulate: success' >+$data_dir/request.manifest; - - $* >>"EOO"; - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - - test -d $data_dir != 0 - } - - : for-real - : - { - $clone_root_data_clean; - - $* >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } -} - -: failure -: -{ - test.arguments += $data_dir - - : bad-archive - : - { - $clone_root_data_clean; - - echo 'junk' >=$data_dir/libhello-0.1.0.tar.gz; - - $* >>"EOO" - : 1 - status: 400 - message: archive is not a valid package \(run bpkg pkg-verify for details\) - reference: $checksum - EOO - } - - : bad-simulate - : - { - $clone_root_data_clean; - - echo 'simulate: fly' >+$data_dir/request.manifest; - - $* >>"EOO" - : 1 - status: 400 - message: unrecognized simulation outcome 'fly' - reference: $checksum - EOO - } -} diff --git a/tests/submit/submit-dir.testscript b/tests/submit/submit-dir.testscript new file mode 100644 index 0000000..595792d --- /dev/null +++ b/tests/submit/submit-dir.testscript @@ -0,0 +1,92 @@ +# file : tests/submit/submit-dir.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include data.testscript + +: args +{ + : none + : + $* 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref \] \[brep-submit-dir\]: usage: .+brep-submit-dir % + EOE + + : dir-not-exist + : + $* $~/dir 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-dir\]: '.+dir' does not exist or is not a directory% + EOE +} + +: success +: +{ + test.arguments += $data_dir + + : simulate + : + { + $clone_root_data; + + echo 'simulate: success' >+$data_dir/request.manifest; + + $* >>"EOO"; + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + + test -d $data_dir != 0 + } + + : for-real + : + { + $clone_root_data_clean; + + $* >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } +} + +: failure +: +{ + test.arguments += $data_dir + + : bad-archive + : + { + $clone_root_data_clean; + + echo 'junk' >=$data_dir/libhello-0.1.0.tar.gz; + + $* >>"EOO" + : 1 + status: 400 + message: archive is not a valid package \(run bpkg pkg-verify for details\) + reference: $checksum + EOO + } + + : bad-simulate + : + { + $clone_root_data_clean; + + echo 'simulate: fly' >+$data_dir/request.manifest; + + $* >>"EOO" + : 1 + status: 400 + message: unrecognized simulation outcome 'fly' + reference: $checksum + EOO + } +} diff --git a/tests/submit/submit-git.test b/tests/submit/submit-git.test deleted file mode 100644 index bedfd5f..0000000 --- a/tests/submit/submit-git.test +++ /dev/null @@ -1,954 +0,0 @@ -# file : tests/submit/submit-git.test -# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd -# license : MIT; see accompanying LICENSE file - -.include data.test - -# Prior to running testscript with -v for debugging purposes assign true to -# the verbosity variable in the brep/submit/submit-git.in handler script and -# uncomment the following line. -# -# test.redirects += 2>! - -g = git 2>! >&2 - -# Create and clone the reference repository. -# -root_ref = $~/ref.git -root_ref_dir = $~/ref - -clone_root_ref = cp --no-cleanup -r $root_ref ./ &ref.git/*** - -+mkdir --no-cleanup $root_ref -+$g -C $root_ref init --bare &ref.git/*** - -+$g clone $root_ref $root_ref_dir &ref/*** - -+cat <=$root_ref_dir/submit.config.bash - sections[alpha]=1/alpha - sections[beta]=1/beta - sections[stable]=1/testing - - owners=owners - EOI - -+$g -C $root_ref_dir add '*' -+$g -C $root_ref_dir commit -m 'Add submit.config.bash' -+$g -C $root_ref_dir push - -# Create the target repository. -# -root_tgt = $~/tgt.git -root_tgt_url = "file:///$~/tgt.git" - -+cp -r $root_ref $root_tgt - -clone_root_tgt = cp --no-cleanup -r $root_tgt ./ &tgt.git/*** - -# Extract the package repository. -# -+tar -C $~ -xf $src_base/hello.tar.gz &hello.git/*** - -# Adjust the request manifest control value to point to the package repository. -# -prj_ctl="file://$~" -pkg_ctl="$prj_ctl/hello.git" - -+sed -i -e "s%^\(control:\) .+\$%\\1 $pkg_ctl%" $data_dir/request.manifest - -: args -{ - : none - : - $* 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref \] \[brep-submit-git\]: usage: .+brep-submit-git \[\] \[\] % - EOE - - : dir-only - : - $* dir 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: usage: .+brep-submit-git \[\] \[\] % - EOE - - : ref-not-exist - : - $* "$root_tgt_url" ref dir 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: 'ref' does not exist or is not a directory% - EOE - - : dir-not-exist - : - mkdir ref; - $* "$root_tgt_url" ref dir 2>>~%EOE% != 0 - %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: 'dir' does not exist or is not a directory% - EOE -} - -: success -: -{ - : ref-unknown-tgt-aquire-prj-pkg - : - : Test that on the first package submission the project and package names - : ownership is successfully aquired. Authentication is enabled on both the - : reference and target repos. - : - : Note that here we also test that --commiter-* options are picked up - : properly. - : - { - $clone_root_data; - - $clone_root_tgt; - tgt_url = "file:///$~/tgt.git"; - - $* --committer-name 'Commiter' --committer-email 'commiter@example.com' \ - "$tgt_url" $root_ref_dir $data_dir >>"EOO"; - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - - # Check that the ownership information and the package are commited into - # the target repository. - # - $g clone "$tgt_url" &tgt/***; - - # Note that some manifest values may well wrap over several lines. - # - cat tgt/owners/hello/project-owner.manifest >>~%EOO%; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - %control: file:///.+% - %.* - EOO - - cat tgt/owners/hello/libhello/package-owner.manifest >>~%EOO%; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - %control: file:///.+% - %.* - EOO - - test -f tgt/1/alpha/hello/libhello-0.1.0.tar.gz; - - git -C tgt log -1 >>~%EOO%; - %commit .+% - %Author: User Name % - %Date: .+% - - Add libhello/0.1.0 to 1/alpha/hello - % % - : 1 - archive: libhello-0.1.0.tar.gz - % sha256sum: .{64}% - % timestamp: ....-..-..T..:..:..Z% - % client-ip: .+% - % user-agent: bdep/.+% - %. - section: alpha - author-name: User Name - author-email: user@example.org - % control: file:///.+% - %.* - EOO - - git -C tgt log -1 '--pretty=format:%an %ae %cn %ce' >>:EOO - User Name user@example.org Commiter commiter@example.com - EOO - } - - : ref-disabled-tgt-aquire-prj-pkg - : - : Test that on the first package submit the project and package names - : ownership is successfully aquired. Authentication is disabled for the - : reference repo. - : - { - $clone_root_data; - - $clone_root_ref; - $g clone ref.git &ref/***; - - cat <=ref/submit.config.bash; - sections[alpha]=1/alpha - sections[beta]=1/beta - sections[stable]=1/testing - - # owners=owners - EOI - - $g -C ref commit -am 'Disable ownership'; - $g -C ref push; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" ref $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : ref-absent-tgt-aquire-prj-pkg - : - : Test that on the first package submit the project and package names - : ownership is successfully aquired. Reference repo is absent. - : - { - $clone_root_data; - $clone_root_tgt; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : ref-unknown-tgt-auth-prj-pkg - : - : Test that the project and package ownership is authenticated by the target - : repository. - : - { - $clone_root_data; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - mkdir -p tgt/owners/hello/libhello; - - cat <<"EOI" >=tgt/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $pkg_ctl - EOI - - $g -C tgt add owners; - $g -C tgt commit -m 'Add ownership info'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : ref-auth-prj-tgt-auth-pkg - : - : Test that the project ownersip is authenticated by the reference - : repository and the package ownersip is authenticated by the target - : repository. - : - : Note that here we also test an author-less submission. - : - { - $clone_root_data; - sed -i -e 's%^author-.+$%%' $data_dir/request.manifest; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hello; - - cat <<"EOI" >=ref/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - $g -C ref add owners; - $g -C ref commit -m 'Add ownership info'; - $g -C ref push; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - mkdir -p tgt/owners/hello/libhello; - - cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $pkg_ctl - EOI - - $g -C tgt add owners; - $g -C tgt commit -m 'Add ownership info'; - $g -C tgt push; - - $* "file:///$~/tgt.git" ref $data_dir >>"EOO"; - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - - # Check that the author/committer names/emails are properly assigned. - # - $g -C tgt pull; - - git -C tgt log -1 '--pretty=format:%an %ae %cn %ce' >>:EOO - Submission Handler noreply@example.com Submission Handler noreply@example.com - EOO - } - - : ref-auth-prj-pkg - : - : Test that the project and package ownership is authenticated by the - : reference repository. - : - : Note that here we also test that the project control URL value may not be - : an immediate "parent" of the package control URL. - : - { - $clone_root_data; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hello/libhello; - - cat <<"EOI" >=ref/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $regex.replace("$prj_ctl", '(.*/)[^/]*', '\1') - EOI - - cat <<"EOI" >=ref/owners/hello/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $pkg_ctl - EOI - - $g -C ref add owners; - $g -C ref commit -m 'Add ownership info'; - $g -C ref push; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" ref $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : ref-auth-prj-tgt-aquire-pkg - : - : Test that the project ownersip is authenticated by the reference - : repository and the package ownersip is aquired. - : - { - $clone_root_data; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hello/libhello; - - cat <<"EOI" >=ref/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - $g -C ref add owners; - $g -C ref commit -m 'Add ownership info'; - $g -C ref push; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" ref $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : ref-absent-tgt-disabled - : - : Test the package ownership authentication when reference is unspecified and - : the target ownership handling is disabled. - : - { - $clone_root_data; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - cat <=tgt/submit.config.bash; - sections[alpha]=1/alpha - sections[beta]=1/beta - sections[stable]=1/testing - - # owners=owners - EOI - - $g -C tgt commit -am 'Disable ownership'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : section-fallback - : - { - $clone_root_data; - sed -i -e 's%^(section:) .+$%\1 delta%' $data_dir/request.manifest; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - cat <=tgt/submit.config.bash; - sections[alpha]=1/alpha - sections[beta]=1/beta - sections[stable]=1/testing - sections['*']=1/junk - - owners=owners - EOI - - $g -C tgt commit -am 'Add section name fallback'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } - - : simulate - : - : Test that the simulated submission still succeeds given no control URL. - : - { - $clone_root_data; - sed -i -e 's%^control: .+$%simulate: success%' $data_dir/request.manifest; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 200 - message: libhello/0.1.0 submission is queued - reference: $checksum - EOO - } -} - -: failure -: -{ - : no-author - : - { - $clone_root_data_clean; - sed -i -e 's%^author-.+$%%' $data_dir/request.manifest; - - $clone_root_tgt; - tgt_url = "file:///$~/tgt.git"; - - $* "$tgt_url" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 400 - message: author-name manifest value expected - reference: $checksum - EOO - } - - : no-author-email - : - { - $clone_root_data_clean; - sed -i -e 's%^author-email.+$%%' $data_dir/request.manifest; - - $clone_root_tgt; - tgt_url = "file:///$~/tgt.git"; - - $* "$tgt_url" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 400 - message: author-email manifest value expected - reference: $checksum - EOO - } - - : no-author-name - : - { - $clone_root_data_clean; - sed -i -e 's%^author-name.+$%%' $data_dir/request.manifest; - - $clone_root_tgt; - tgt_url = "file:///$~/tgt.git"; - - $* "$tgt_url" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 400 - message: author-name manifest value expected - reference: $checksum - EOO - } - - : ref-dup-pkg - : - : Test the duplicate submission due presence of the package archive in the - : reference repo. - : - { - $clone_root_data_clean; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/1/alpha/hello; - cp $data_dir/libhello-0.1.0.tar.gz ref/1/alpha/hello/; - - $g -C ref add 1/; - $g -C ref commit -m 'Add libhello-0.1.0.tar.gz'; - $g -C ref push; - - $* "$root_tgt_url" $~/ref $data_dir >>"EOO" - : 1 - status: 422 - message: duplicate submission - reference: $checksum - EOO - } - - : ref-used-pkg - : - : Test the package ownership authentication failure using the reference - : repo. The package name is already used in other project. - : - { - $clone_root_data_clean; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hi/libhello; - - cat <<"EOI" >=ref/owners/hi/project-owner.manifest; - : 1 - name: hi - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - cat <<"EOI" >=ref/owners/hi/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/foo - EOI - - $g -C ref add owners; - $g -C ref commit -m 'Add ownership info'; - $g -C ref push; - - $* "$root_tgt_url" $~/ref $data_dir >>"EOO" - : 1 - status: 401 - message: package owner authentication failed - reference: $checksum - EOO - } - - : ref-auth-prj - : - : Test the project ownership authentication failure using the reference - : repo. - : - { - $clone_root_data_clean; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hello; - cat <=ref/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: https://example.com/foo - EOI - - $g -C ref add owners/hello/project-owner.manifest; - $g -C ref commit -m 'Add project ownership info'; - $g -C ref push; - - $* "$root_tgt_url" $~/ref $data_dir >>"EOO" - : 1 - status: 401 - message: project owner authentication failed - reference: $checksum - EOO - } - - : ref-auth-pkg - : - : Test the package ownership authentication failure using the reference - : repo. - : - { - $clone_root_data_clean; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hello/libhello; - - cat <<"EOI" >=ref/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - cat <<"EOI" >=ref/owners/hello/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/foo - EOI - - $g -C ref add owners; - $g -C ref commit -m 'Add ownership info'; - $g -C ref push; - - $* "$root_tgt_url" $~/ref $data_dir >>"EOO" - : 1 - status: 401 - message: package owner authentication failed - reference: $checksum - EOO - } - - : ref-absent-tgt-dup-pkg - : - : Test the duplicate submission due presence of the package archive in the - : target repo. - : - { - $clone_root_data_clean; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - mkdir -p tgt/1/alpha/hello; - cp $data_dir/libhello-0.1.0.tar.gz tgt/1/alpha/hello/; - - $g -C tgt add 1/; - $g -C tgt commit -m 'Add libhello-0.1.0.tar.gz'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 422 - message: duplicate submission - reference: $checksum - EOO - } - - : ref-absent-tgt-auth-pkg - : - : Test the package ownership authentication failure using the target repo. - : - { - $clone_root_data_clean; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - mkdir -p tgt/owners/hello/libhello; - - cat <<"EOI" >=tgt/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/foo - EOI - - $g -C tgt add owners; - $g -C tgt commit -m 'Add ownership info'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 401 - message: package owner authentication failed - reference: $checksum - EOO - } - - : ref-unknown-tgt-disabled - : - : Test the project ownership authentication failure when no project - : ownership information is present in the reference and the target ownership - : handling is disabled. - : - { - $clone_root_data_clean; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - cat <=tgt/submit.config.bash; - sections[alpha]=1/alpha - sections[beta]=1/beta - sections[stable]=1/testing - - # owners=owners - EOI - - $g -C tgt commit -am 'Disable ownership'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 401 - message: project owner authentication failed - reference: $checksum - EOO - } - - : ref-prj-tgt-disabled - : - : Test the project ownership authentication failure when no package - : ownership information is present in the reference and the target ownership - : handling is disabled. - : - { - $clone_root_data_clean; - - $clone_root_ref; - $g clone ref.git &ref/***; - - mkdir -p ref/owners/hello/libhello; - - cat <<"EOI" >=ref/owners/hello/project-owner.manifest; - : 1 - name: hello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - $g -C ref add owners; - $g -C ref commit -m 'Add project ownership info'; - $g -C ref push; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - cat <=tgt/submit.config.bash; - sections[alpha]=1/alpha - sections[beta]=1/beta - sections[stable]=1/testing - - # owners=owners - EOI - - $g -C tgt commit -am 'Disable ownership'; - $g -C tgt push; - - $* "file:///$~/tgt.git" ref $data_dir >>"EOO" - : 1 - status: 401 - message: package owner authentication failed - reference: $checksum - EOO - } - - : ref-absent-tgt-used-pkg - : - : Test the package ownership authentication failure using the target repo. - : The package name is already used in other project. - : - { - $clone_root_data_clean; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - mkdir -p tgt/owners/hi/libhello; - - cat <<"EOI" >=tgt/owners/hi/project-owner.manifest; - : 1 - name: hi - author-name: User Name - author-email: user@example.org - control: $prj_ctl/ - EOI - - cat <<"EOI" >=tgt/owners/hi/libhello/package-owner.manifest; - : 1 - name: libhello - author-name: User Name - author-email: user@example.org - control: $prj_ctl/foo - EOI - - $g -C tgt add owners; - $g -C tgt commit -m 'Add ownership info'; - $g -C tgt push; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 401 - message: package owner authentication failed - reference: $checksum - EOO - } - - : authorization - : - : Test the package submission authorization failure due to the archive - : abbreviated checksum mismatch. - : - { - $clone_root_data_clean; - - sed -i -e 's%^(sha256sum:) .+$%\1 59941e842667%' \ - $data_dir/request.manifest; - - $clone_root_tgt; - $g clone tgt.git &tgt/***; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 401 - message: package publishing authorization failed - reference: $checksum - EOO - } - - : section-unknown - : - { - $clone_root_data_clean; - sed -i -e 's%^(section:) .+$%\1 delta%' $data_dir/request.manifest; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" - : 1 - status: 400 - message: unrecognized section 'delta' - reference: $checksum - EOO - } - - : control-unavailable - : - { - $clone_root_data_clean; - sed -i -e 's%^(control:) .+$%\1 http://non-existent-host/path/rep.git%' \ - $data_dir/request.manifest; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 422 - message: repository http://non-existent-host/path/rep.git unavailable - reference: $checksum - EOO - } - - : control-clone-failed - : - { - $clone_root_data_clean; - sed -i -e 's%^(control:) .+$%\1 http://example.com/path/rep.git%' \ - $data_dir/request.manifest; - - $clone_root_tgt; - - $* "file:///$~/tgt.git" $data_dir >>"EOO" - : 1 - status: 422 - message: failed to git-clone http://example.com/path/rep.git - reference: $checksum - EOO - } - - : target-unavailable - : - { - $clone_root_data_clean; - - $* 'http://non-existent-host/path/rep.git' $data_dir >>"EOO" 2>>~%EOE% - : 1 - status: 503 - message: submission service temporarily unavailable - reference: $checksum - EOO - %curl: .+% - EOE - } - - : target-clone-failed - : - { - $clone_root_data_clean; - - $* 'http://example.com/path/rep.git' $data_dir 2>>~%EOE% != 0 - %fatal: .+% - EOE - } -} diff --git a/tests/submit/submit-git.testscript b/tests/submit/submit-git.testscript new file mode 100644 index 0000000..8a00714 --- /dev/null +++ b/tests/submit/submit-git.testscript @@ -0,0 +1,954 @@ +# file : tests/submit/submit-git.testscript +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +.include data.testscript + +# Prior to running testscript with -v for debugging purposes assign true to +# the verbosity variable in the brep/submit/submit-git.in handler script and +# uncomment the following line. +# +# test.redirects += 2>! + +g = git 2>! >&2 + +# Create and clone the reference repository. +# +root_ref = $~/ref.git +root_ref_dir = $~/ref + +clone_root_ref = cp --no-cleanup -r $root_ref ./ &ref.git/*** + ++mkdir --no-cleanup $root_ref ++$g -C $root_ref init --bare &ref.git/*** + ++$g clone $root_ref $root_ref_dir &ref/*** + ++cat <=$root_ref_dir/submit.config.bash + sections[alpha]=1/alpha + sections[beta]=1/beta + sections[stable]=1/testing + + owners=owners + EOI + ++$g -C $root_ref_dir add '*' ++$g -C $root_ref_dir commit -m 'Add submit.config.bash' ++$g -C $root_ref_dir push + +# Create the target repository. +# +root_tgt = $~/tgt.git +root_tgt_url = "file:///$~/tgt.git" + ++cp -r $root_ref $root_tgt + +clone_root_tgt = cp --no-cleanup -r $root_tgt ./ &tgt.git/*** + +# Extract the package repository. +# ++tar -C $~ -xf $src_base/hello.tar.gz &hello.git/*** + +# Adjust the request manifest control value to point to the package repository. +# +prj_ctl="file://$~" +pkg_ctl="$prj_ctl/hello.git" + ++sed -i -e "s%^\(control:\) .+\$%\\1 $pkg_ctl%" $data_dir/request.manifest + +: args +{ + : none + : + $* 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref \] \[brep-submit-git\]: usage: .+brep-submit-git \[\] \[\] % + EOE + + : dir-only + : + $* dir 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: usage: .+brep-submit-git \[\] \[\] % + EOE + + : ref-not-exist + : + $* "$root_tgt_url" ref dir 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: 'ref' does not exist or is not a directory% + EOE + + : dir-not-exist + : + mkdir ref; + $* "$root_tgt_url" ref dir 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: 'dir' does not exist or is not a directory% + EOE +} + +: success +: +{ + : ref-unknown-tgt-aquire-prj-pkg + : + : Test that on the first package submission the project and package names + : ownership is successfully aquired. Authentication is enabled on both the + : reference and target repos. + : + : Note that here we also test that --commiter-* options are picked up + : properly. + : + { + $clone_root_data; + + $clone_root_tgt; + tgt_url = "file:///$~/tgt.git"; + + $* --committer-name 'Commiter' --committer-email 'commiter@example.com' \ + "$tgt_url" $root_ref_dir $data_dir >>"EOO"; + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + + # Check that the ownership information and the package are commited into + # the target repository. + # + $g clone "$tgt_url" &tgt/***; + + # Note that some manifest values may well wrap over several lines. + # + cat tgt/owners/hello/project-owner.manifest >>~%EOO%; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + %control: file:///.+% + %.* + EOO + + cat tgt/owners/hello/libhello/package-owner.manifest >>~%EOO%; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + %control: file:///.+% + %.* + EOO + + test -f tgt/1/alpha/hello/libhello-0.1.0.tar.gz; + + git -C tgt log -1 >>~%EOO%; + %commit .+% + %Author: User Name % + %Date: .+% + + Add libhello/0.1.0 to 1/alpha/hello + % % + : 1 + archive: libhello-0.1.0.tar.gz + % sha256sum: .{64}% + % timestamp: ....-..-..T..:..:..Z% + % client-ip: .+% + % user-agent: bdep/.+% + %. + section: alpha + author-name: User Name + author-email: user@example.org + % control: file:///.+% + %.* + EOO + + git -C tgt log -1 '--pretty=format:%an %ae %cn %ce' >>:EOO + User Name user@example.org Commiter commiter@example.com + EOO + } + + : ref-disabled-tgt-aquire-prj-pkg + : + : Test that on the first package submit the project and package names + : ownership is successfully aquired. Authentication is disabled for the + : reference repo. + : + { + $clone_root_data; + + $clone_root_ref; + $g clone ref.git &ref/***; + + cat <=ref/submit.config.bash; + sections[alpha]=1/alpha + sections[beta]=1/beta + sections[stable]=1/testing + + # owners=owners + EOI + + $g -C ref commit -am 'Disable ownership'; + $g -C ref push; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" ref $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : ref-absent-tgt-aquire-prj-pkg + : + : Test that on the first package submit the project and package names + : ownership is successfully aquired. Reference repo is absent. + : + { + $clone_root_data; + $clone_root_tgt; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : ref-unknown-tgt-auth-prj-pkg + : + : Test that the project and package ownership is authenticated by the target + : repository. + : + { + $clone_root_data; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + mkdir -p tgt/owners/hello/libhello; + + cat <<"EOI" >=tgt/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $pkg_ctl + EOI + + $g -C tgt add owners; + $g -C tgt commit -m 'Add ownership info'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : ref-auth-prj-tgt-auth-pkg + : + : Test that the project ownersip is authenticated by the reference + : repository and the package ownersip is authenticated by the target + : repository. + : + : Note that here we also test an author-less submission. + : + { + $clone_root_data; + sed -i -e 's%^author-.+$%%' $data_dir/request.manifest; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello; + + cat <<"EOI" >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + $g -C ref add owners; + $g -C ref commit -m 'Add ownership info'; + $g -C ref push; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + mkdir -p tgt/owners/hello/libhello; + + cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $pkg_ctl + EOI + + $g -C tgt add owners; + $g -C tgt commit -m 'Add ownership info'; + $g -C tgt push; + + $* "file:///$~/tgt.git" ref $data_dir >>"EOO"; + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + + # Check that the author/committer names/emails are properly assigned. + # + $g -C tgt pull; + + git -C tgt log -1 '--pretty=format:%an %ae %cn %ce' >>:EOO + Submission Handler noreply@example.com Submission Handler noreply@example.com + EOO + } + + : ref-auth-prj-pkg + : + : Test that the project and package ownership is authenticated by the + : reference repository. + : + : Note that here we also test that the project control URL value may not be + : an immediate "parent" of the package control URL. + : + { + $clone_root_data; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello/libhello; + + cat <<"EOI" >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $regex.replace("$prj_ctl", '(.*/)[^/]*', '\1') + EOI + + cat <<"EOI" >=ref/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $pkg_ctl + EOI + + $g -C ref add owners; + $g -C ref commit -m 'Add ownership info'; + $g -C ref push; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" ref $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : ref-auth-prj-tgt-aquire-pkg + : + : Test that the project ownersip is authenticated by the reference + : repository and the package ownersip is aquired. + : + { + $clone_root_data; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello/libhello; + + cat <<"EOI" >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + $g -C ref add owners; + $g -C ref commit -m 'Add ownership info'; + $g -C ref push; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" ref $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : ref-absent-tgt-disabled + : + : Test the package ownership authentication when reference is unspecified and + : the target ownership handling is disabled. + : + { + $clone_root_data; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + cat <=tgt/submit.config.bash; + sections[alpha]=1/alpha + sections[beta]=1/beta + sections[stable]=1/testing + + # owners=owners + EOI + + $g -C tgt commit -am 'Disable ownership'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : section-fallback + : + { + $clone_root_data; + sed -i -e 's%^(section:) .+$%\1 delta%' $data_dir/request.manifest; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + cat <=tgt/submit.config.bash; + sections[alpha]=1/alpha + sections[beta]=1/beta + sections[stable]=1/testing + sections['*']=1/junk + + owners=owners + EOI + + $g -C tgt commit -am 'Add section name fallback'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } + + : simulate + : + : Test that the simulated submission still succeeds given no control URL. + : + { + $clone_root_data; + sed -i -e 's%^control: .+$%simulate: success%' $data_dir/request.manifest; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + } +} + +: failure +: +{ + : no-author + : + { + $clone_root_data_clean; + sed -i -e 's%^author-.+$%%' $data_dir/request.manifest; + + $clone_root_tgt; + tgt_url = "file:///$~/tgt.git"; + + $* "$tgt_url" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 400 + message: author-name manifest value expected + reference: $checksum + EOO + } + + : no-author-email + : + { + $clone_root_data_clean; + sed -i -e 's%^author-email.+$%%' $data_dir/request.manifest; + + $clone_root_tgt; + tgt_url = "file:///$~/tgt.git"; + + $* "$tgt_url" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 400 + message: author-email manifest value expected + reference: $checksum + EOO + } + + : no-author-name + : + { + $clone_root_data_clean; + sed -i -e 's%^author-name.+$%%' $data_dir/request.manifest; + + $clone_root_tgt; + tgt_url = "file:///$~/tgt.git"; + + $* "$tgt_url" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 400 + message: author-name manifest value expected + reference: $checksum + EOO + } + + : ref-dup-pkg + : + : Test the duplicate submission due presence of the package archive in the + : reference repo. + : + { + $clone_root_data_clean; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/1/alpha/hello; + cp $data_dir/libhello-0.1.0.tar.gz ref/1/alpha/hello/; + + $g -C ref add 1/; + $g -C ref commit -m 'Add libhello-0.1.0.tar.gz'; + $g -C ref push; + + $* "$root_tgt_url" $~/ref $data_dir >>"EOO" + : 1 + status: 422 + message: duplicate submission + reference: $checksum + EOO + } + + : ref-used-pkg + : + : Test the package ownership authentication failure using the reference + : repo. The package name is already used in other project. + : + { + $clone_root_data_clean; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hi/libhello; + + cat <<"EOI" >=ref/owners/hi/project-owner.manifest; + : 1 + name: hi + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + cat <<"EOI" >=ref/owners/hi/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/foo + EOI + + $g -C ref add owners; + $g -C ref commit -m 'Add ownership info'; + $g -C ref push; + + $* "$root_tgt_url" $~/ref $data_dir >>"EOO" + : 1 + status: 401 + message: package owner authentication failed + reference: $checksum + EOO + } + + : ref-auth-prj + : + : Test the project ownership authentication failure using the reference + : repo. + : + { + $clone_root_data_clean; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello; + cat <=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: https://example.com/foo + EOI + + $g -C ref add owners/hello/project-owner.manifest; + $g -C ref commit -m 'Add project ownership info'; + $g -C ref push; + + $* "$root_tgt_url" $~/ref $data_dir >>"EOO" + : 1 + status: 401 + message: project owner authentication failed + reference: $checksum + EOO + } + + : ref-auth-pkg + : + : Test the package ownership authentication failure using the reference + : repo. + : + { + $clone_root_data_clean; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello/libhello; + + cat <<"EOI" >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + cat <<"EOI" >=ref/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/foo + EOI + + $g -C ref add owners; + $g -C ref commit -m 'Add ownership info'; + $g -C ref push; + + $* "$root_tgt_url" $~/ref $data_dir >>"EOO" + : 1 + status: 401 + message: package owner authentication failed + reference: $checksum + EOO + } + + : ref-absent-tgt-dup-pkg + : + : Test the duplicate submission due presence of the package archive in the + : target repo. + : + { + $clone_root_data_clean; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + mkdir -p tgt/1/alpha/hello; + cp $data_dir/libhello-0.1.0.tar.gz tgt/1/alpha/hello/; + + $g -C tgt add 1/; + $g -C tgt commit -m 'Add libhello-0.1.0.tar.gz'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 422 + message: duplicate submission + reference: $checksum + EOO + } + + : ref-absent-tgt-auth-pkg + : + : Test the package ownership authentication failure using the target repo. + : + { + $clone_root_data_clean; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + mkdir -p tgt/owners/hello/libhello; + + cat <<"EOI" >=tgt/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/foo + EOI + + $g -C tgt add owners; + $g -C tgt commit -m 'Add ownership info'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 401 + message: package owner authentication failed + reference: $checksum + EOO + } + + : ref-unknown-tgt-disabled + : + : Test the project ownership authentication failure when no project + : ownership information is present in the reference and the target ownership + : handling is disabled. + : + { + $clone_root_data_clean; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + cat <=tgt/submit.config.bash; + sections[alpha]=1/alpha + sections[beta]=1/beta + sections[stable]=1/testing + + # owners=owners + EOI + + $g -C tgt commit -am 'Disable ownership'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 401 + message: project owner authentication failed + reference: $checksum + EOO + } + + : ref-prj-tgt-disabled + : + : Test the project ownership authentication failure when no package + : ownership information is present in the reference and the target ownership + : handling is disabled. + : + { + $clone_root_data_clean; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello/libhello; + + cat <<"EOI" >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + $g -C ref add owners; + $g -C ref commit -m 'Add project ownership info'; + $g -C ref push; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + cat <=tgt/submit.config.bash; + sections[alpha]=1/alpha + sections[beta]=1/beta + sections[stable]=1/testing + + # owners=owners + EOI + + $g -C tgt commit -am 'Disable ownership'; + $g -C tgt push; + + $* "file:///$~/tgt.git" ref $data_dir >>"EOO" + : 1 + status: 401 + message: package owner authentication failed + reference: $checksum + EOO + } + + : ref-absent-tgt-used-pkg + : + : Test the package ownership authentication failure using the target repo. + : The package name is already used in other project. + : + { + $clone_root_data_clean; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + mkdir -p tgt/owners/hi/libhello; + + cat <<"EOI" >=tgt/owners/hi/project-owner.manifest; + : 1 + name: hi + author-name: User Name + author-email: user@example.org + control: $prj_ctl/ + EOI + + cat <<"EOI" >=tgt/owners/hi/libhello/package-owner.manifest; + : 1 + name: libhello + author-name: User Name + author-email: user@example.org + control: $prj_ctl/foo + EOI + + $g -C tgt add owners; + $g -C tgt commit -m 'Add ownership info'; + $g -C tgt push; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 401 + message: package owner authentication failed + reference: $checksum + EOO + } + + : authorization + : + : Test the package submission authorization failure due to the archive + : abbreviated checksum mismatch. + : + { + $clone_root_data_clean; + + sed -i -e 's%^(sha256sum:) .+$%\1 59941e842667%' \ + $data_dir/request.manifest; + + $clone_root_tgt; + $g clone tgt.git &tgt/***; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 401 + message: package publishing authorization failed + reference: $checksum + EOO + } + + : section-unknown + : + { + $clone_root_data_clean; + sed -i -e 's%^(section:) .+$%\1 delta%' $data_dir/request.manifest; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" $root_ref_dir $data_dir >>"EOO" + : 1 + status: 400 + message: unrecognized section 'delta' + reference: $checksum + EOO + } + + : control-unavailable + : + { + $clone_root_data_clean; + sed -i -e 's%^(control:) .+$%\1 http://non-existent-host/path/rep.git%' \ + $data_dir/request.manifest; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 422 + message: repository http://non-existent-host/path/rep.git unavailable + reference: $checksum + EOO + } + + : control-clone-failed + : + { + $clone_root_data_clean; + sed -i -e 's%^(control:) .+$%\1 http://example.com/path/rep.git%' \ + $data_dir/request.manifest; + + $clone_root_tgt; + + $* "file:///$~/tgt.git" $data_dir >>"EOO" + : 1 + status: 422 + message: failed to git-clone http://example.com/path/rep.git + reference: $checksum + EOO + } + + : target-unavailable + : + { + $clone_root_data_clean; + + $* 'http://non-existent-host/path/rep.git' $data_dir >>"EOO" 2>>~%EOE% + : 1 + status: 503 + message: submission service temporarily unavailable + reference: $checksum + EOO + %curl: .+% + EOE + } + + : target-clone-failed + : + { + $clone_root_data_clean; + + $* 'http://example.com/path/rep.git' $data_dir 2>>~%EOE% != 0 + %fatal: .+% + EOE + } +} -- cgit v1.1