aboutsummaryrefslogtreecommitdiff
path: root/tests/submit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/submit')
-rw-r--r--tests/submit/0f6b1460b3ec/libhello-0.1.0.tar.gzbin0 -> 3033 bytes
-rw-r--r--tests/submit/0f6b1460b3ec/package.manifest10
-rw-r--r--tests/submit/0f6b1460b3ec/request.manifest10
-rw-r--r--tests/submit/0f6b1460b3ec/result.manifest4
-rw-r--r--tests/submit/README30
-rw-r--r--tests/submit/buildfile16
-rw-r--r--tests/submit/data.test35
-rw-r--r--tests/submit/hello.tar.gzbin0 -> 102400 bytes
-rw-r--r--tests/submit/submit-dir.test90
-rw-r--r--tests/submit/submit-git.test765
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
new file mode 100644
index 0000000..604a536
--- /dev/null
+++ b/tests/submit/0f6b1460b3ec/libhello-0.1.0.tar.gz
Binary files differ
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
new file mode 100644
index 0000000..67baca7
--- /dev/null
+++ b/tests/submit/hello.tar.gz
Binary files differ
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
+ }
+}