summaryrefslogtreecommitdiffstats
path: root/t/recipes/checks/debian/upstream
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 13:42:30 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 13:42:30 +0000
commit75808db17caf8b960b351e3408e74142f4c85aac (patch)
tree7989e9c09a4240248bf4658a22208a0a52d991c4 /t/recipes/checks/debian/upstream
parentInitial commit. (diff)
downloadlintian-75808db17caf8b960b351e3408e74142f4c85aac.tar.xz
lintian-75808db17caf8b960b351e3408e74142f4c85aac.zip
Adding upstream version 2.117.0.upstream/2.117.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 't/recipes/checks/debian/upstream')
-rw-r--r--t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/debian/upstream/metadata4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/bogus-field/eval/desc4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/bogus-field/eval/hints5
-rw-r--r--t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/debian/upstream1
-rw-r--r--t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/debian/upstream/metadata7
-rw-r--r--t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/fields-present/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/fields-present/eval/hints7
-rw-r--r--t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/debian/upstream/metadata2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/in-native-source/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/in-native-source/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/debian/upstream/metadata2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/hints2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/fill-values3
-rwxr-xr-xt/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/pre-build2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/fill-values3
-rwxr-xr-xt/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/pre-build11
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/hints2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/debian/upstream/metadata5
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/hints7
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/debian/upstream/metadata6
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/hints7
-rw-r--r--t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/debian/upstream/metadata5
-rw-r--r--t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/hints2
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/debian/upstream/signing-key.asc160
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/desc5
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/debian/upstream/signing-key.asc0
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/fill-values4
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/debian/upstream/signing-key.asc101
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/desc4
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream-signing-key.pgp52
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream/signing-key.asc52
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/watch5
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/debian/upstream/signing-key.asc160
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/debian/upstream/signing-key.asc1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/desc2
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/hints1
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/debian/upstream/signing-key.asc153
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/fill-values3
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/desc4
-rw-r--r--t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/hints1
70 files changed, 873 insertions, 0 deletions
diff --git a/t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..4ffe477
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/debian/upstream/metadata
@@ -0,0 +1,4 @@
+---
+Bogus: This field name is not known.
+Repository: Some repo.
+Bug-Submit: A bug tracker.
diff --git a/t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/fill-values
new file mode 100644
index 0000000..5be819d
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/bogus-field/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: upload-non-native
+Testname: bogus-field
+Description: Upstream metadata contains a field named 'Bogus'
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/bogus-field/eval/desc b/t/recipes/checks/debian/upstream/metadata/bogus-field/eval/desc
new file mode 100644
index 0000000..2ac293b
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/bogus-field/eval/desc
@@ -0,0 +1,4 @@
+Testname: bogus-field
+Check: debian/upstream/metadata
+See-Also:
+ https://salsa.debian.org/lintian/lintian/-/merge_requests/356
diff --git a/t/recipes/checks/debian/upstream/metadata/bogus-field/eval/hints b/t/recipes/checks/debian/upstream/metadata/bogus-field/eval/hints
new file mode 100644
index 0000000..47a6443
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/bogus-field/eval/hints
@@ -0,0 +1,5 @@
+bogus-field (source): upstream-metadata-field-unknown Bogus [debian/upstream/metadata]
+bogus-field (source): upstream-metadata-exists [debian/upstream/metadata]
+bogus-field (source): upstream-metadata Repository Some repo. [debian/upstream/metadata]
+bogus-field (source): upstream-metadata Bug-Submit A bug tracker. [debian/upstream/metadata]
+bogus-field (source): upstream-metadata Bogus This field name is not known. [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/debian/upstream b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/debian/upstream
new file mode 100644
index 0000000..ab2fc5d
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/debian/upstream
@@ -0,0 +1 @@
+# empty file \ No newline at end of file
diff --git a/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/fill-values
new file mode 100644
index 0000000..de42edd
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/build-spec/fill-values
@@ -0,0 +1,3 @@
+Skeleton: upload-native
+Testname: cruft-obsolete-upstream-metadata
+Description: Check for obsolete path for debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/desc b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/desc
new file mode 100644
index 0000000..c0934c3
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/desc
@@ -0,0 +1,2 @@
+Testname: cruft-obsolete-upstream-metadata
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/hints b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/hints
new file mode 100644
index 0000000..91c125c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/cruft-obsolete-upstream-metadata/eval/hints
@@ -0,0 +1 @@
+cruft-obsolete-upstream-metadata (source): debian-upstream-obsolete-path [debian/upstream]
diff --git a/t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..1182684
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/debian/upstream/metadata
@@ -0,0 +1,7 @@
+---
+Archive: GitHub
+Bug-Database: https://github.com/isaacs/node-glob/issues
+Contact: https://github.com/isaacs/node-glob/issues
+Name: node-glob
+Repository: https://github.com/isaacs/node-glob.git
+Repository-Browse: https://github.com/isaacs/node-glob
diff --git a/t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/fill-values
new file mode 100644
index 0000000..ad6eb57
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/fields-present/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: upload-non-native
+Testname: fields-present
+Description: Tests for classification tags on upstream metadata
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/fields-present/eval/desc b/t/recipes/checks/debian/upstream/metadata/fields-present/eval/desc
new file mode 100644
index 0000000..02d3d28
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/fields-present/eval/desc
@@ -0,0 +1,2 @@
+Testname: fields-present
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/fields-present/eval/hints b/t/recipes/checks/debian/upstream/metadata/fields-present/eval/hints
new file mode 100644
index 0000000..769e5ab
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/fields-present/eval/hints
@@ -0,0 +1,7 @@
+fields-present (source): upstream-metadata-exists [debian/upstream/metadata]
+fields-present (source): upstream-metadata Repository-Browse https://github.com/isaacs/node-glob [debian/upstream/metadata]
+fields-present (source): upstream-metadata Repository https://github.com/isaacs/node-glob.git [debian/upstream/metadata]
+fields-present (source): upstream-metadata Name node-glob [debian/upstream/metadata]
+fields-present (source): upstream-metadata Contact https://github.com/isaacs/node-glob/issues [debian/upstream/metadata]
+fields-present (source): upstream-metadata Bug-Database https://github.com/isaacs/node-glob/issues [debian/upstream/metadata]
+fields-present (source): upstream-metadata Archive GitHub [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..d18240a
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/debian/upstream/metadata
@@ -0,0 +1,2 @@
+ - Hi,
+This is a completely invalid YAML file.
diff --git a/t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/fill-values
new file mode 100644
index 0000000..4a524d2
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/in-native-source/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: source-native
+Testname: in-native-source
+Description: Tests for d/upstream/metadata in native sources.
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/in-native-source/eval/desc b/t/recipes/checks/debian/upstream/metadata/in-native-source/eval/desc
new file mode 100644
index 0000000..e639f6e
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/in-native-source/eval/desc
@@ -0,0 +1,2 @@
+Testname: in-native-source
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/in-native-source/eval/hints b/t/recipes/checks/debian/upstream/metadata/in-native-source/eval/hints
new file mode 100644
index 0000000..cabf645
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/in-native-source/eval/hints
@@ -0,0 +1 @@
+in-native-source (source): upstream-metadata-in-native-source [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..d18240a
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/debian/upstream/metadata
@@ -0,0 +1,2 @@
+ - Hi,
+This is a completely invalid YAML file.
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/fill-values
new file mode 100644
index 0000000..4807064
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: upload-non-native
+Testname: upstream-metadata-invalid-yml
+Description: Tests for upstream-metadata being invalid yml
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/desc b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/desc
new file mode 100644
index 0000000..cb6406c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-metadata-invalid-yml
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/hints b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/hints
new file mode 100644
index 0000000..6e29652
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-invalid-yml/eval/hints
@@ -0,0 +1,2 @@
+upstream-metadata-invalid-yml (source): upstream-metadata-yaml-invalid did not find expected <document start> (at document 2, line 2, column 1) [debian/upstream/metadata]
+upstream-metadata-invalid-yml (source): upstream-metadata-exists [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/fill-values
new file mode 100644
index 0000000..ffb322d
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/fill-values
@@ -0,0 +1,3 @@
+Testname: upstream-metadata-is-missing
+Skeleton: upload-non-native
+Description: Tests for missing upstream metadata file
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/pre-build b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/pre-build
new file mode 100755
index 0000000..e4e9373
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/build-spec/pre-build
@@ -0,0 +1,2 @@
+#!/bin/sh
+rm -f "$1/debian/upstream/metadata"
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/desc b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/desc
new file mode 100644
index 0000000..eda1ff9
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-metadata-is-missing
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/hints b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/hints
new file mode 100644
index 0000000..b2f602f
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-missing/eval/hints
@@ -0,0 +1 @@
+upstream-metadata-is-missing (source): upstream-metadata-file-is-missing
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/fill-values
new file mode 100644
index 0000000..18a7845
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/fill-values
@@ -0,0 +1,3 @@
+Skeleton: upload-non-native
+Testname: upstream-metadata-is-not-a-file
+Description: Tests for d/upstream/metadata being non-file
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/pre-build b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/pre-build
new file mode 100755
index 0000000..f237abf
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/build-spec/pre-build
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+DIR="$1"
+UPSTREAM_DIR="$DIR/debian/upstream"
+METADATA="$UPSTREAM_DIR/metadata"
+
+mkdir -p "$UPSTREAM_DIR"
+rm -f "$METADATA"
+mkfifo "$METADATA"
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/desc b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/desc
new file mode 100644
index 0000000..8bbbeb1
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-metadata-is-not-a-file
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/hints b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/hints
new file mode 100644
index 0000000..ba37c59
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-is-not-a-file/eval/hints
@@ -0,0 +1,2 @@
+upstream-metadata-is-not-a-file (source): upstream-metadata-is-not-a-file [debian/upstream/metadata]
+upstream-metadata-is-not-a-file (source): upstream-metadata-exists [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..e740fba
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/debian/upstream/metadata
@@ -0,0 +1,5 @@
+Archive: GitHub
+Contact: https://github.com/isaacs/node-glob/issues
+Name: node-glob
+Repository: https://github.com/isaacs/node-glob.git
+Repository-Browse: https://github.com/isaacs/node-glob
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/fill-values
new file mode 100644
index 0000000..924631c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: upload-non-native
+Testname: upstream-metadata-missing-bug-tracking
+Description: Tests for upstream-metadata missing upstream repo info
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/desc b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/desc
new file mode 100644
index 0000000..60d30b1
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-metadata-missing-bug-tracking
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/hints b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/hints
new file mode 100644
index 0000000..221dfb4
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-bug-tracking/eval/hints
@@ -0,0 +1,7 @@
+upstream-metadata-missing-bug-tracking (source): upstream-metadata-missing-bug-tracking [debian/upstream/metadata]
+upstream-metadata-missing-bug-tracking (source): upstream-metadata-exists [debian/upstream/metadata]
+upstream-metadata-missing-bug-tracking (source): upstream-metadata Repository-Browse https://github.com/isaacs/node-glob [debian/upstream/metadata]
+upstream-metadata-missing-bug-tracking (source): upstream-metadata Repository https://github.com/isaacs/node-glob.git [debian/upstream/metadata]
+upstream-metadata-missing-bug-tracking (source): upstream-metadata Name node-glob [debian/upstream/metadata]
+upstream-metadata-missing-bug-tracking (source): upstream-metadata Contact https://github.com/isaacs/node-glob/issues [debian/upstream/metadata]
+upstream-metadata-missing-bug-tracking (source): upstream-metadata Archive GitHub [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..131493d
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/debian/upstream/metadata
@@ -0,0 +1,6 @@
+Archive: GitHub
+Bug-Database: https://github.com/isaacs/node-glob/issues
+Contact: https://github.com/isaacs/node-glob/issues
+Name: node-glob
+Bug-Database: https://github.com/isaacs/node-glob/issues
+Bug-Submit: https://github.com/isaacs/node-glob/issues/new
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/fill-values
new file mode 100644
index 0000000..65e64c5
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: upload-non-native
+Testname: upstream-metadata-missing-repository
+Description: Tests for upstream-metadata missing upstream repo info
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/desc b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/desc
new file mode 100644
index 0000000..6e6fe31
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-metadata-missing-repository
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/hints b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/hints
new file mode 100644
index 0000000..595916c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/upstream-metadata-missing-repository/eval/hints
@@ -0,0 +1,7 @@
+upstream-metadata-missing-repository (source): upstream-metadata-missing-repository [debian/upstream/metadata]
+upstream-metadata-missing-repository (source): upstream-metadata-exists [debian/upstream/metadata]
+upstream-metadata-missing-repository (source): upstream-metadata Name node-glob [debian/upstream/metadata]
+upstream-metadata-missing-repository (source): upstream-metadata Contact https://github.com/isaacs/node-glob/issues [debian/upstream/metadata]
+upstream-metadata-missing-repository (source): upstream-metadata Bug-Submit https://github.com/isaacs/node-glob/issues/new [debian/upstream/metadata]
+upstream-metadata-missing-repository (source): upstream-metadata Bug-Database https://github.com/isaacs/node-glob/issues [debian/upstream/metadata]
+upstream-metadata-missing-repository (source): upstream-metadata Archive GitHub [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/debian/upstream/metadata b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/debian/upstream/metadata
new file mode 100644
index 0000000..6e5ed82
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/debian/upstream/metadata
@@ -0,0 +1,5 @@
+- Name: libpff
+- Bug-Database: https://github.com/libyal/libpff/issues
+- Changelog: https://github.com/libyal/libpff/blob/master/ChangeLog
+- Documentation: https://github.com/libyal/libpff/wiki
+- Repository: https://github.com/libyal/libpff
diff --git a/t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/fill-values b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/fill-values
new file mode 100644
index 0000000..6ec962f
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/build-spec/fill-values
@@ -0,0 +1,4 @@
+Skeleton: upload-non-native
+Testname: yaml-sequence
+Description: File is YAML sequence instead of mapping
+Extra-Build-Depends: libyaml-libyaml-perl (>= 0.69)
diff --git a/t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/desc b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/desc
new file mode 100644
index 0000000..0d43f76
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/desc
@@ -0,0 +1,2 @@
+Testname: yaml-sequence
+Check: debian/upstream/metadata
diff --git a/t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/hints b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/hints
new file mode 100644
index 0000000..03f3384
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/metadata/yaml-sequence/eval/hints
@@ -0,0 +1,2 @@
+yaml-sequence (source): upstream-metadata-not-yaml-mapping [debian/upstream/metadata]
+yaml-sequence (source): upstream-metadata-exists [debian/upstream/metadata]
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..41c2c56
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/debian/upstream/signing-key.asc
@@ -0,0 +1,160 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+k5Bh
+=3qWJ
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/fill-values
new file mode 100644
index 0000000..9983ac1
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/build-spec/fill-values
@@ -0,0 +1,3 @@
+Testname: upstream-key-bloated
+Skeleton: upload-non-native
+Description: Check if public upstream signing key contains extra signatures
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/desc
new file mode 100644
index 0000000..9c407e3
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/desc
@@ -0,0 +1,5 @@
+Testname: upstream-key-bloated
+Test-Against:
+ public-upstream-key-unusable
+ public-upstream-keys-in-multiple-locations
+Check: debian/upstream/signing-key
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/hints
new file mode 100644
index 0000000..9c5238e
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-bloated/eval/hints
@@ -0,0 +1 @@
+upstream-key-bloated (source): public-upstream-key-not-minimal has 5 extra signature(s) for keyid E0B11894F66AEC98 [debian/upstream/signing-key.asc]
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/debian/upstream/signing-key.asc
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/fill-values
new file mode 100644
index 0000000..0d90cd0
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/build-spec/fill-values
@@ -0,0 +1,4 @@
+Testname: upstream-key-empty
+Skeleton: upload-non-native
+Source-Format: 3.0 (quilt)
+Description: Test with an empty public upstream signing key (requires source format 3.0)
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/desc
new file mode 100644
index 0000000..4e58f08
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-key-empty
+Check: debian/upstream/signing-key
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/hints
new file mode 100644
index 0000000..b39ccf7
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-empty/eval/hints
@@ -0,0 +1 @@
+upstream-key-empty (source): public-upstream-key-unusable cannot be processed [debian/upstream/signing-key.asc]
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..25cdc6a
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/debian/upstream/signing-key.asc
@@ -0,0 +1,101 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=Gbbb
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/fill-values
new file mode 100644
index 0000000..cd99595
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/build-spec/fill-values
@@ -0,0 +1,3 @@
+Testname: upstream-key-minimal
+Skeleton: upload-non-native
+Description: Test with a minimal public upstream signing key (false positive)
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/desc
new file mode 100644
index 0000000..87e5144
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/desc
@@ -0,0 +1,4 @@
+Testname: upstream-key-minimal
+Check: debian/upstream/signing-key
+Test-Against:
+ public-upstream-key-not-minimal
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/hints
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-minimal/eval/hints
@@ -0,0 +1 @@
+
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream-signing-key.pgp b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream-signing-key.pgp
new file mode 100644
index 0000000..d83f52c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream-signing-key.pgp
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+jr6SfdNikIDjGYa+yuN6KGQsriza1aA=
+=CYsi
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..d83f52c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/upstream/signing-key.asc
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+jr6SfdNikIDjGYa+yuN6KGQsriza1aA=
+=CYsi
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/watch b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/watch
new file mode 100644
index 0000000..8194d1c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/debian/watch
@@ -0,0 +1,5 @@
+version=4 \
+
+opts=\
+pgpsigurlmangle=s/project-$1\.tar\.gz/project-$1\.tar\.gz\.asc/,\
+ https://www.example.com/dist/ dh7-test\.([\d.]+)\.tar\.gz debian uupdate
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/fill-values
new file mode 100644
index 0000000..fd2f6c4
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/build-spec/fill-values
@@ -0,0 +1,3 @@
+Testname: upstream-key-multiple-locations
+Skeleton: upload-non-native
+Description: Check if upstream signing keys are present in multiple locations
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/desc
new file mode 100644
index 0000000..71c877f
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-key-multiple-locations
+Check: debian/upstream/signing-key
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/hints
new file mode 100644
index 0000000..f6e6e54
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-multiple-locations/eval/hints
@@ -0,0 +1 @@
+upstream-key-multiple-locations (source): public-upstream-keys-in-multiple-locations upstream-signing-key.pgp upstream/signing-key.asc
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..41c2c56
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/debian/upstream/signing-key.asc
@@ -0,0 +1,160 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+k5Bh
+=3qWJ
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/fill-values
new file mode 100644
index 0000000..2a29809
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/build-spec/fill-values
@@ -0,0 +1,3 @@
+Skeleton: upload-native
+Testname: upstream-key-native
+Description: Check for public upstream signing key in native package
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/desc
new file mode 100644
index 0000000..789bca6
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-key-native
+Check: debian/upstream/signing-key
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/hints
new file mode 100644
index 0000000..fababb0
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-native/eval/hints
@@ -0,0 +1 @@
+upstream-key-native (source): public-upstream-key-in-native-package [debian/upstream/signing-key.asc]
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..e311b55
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/debian/upstream/signing-key.asc
@@ -0,0 +1 @@
+Testing an empty file would require source format 3.0 (quilt).
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/fill-values
new file mode 100644
index 0000000..786ee2c
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/build-spec/fill-values
@@ -0,0 +1,3 @@
+Testname: upstream-key-nonsense
+Skeleton: upload-non-native
+Description: Check for nonsense data in public upstream signing key
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/desc
new file mode 100644
index 0000000..6e60720
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/desc
@@ -0,0 +1,2 @@
+Testname: upstream-key-nonsense
+Check: debian/upstream/signing-key
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/hints
new file mode 100644
index 0000000..5bc79f7
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-key-nonsense/eval/hints
@@ -0,0 +1 @@
+upstream-key-nonsense (source): public-upstream-key-unusable cannot be processed [debian/upstream/signing-key.asc]
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/debian/upstream/signing-key.asc b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/debian/upstream/signing-key.asc
new file mode 100644
index 0000000..b79208f
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/debian/upstream/signing-key.asc
@@ -0,0 +1,153 @@
+pub dsa1024 2006-05-25 [SC]
+ A0AEA075AC8398E93CFC6F45D70B095F855781BA
+uid [ unknown] Aaron C Spike <aaron@ekips.org>
+sub elg2048 2006-05-25 [E]
+ 75FE92B054BE8CCB6556FE630B755C0230DF8115
+
+pub dsa1024 2000-03-22 [SC]
+ 9FA3C49C23C9D1BC2E3019751FFF4BA917063E6D
+uid [ unknown] Kees Cook <kees@outflux.net>
+uid [ unknown] Kees Cook <kees@debian.org>
+uid [ unknown] Kees Cook <kees@kernel.org>
+uid [ unknown] Kees Cook <kees@ubuntu.com>
+uid [ unknown] Kees Cook <kees@canonical.com>
+uid [ unknown] Kees Cook <kees.cook@canonical.com>
+sub elg4096 2000-03-22 [E]
+ EF1A71F45F7588F7EFACC36653B02EBC76E6CE33
+
+pub dsa1024 2006-09-06 [SC]
+ C7223EBE4EF66513B892598911A30156E0E67611
+uid [ unknown] Bryce Harrington <bryce.harrington@canonical.com>
+uid [ unknown] Bryce Harrington <bryce@ubuntu.com>
+uid [ unknown] Bryce Harrington <bryce@canonical.com>
+uid [ unknown] Bryce Harrington <bryce@osg.samsung.com>
+uid [ unknown] Bryce Harrington <bryce@bryceharrington.org>
+uid [ unknown] Bryce Harrington <bryce.harrington@ubuntu.com>
+sub elg2048 2006-09-06 [E]
+ 90778E96D30DA29C45CC28920813D5E325D309EB
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBER12zgRBADBv4KbzMWnE5jwJlCK0aauc6NHsY9xiip6vMUmuyaU9O/DOKEx
+DqiEixZzxggV3lBsYf4QjaTNZ7+Gkb1IV9zCG7YzmBbMRI12TT+sZRdfCArC0IV2
+N3XAlCLuibXpb/rBloWfJUJsh4SSnS+GNYutLtRqbS/gDLZ6U57w+yM5LwCg5vZA
+M/JhaYA7y3aX91JkHKwxy40D/RwT8yo6RzckIs2+wSXSYEegPbvResOYV1kOXTi5
+qZ6afqHhyVtBRVVsQocEg/QIscAJu3ja/NiUAFCSKYN1iZCulGdcfLCfGIgJihSN
+6TFh7vUyBB+lGPCnax9MsdttsUaLfQeikWIsHxCBQUTwHLl4elOG7TPSFwELB/JX
+oZPvA/401Kv4bZvB9GLBzNfNLMdF3lrM+d0YH5R9k0WPV3XKShKz9H+vLEWGqxYB
+dJpK7jdhC7TK+L9V1hv4UhpOz9++K1O681HvkodCi1TxfIEKW1bA7tsNsM+Ggz0Z
+6BwqSCffc/ZysSL0L9GstNLMrtmnIdb+oQTtnR9XTVmAeD3H3bQfQWFyb24gQyBT
+cGlrZSA8YWFyb25AZWtpcHMub3JnPohgBBMRAgAgBQJEdds4AhsDBgsJCAcDAgQV
+AggDBBYCAwECHgECF4AACgkQ1wsJX4VXgbqdMgCfY0tcC/sffk1QXFqwh6ELk8Kx
+JQgAnitcjtlGWPWobbLmwztmAr7VlldruQINBER120sQCACv0SkI1OCjgYgW+8MF
+z3PALT7rP2J6IGEbIO95fg8H73apgPzx/ZM5bKY83mMbu3hN3SoFyhBY3yXA9qHE
+nC/W3Wm54yDvTOgVRjW/LiuBGcLJvQruB0Eu2WF5XEjcUi+vl+iZpEtNGc3enrVB
+tk0l4NXAONANWznX7ZlJx4IHhRNz4bHWsGrI1F5sA41bt1bRm2CE9GJrFcLnkjDp
+x1OEciBgP9x5M0pKfKL8DMtrAq0XsppP+Gg9OS4YF7UTDDDWKzqQnJAitseH/JQs
+soxsDOqxz6uY4GltnkV5inqAFVlVSxTG3JpxF3Rlsx2GqoOseEVssFUxTIFoBpYs
+TJpTAAMGB/oCLhuHGWnGa3OMHxBBGGX8nOPr9snglEHk2P/Kox6MRSAOU1BW6nVN
+LeN1jMldPH9Vd15FUHokCfydGuCPohx5daaA+vEp9qHM4g4fEGPgop+SZr8VMgNq
+yQUjUhU1rQOro/jyNXiQ7nICG7+QyDjeDZNfgWR/sHruHmWuoSEavx2zgxseNE5s
+pWICwdFltDXvvi9HWDDmPkCJHkhRlMaAaEwldM9z0M3AO6dXKK/1nKGGa4VqNL6f
+qDIfKTTpp5vuM/GUBE3d7fEuEfgi27YvdzQJa17SK1vrnpUaZ5+Bdt7DP5oFE9pB
+Tadkd4oCfglQQTEkOzYxVx4H6W/0XhjsiEkEGBECAAkFAkR120sCGwwACgkQ1wsJ
+X4VXgbrWNQCgt+WswdAQXAmJbuSTHNEvMgIuXyUAoLQnXJqYx2DOTY2i28thyeYM
+WS96mQGiBDjYWfMRBACN8F0N8tsW3zwhUpykfC62UdPJsu3zuqnipHWlPyMb7WYb
+NeR2EXpNxh5DKyI4kXHZL+7I6wrSYroHcw3biIrEy00oNNjyYZTwetSB/GMfISz0
+PNG1TMKL1dLrG146vmZp9vfoU2tJcCCB7Ir5hsKva7ddndvQdQYsvdS3cHJzjwCg
+pZPqPpzTpBnWZt/TA84LnjZ2Xt0D/36lHbAPDH92HjYeeclZjy7z3abrJYCxoc+U
+PBIu6/rAqYkE17S9kjkkiLb5JdF5lMJgSYu8Kf1QSCkc/II1CGJYfGqnKo3YGLIS
+rqrVzQob47tOMFjUYZ9UEb569m8rmgnl3RmPmZ9wCT+RY0U3XNeYx5ukfn/fJLt6
+A8b9Cqx5A/9rZLrnsSTL3bYuAHMn9FEwj1cetJvqi11L0MhQy4WBz293BUtR2X5S
+/lKzRfY+mNzSMe6NEEd5sD1QgJTUdC3wIJJeK9qMqyqK56Cmge3E7m4l/5QdI8uZ
+sqFuNCsGfpJPaSQ8yjJ2sAX+g8TjEMYZ9Cwkrod7sSagMrO4cV0no7QZS2VlcyBD
+b29rIDxrZWVzQG9zZGwub3JnPohJBDARAgAJBQJFca8BAh0gAAoJEB//S6kXBj5t
+uQYAn3X9zRGDua4OAPFS4qiNh09y7pItAJ0eQs5NHNFB/gBqZwEV7RCcUAelfbQb
+S2VlcyBDb29rIDxjb29rQGNwb2ludC5uZXQ+iEkEMBECAAkFAkUQGNkCHSAACgkQ
+H/9LqRcGPm2l1wCcDdjlXHGJzM4lrSyzUXyjxEwIvD4AoIv3oSyyfNoxTPTF3QTd
+vhVrfm6GtBtLZWVzIENvb2sgPGtlZXNAZGViaWFuLm9yZz6IYQQTEQIAIQUCR6Eg
+DQIbAwcLCQgHAwIBBBUCCAMEFgIDAQIeAQIXgAAKCRAf/0upFwY+bUNgAJ9RM+r7
+ZCl0xHjYqMkX9yF4NOjzrACdED6Y7Xohf5rpcSVxTkSFl3oSX5m0G0tlZXMgQ29v
+ayA8a2Vlc0BrZXJuZWwub3JnPohgBBMRAgAgAhsDAh4BAheABQJFtXy4BgsJCAcD
+AgQVAggDBBYCAwEACgkQH/9LqRcGPm3hcwCbBu1Wdux1iWFrxhV2E6mpjvjbt6EA
+nRHaGYEH2BuMCJjq0AE2cWqPCHjQtBtLZWVzIENvb2sgPGtlZXNAdWJ1bnR1LmNv
+bT6IYAQTEQIAIAIbAwIeAQIXgAUCRbV8uAYLCQgHAwIEFQIIAwQWAgMBAAoJEB//
+S6kXBj5tK68AoIhUwpdkaNHz/ecNJPv6ZuPnzcHVAJ0f4p4HSXqjIM4w2123e5Kw
+PyiQIbQcS2VlcyBDb29rIDxrZWVzQG91dGZsdXgubmV0PohjBBMRAgAjAhsDAh4B
+AheAAhkBBQJFtXyzBgsJCAcDAgQVAggDBBYCAwEACgkQH/9LqRcGPm2t9QCbBBgv
+K8umgFnfFM3gHSWXcchf/U8AnjgRSagInpCzDsriwz/7kRk6CZjRtB5LZWVzIENv
+b2sgPGtlZXNAY2Fub25pY2FsLmNvbT6IYAQTEQIAIAIbAwIeAQIXgAUCRbV8uAYL
+CQgHAwIEFQIIAwQWAgMBAAoJEB//S6kXBj5tlA4An1TrHtj4+NspE3AS3hhR3LzP
+Y1Y/AJ9sF22Ytoz+RTuDnV+6b62E6kIe47QjS2VlcyBDb29rIDxrZWVzLmNvb2tA
+Y2Fub25pY2FsLmNvbT6IYQQTEQIAIQUCR/QWgAIbAwcLCQgHAwIBBBUCCAMEFgID
+AQIeAQIXgAAKCRAf/0upFwY+baOTAJ0XMfD87j/R/LyaF/p84mtYM/mUXACfd7KQ
+Hty/NNRHZm65IGUiQpCMPVi0J0Nvcm5lbGl1cyBDb29rIChLZWVzKSA8Y29va0Bj
+cG9pbnQubmV0PohJBDARAgAJBQJE64y0Ah0gAAoJEB//S6kXBj5tvXAAn3QUzyP3
+bopVytVzU2t5ATvFbDvSAJ9Kb7OYDI+d6Ym/kjRNVxyAMqfkcLQoQ29ybmVsaXVz
+IENvb2sgKEtlZXMpIDxrZWVzQG91dGZsdXgubmV0PohJBDARAgAJBQJGAUI9Ah0g
+AAoJEB//S6kXBj5tdt0An28ib9AYfoa6TRteVRn22k/sBykvAKCh9X7U/NspQC61
+kcH+6yf/FszC3LkEDQQ42FvaEBAAkofDOJKr1mgLU+0NM5M0z33uN3LFX3vC+ON+
+vY5SAwvt1WqCvUgocByb0npfdqtu8VGD0QZ+m9Lp1yXyYjDoSgMmBachbordxHHW
+b7asqmHrOkPWX6AvrITRhMOfvQ1zDKlLa19kLMUANhYXRH3JjsiZAhQ++xcEZqes
+JtgmKdpcX0vX3TuVV8wSBJFG0tKgLZPkEnYtUDRiBp7RrqYruNCctVzCxr4n26cY
+V0saMvwHhHpmHP8qwJQf2++eWPG/lm/wMzatThEgkKqXGj1rHU+uzKBrxc2pQDi/
+Pz12vg9H86pO51E0xPXthH6hazwWix7Tx1Q0mig4pbrHLuHgV0A6CtlJIPclWlsY
+9jO67XiUGVw+ypR3QwPyUVZuCmRv3w+FroajxQ+VM/hlKhikDb7ylhQ0UCo3nym7
+mRTbEC5O+3mahTr4X7TadaX3GOjceMLzaOF4sbo9pFusK3lXOoehZO5Ob6VIbyTw
+T5M2qsjwLqLn7pmIN84tpQvlVaEFKyNyR9C+uCdB1ZkdOtUxOee8MOMxS3I06ZVv
+pRbFfUAr3Y/SzgapIGsDqHf9HKP5mMw9zDTWJwtUcAVtQELfM4JZ9F1tGd8G9ebH
+n1esy/Fb1c3upyhkLBBHdmI/dHnJ0hzt8SoSgsrORtq0DVL/fGpqDkeykkmOi4+t
+XS315Q8AAwUP/37nvk/tvV/IH43RY1DHQ+7DFhWpNzGfUDIEORoQeCGqpw6pJm1B
+Wvm3WDFuoXrrlOPvR5xQDEANbuBAejcC4MaPX+DHHdo6+uM2nkpYbIKFQ2GS6mg2
+GNUTqTBQX8Z/1BTE0NzcO/cANZA1kZeV7i6UXTpR7w3oNdPYk1OHWtDMCx97brCf
+IFD+5UuTeJiNRuOe+OiNZGsRL6/BtowDjKTdhsgotE3ZsgL+IyW8bMdowc7F56fD
+3SRL63SAu3yjfk7/ryZZIArCYusrkEV52OyEniCa42sCafONQ3WWIGXOVb3Wc62n
+AMOSFcbOE+BqvnmGlJ9vxRZ1GCB1is4lJb/8Wr2oq0aDH3sQoontF5W7nzWD041u
+rgsFMKLol8NH2waWXcnwbBcAcChk8duxGMEx0w1D8ldpTqVzIVgeIe8I2axlEnvq
+Vta9oR4uiCtinApD3yTrZRez9O2PwjEY5iZTe1WyiSGi+U0Tiz1ZIawhojOCxJWC
+ggB0Zs9n2FaCb5Cs7BMRzCdibeI1XoFqiL8YxY1cWkwcBTALSWpUy9FYOITPMSji
+x/Svlew+8VTrGZ+aKDXmEoXMbUfcPkRIbk7TWq0YrTTCYkikLviXczkrvBl1b5qw
+rhEF18dCl89N2kqUyDNJ4SuOeNELMhcGtARKY0OHtu3vSuC5Yr8woTN7iEYEGBEC
+AAYFAkW2eZgACgkQH/9LqRcGPm2CBgCglD0MerQ+cfQ734FX0hd89L8+XBcAn3Ab
+83GBmoy4K0aF4Jp5Nwlgo59DmQGiBET+XhERBADlUYa7VXfPl3y9uCBUMniYdE4F
+KLAobrREyiveLf+2mTf435YLde0gcx9ZS/EZUq+4rn4uv6AsKmw/f/N/VWGC4KL6
+0uyp7zJjUNed2KKBk3sk57IGpHwRqzXQwk8wVMOuhyyv207cmUadGVtL4GPKUCOY
+p+C0hnSs3Jq0fZJ9lwCg5xDxfg3g++HUm8Gu2D/SYR4pFWED/2J4fkdPRQhxnfmv
+UxphqKf24aDngDwXYLkKlywYGs52J8iOwTQ/DRIruKepqrh66gb06QwnMQe9R5mJ
+qncoi87m2jlKzUdJ5WV4JRmXc4QVu9vRySK9j6e1O2mJeRrYvkf5rDBCHXvOoXET
+6VSHZI//1OJJ5OMiIApERFdT+a5TA/4u82BHdLFerbK23ML0aWOpTc/kMbOwLjF7
+rFF3iJ4Pbhv0gS2wWx/1oqbFZGdTS5XVGiWf/+/rZpN8SeC5Q8cJ1EYqSHyo/eA+
+mI+C6ylqyyODmZ42OQr142xjt6MFj5uBMq3QQGYytZ65ustDfnE/qP6hNJGtE9Lw
+6NVGd6oG37QjQnJ5Y2UgSGFycmluZ3RvbiA8YnJ5Y2VAdWJ1bnR1LmNvbT6IYAQT
+EQIAIAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheABQJUwED9AAoJEBGjAVbg5nYR
+YHkAoN8LIA4RjqX6TtK87+V+5aOSggk1AKC6T20Lo9yte4Q6uXXJWGPNVydG8bQm
+QnJ5Y2UgSGFycmluZ3RvbiA8YnJ5Y2VAY2Fub25pY2FsLmNvbT6IYAQTEQIAIAIb
+AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheABQJUwED9AAoJEBGjAVbg5nYRNDQAoKJ3
+TMTZS3nK+gtYCosXcO4JFYxRAKDdOzV2Hn+dwors+2n3X91Ol3BNArQoQnJ5Y2Ug
+SGFycmluZ3RvbiA8YnJ5Y2VAb3NnLnNhbXN1bmcuY29tPohiBBMRAgAiAhsDBgsJ
+CAcDAgYVCAIJCgsEFgIDAQIeAQIXgAUCVMBA/QAKCRARowFW4OZ2Ed2iAJ4s0EVg
+9+vuE3wAmeHGZazsvRnakACg0VP0/JUmDDvgm7vOfg5Ex/v82nC0LEJyeWNlIEhh
+cnJpbmd0b24gPGJyeWNlQGJyeWNlaGFycmluZ3Rvbi5vcmc+iGAEExECACACGwMG
+CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCVMBA/QAKCRARowFW4OZ2EfLRAKC/HqDc
+a42tb3lyPxjEJv17tpFxSQCdHJeu88EIYaC5HZHUbG9ZaFoUuwi0LkJyeWNlIEhh
+cnJpbmd0b24gPGJyeWNlLmhhcnJpbmd0b25AdWJ1bnR1LmNvbT6IYAQTEQIAIAIb
+AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheABQJUwED6AAoJEBGjAVbg5nYRHEcAnRlu
+XGX7z2CeQHVccOjXPEx3DhbuAKC3BOql6z4e/oHnuPcrmm+cDVwvn7QxQnJ5Y2Ug
+SGFycmluZ3RvbiA8YnJ5Y2UuaGFycmluZ3RvbkBjYW5vbmljYWwuY29tPohgBBMR
+AgAgAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AFAlTAQP0ACgkQEaMBVuDmdhHg
+7wCgghXeewn/DeBZh3g0EstNcdSDDU4Anif0Ud+4cdTFS4jWWPJrs/gaPFbDuQIN
+BET+XiQQCADT0bmOAoaZ/3Y7cpvc221+V7Yq1YtUw1QNUgkaku5I+5ee54oIvMrE
+WbADQRd1TqtKjsTS8v1kYFqHC965uhHgXAMHCb6hlN+AzVXsgl/iqQI3knqHAtx5
+1Buqd/PF1t6grELRhGH39ElzkK2D9E1e8Ag6XdWY/jCx/tRypc2HrUJoNsdUFrj8
++VDOYa9Xi1XSzQdRPbWbdzXiIxtA5iY4i8mS3B3wItl1eyzD5UFQzgWK5FLFjfhm
+6/DEpVqlyu1mp+2I7InKz4HW64l0Rkzn5EC7UxUn/chGDWQTtfiyjeia4ANcUC8J
+x5C4NOKXPzXN8anWV3S0oJZh+pGRaUKTAAMFB/9YkEg13DveEPPg8+bqUXtN9YU+
+Ogxcvcyou8I5bzRMxlpJkG3aEsrpAB7mS9D3kpImUa5QA8Y9QoEl4CLxbGIDJIyK
+Nm93OhZrO+A0h8uCTHK45clmqg3UdUKqnXr5V48zIvs56lrpTnlJ3PqNSl2ErDYt
+T7fgODyXAyLPNpCGsz2otYfJ4ne1aYf7i/7gI+UTXpavDUsM90FrX+sydnjbZIi0
+t6HNpmO9sb9o82QjF+hMr28YntWS0LUvOdUmWNnUyrDtZ2fnTzxoOYl0/8hxE+vU
+wcw3vk6+CtNEw4r+VkuKKpZgrP7BIyD8m2dGJn5cfRe8LCP2TIkYh7WBoKQxiEkE
+GBECAAkFAkT+XiQCGwwACgkQEaMBVuDmdhHXAgCg1DelVwB3NVuI4X3w4QAijqlg
+3vsAn13J6LbSbWkCE1GwkJfoF9GzWqNd
+=L+CY
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/fill-values b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/fill-values
new file mode 100644
index 0000000..1ed18f8
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/build-spec/fill-values
@@ -0,0 +1,3 @@
+Testname: upstream-keyring
+Skeleton: upload-non-native
+Description: Test with a keyring (false positive, from inkscape)
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/desc b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/desc
new file mode 100644
index 0000000..753cd74
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/desc
@@ -0,0 +1,4 @@
+Testname: upstream-keyring
+Check: debian/upstream/signing-key
+Test-Against:
+ public-upstream-key-unusable
diff --git a/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/hints b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/hints
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/t/recipes/checks/debian/upstream/signing-key/upstream-keyring/eval/hints
@@ -0,0 +1 @@
+