diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2018-08-09 00:42:46 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2018-08-21 13:56:36 +0300 |
commit | e3533fd4c2fc90969b77d2ddaccbda649dd74973 (patch) | |
tree | 6c25d1ee37cbe04a9bce7b846798c5d636ba7503 /tests/submit | |
parent | e3a8a11f7fdc64a560810cf021080c61c7d69dc5 (diff) |
Implement submit-git
Diffstat (limited to 'tests/submit')
-rw-r--r-- | tests/submit/0f6b1460b3ec/libhello-0.1.0.tar.gz | bin | 0 -> 3033 bytes | |||
-rw-r--r-- | tests/submit/0f6b1460b3ec/package.manifest | 10 | ||||
-rw-r--r-- | tests/submit/0f6b1460b3ec/request.manifest | 10 | ||||
-rw-r--r-- | tests/submit/0f6b1460b3ec/result.manifest | 4 | ||||
-rw-r--r-- | tests/submit/README | 30 | ||||
-rw-r--r-- | tests/submit/buildfile | 16 | ||||
-rw-r--r-- | tests/submit/data.test | 35 | ||||
-rw-r--r-- | tests/submit/hello.tar.gz | bin | 0 -> 102400 bytes | |||
-rw-r--r-- | tests/submit/submit-dir.test | 90 | ||||
-rw-r--r-- | tests/submit/submit-git.test | 765 |
10 files changed, 960 insertions, 0 deletions
diff --git a/tests/submit/0f6b1460b3ec/libhello-0.1.0.tar.gz b/tests/submit/0f6b1460b3ec/libhello-0.1.0.tar.gz Binary files differnew file mode 100644 index 0000000..604a536 --- /dev/null +++ b/tests/submit/0f6b1460b3ec/libhello-0.1.0.tar.gz diff --git a/tests/submit/0f6b1460b3ec/package.manifest b/tests/submit/0f6b1460b3ec/package.manifest new file mode 100644 index 0000000..6fc36e7 --- /dev/null +++ b/tests/submit/0f6b1460b3ec/package.manifest @@ -0,0 +1,10 @@ +: 1 +name: libhello +version: 0.1.0 +project: hello +summary: hello library +license: TODO +url: https://example.org/hello +email: user@example.org +depends: * build2 >= 0.8.0- +depends: * bpkg >= 0.8.0- diff --git a/tests/submit/0f6b1460b3ec/request.manifest b/tests/submit/0f6b1460b3ec/request.manifest new file mode 100644 index 0000000..1173210 --- /dev/null +++ b/tests/submit/0f6b1460b3ec/request.manifest @@ -0,0 +1,10 @@ +: 1 +archive: libhello-0.1.0.tar.gz +sha256sum: 0f6b1460b3ec479499ae26841322af7a8a4312fcc5a6e890f3dbba91a83b38cc +timestamp: 2018-08-20T04:57:05Z +client-ip: fe80::56e1:adff:fe83:82f5 +user-agent: bdep/0.8.0-a.0.20180815130917 (GNU/Linux; +https://build2.org)\ + libbpkg/0.8.0-a.0.0f50af28d1cf libbutl/0.8.0-a.0.3e0db12932d5 curl +section: alpha +email: user@example.org +control: http://example.org/hello.git diff --git a/tests/submit/0f6b1460b3ec/result.manifest b/tests/submit/0f6b1460b3ec/result.manifest new file mode 100644 index 0000000..93a3555 --- /dev/null +++ b/tests/submit/0f6b1460b3ec/result.manifest @@ -0,0 +1,4 @@ +: 1 +status: 200 +message: libhello/0.1.0 submission is queued +reference: 0f6b1460b3ec diff --git a/tests/submit/README b/tests/submit/README new file mode 100644 index 0000000..7286c83 --- /dev/null +++ b/tests/submit/README @@ -0,0 +1,30 @@ +Prepare the test data with the following instructions. + +In an empty directory run: + +$ bdep new -t empty -C @cfg hello +$ BDEP_EMAIL=user@example.org bdep new --package -t lib libhello -d hello +$ bdep init -d hello/libhello + +Edit hello/libhello/manifest setting version to 0.1.0. + +$ mkdir hello.git +$ git -C hello.git/ init --bare + +$ git -C hello remote add origin "$(pwd)/hello.git" +$ git -C hello add '*' +$ git -C hello commit -m "Create" +$ git -C hello push --set-upstream origin master + +tar cf hello.tar.gz hello.git/ + +Move the archive into brep/tests/submit/ directory. + +Locally run brep server configured to use submit-dir handler. + +$ bdep publish --control http://example.org/hello.git \ + --email user@example.org --repository http://localhost/pkg --yes \ + -d hello + +Replace the submission data directory in brep/tests/submit/ with the one +produced with the above command. diff --git a/tests/submit/buildfile b/tests/submit/buildfile new file mode 100644 index 0000000..6606153 --- /dev/null +++ b/tests/submit/buildfile @@ -0,0 +1,16 @@ +# file : tests/submit/buildfile +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +define common: file +common{*}: extension = test + +dir = ../../brep/submit/ + +commons = data + +./: test{* -{$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 diff --git a/tests/submit/data.test b/tests/submit/data.test new file mode 100644 index 0000000..938d6b8 --- /dev/null +++ b/tests/submit/data.test @@ -0,0 +1,35 @@ +# 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/hello.tar.gz b/tests/submit/hello.tar.gz Binary files differnew file mode 100644 index 0000000..67baca7 --- /dev/null +++ b/tests/submit/hello.tar.gz diff --git a/tests/submit/submit-dir.test b/tests/submit/submit-dir.test new file mode 100644 index 0000000..97f7edd --- /dev/null +++ b/tests/submit/submit-dir.test @@ -0,0 +1,90 @@ +# 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 <dir>% + EOE + + : 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 += $checksum + + : simulate + : + { + $clone_root_data; + + echo "simulate: success" >+$checksum/request.manifest; + + $* >>"EOO"; + : 1 + status: 200 + message: libhello/0.1.0 submission is queued + reference: $checksum + EOO + + test -d $checksum != 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 += $checksum + + : bad-archive + : + { + $clone_root_data_clean; + + echo "junk" >=$checksum/libhello-0.1.0.tar.gz; + + $* >>EOO + : 1 + status: 400 + message: archive is not a valid package (run bpkg pkg-verify for details) + EOO + } + + : bad-simulate + : + { + $clone_root_data_clean; + + echo "simulate: fly" >+$checksum/request.manifest; + + $* >>"EOO" + : 1 + status: 400 + message: unrecognized simulation outcome 'fly' + EOO + } +} diff --git a/tests/submit/submit-git.test b/tests/submit/submit-git.test new file mode 100644 index 0000000..cf499b9 --- /dev/null +++ b/tests/submit/submit-git.test @@ -0,0 +1,765 @@ +# 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 <<EOI >=$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 <tgt-repo> \[<ref-repo>\] <dir>% + EOE + + : dir-only + : + $* $~/dir 2>>~%EOE% != 0 + %\[.+\] \[brep:error\] \[ref dir\] \[brep-submit-git\]: usage: .+brep-submit-git <tgt-repo> \[<ref-repo>\] <dir>% + 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 +} + +: 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. + : + { + $clone_root_data; + + $clone_root_tgt; + tgt_url = "file:///$~/tgt.git"; + + $* "$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 + email: user@example.org + %control: file:///.+% + %.* + EOO + + cat tgt/owners/hello/libhello/package-owner.manifest >>~%EOO%; + : 1 + name: libhello + 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: .+% + %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 + email: user@example.org + % control: file:///.+% + %.* + 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 <<EOI >=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 + email: user@example.org + control: $prj_ctl/ + EOI + + cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + 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. + : + { + $clone_root_data; + + $clone_root_ref; + $g clone ref.git &ref/***; + + mkdir -p ref/owners/hello; + + cat <<"EOI" >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + 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 + 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 + } + + : ref-auth-prj-pkg + : + : Test that the project and package ownership is authenticated by the + : reference repository. + : + { + $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 + email: user@example.org + control: $prj_ctl + EOI + + cat <<"EOI" >=ref/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + 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 + 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 <<EOI >=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 <<EOI >=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 + } +} + +: failure +: +{ + : 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 + 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 + email: user@example.org + control: $prj_ctl + EOI + + cat <<"EOI" >=ref/owners/hi/libhello/package-owner.manifest; + : 1 + name: libhello + 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 + 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 <<EOI >=ref/owners/hello/project-owner.manifest; + : 1 + name: hello + 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 + 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 + email: user@example.org + control: $prj_ctl + EOI + + cat <<"EOI" >=ref/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + 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 + 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 + 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 + email: user@example.org + control: $prj_ctl + EOI + + cat <<"EOI" >=tgt/owners/hello/libhello/package-owner.manifest; + : 1 + name: libhello + 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 + 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 <<EOI >=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 + 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 + 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 <<EOI >=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 + 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 + email: user@example.org + control: $prj_ctl + EOI + + cat <<"EOI" >=tgt/owners/hi/libhello/package-owner.manifest; + : 1 + name: libhello + 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 + 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 + 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' + EOO + } +} |