Skip to content

Commit c6a9f82

Browse files
committed
multi sign: add test
1 parent 1702537 commit c6a9f82

File tree

5 files changed

+118
-0
lines changed

5 files changed

+118
-0
lines changed

system/files/aptly-dual.pub

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
mQGiBFL7pY8RBAC5uHg/9AuGJ7EF7RYty89IDLeqvlPe710eDQpJ+itsOaA/5rr3
4+
IV1LMlqHpM2rkZkAPpARwjrga2ByJ1ww77Zq2uPqJIO2LZYWTLXic9Zity2OVu3Z
5+
XwtdsqagIMfT5dAgNmhe5lL7qgGUwYcFFa52s7U4qO0z2FfwHW1IQrnMpwCg5RQh
6+
Uqs5iUKdDtoeQjX5mWgQhjEEAI1zfXUvvcOrRsDlGNKYZigZiWC6J46jeR8Nnf9C
7+
WwhXS2fzQaJyDq9DorkvPZgWUAaLLCdfGETqLzDKajynhS1+OnfFQNzvkvEPRBSb
8+
C5k+GOF2E1E9rGXb31+1XZTcdIprp4/F3RNLLWNUwfgPLWJx9NzHTYqgBStecHkC
9+
ySZRA/9PNFAbeJZ27HNuzoGnAa0piZDLeAAHsM1V6cosMh7U1IZqjZcrMC9YXNxH
10+
2D90PvoBvpufCMRzL/fOVPT1JzQGYoKIX17Nmzvdq/a4YyLWRODjvWXd94bae2Xd
11+
Vy03DYhfp8VOVJW6HuAX9JN6MKXSNxaibgOPjU822Hxd1iCIQ7QtQXB0bHkgVGVz
12+
dGVyIChkb24ndCB1c2UgaXQpIDx0ZXN0QGFwdGx5LmluZm8+iGIEExECACIFAlL7
13+
pY8CGyMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJECHbuJwW2z5t2sQAoNn+
14+
0cADZa66HZNY2qJi44Oq4hjaAJsHzj9JKAHEpdix5N7b6QvaZQZYhrkBDQRS+6WP
15+
EAQA9BX+kbIM6VJYoyY9vUHXfAF4E2y2M7vl9knZ+jMPfMbI7dE3gRJQb3mngST5
16+
7eZWawo1DNE6h3LbHsB4mpro9XLUXUMBgXRsOq4D5E0ygvDZ/tJhy0AwFiTOXKEs
17+
/erzmbF7j/TWh4LVHXFI9DrnN0+EeF/mQC/wzX7WGCKe70cAAwUEAMr7959zUYNp
18+
E3v4IquIJpD22bT/FiyQjFG8yGy36c+7mOP3VWi0lz5yFqqeR9NDFuLDSwOEi0nB
19+
zXNmimLy+hIwMaHjbQLjLODmy/T9wKCgeAmK1ygT6YBGJJflThZ05M80T5hBtRA9
20+
z2eoTn0wbi6MLmD/rbEt+lUPfSA4V0t2iEkEGBECAAkFAlL7pY8CGwwACgkQIdu4
21+
nBbbPm05hgCgvYatZXRbEdZ91jJCQi1KI7lJ5Y8AnjvrHU0g84mE45QZFegZzzQo
22+
9relmDMEZ3YCRhYJKwYBBAHaRw8BAQdAYDU0VSBcurX+uqAeR/w/XOLSZcghvOqz
23+
Y8yWdcj3HUy0L0FwdGx5IFNlY29uZGFyeSBTaWduaW5nIEtleSA8YXB0bHlAZXhh
24+
bXBsZS5jb20+iJYEExYKAD4WIQSu4W3wGDVPZ/5fXHK79OGUNOkeTgUCZ3YCRgIb
25+
AwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRC79OGUNOkeTid/AP9A
26+
kIMn2qI5TqZgzrnPt7SN16VvpMppPb2H0m0P6knQKQD8DHcLcrqAl2cjcEuntv75
27+
gOnEvmPDAO6S1rc8UgcWdQQ=
28+
=XPoo
29+
-----END PGP PUBLIC KEY BLOCK-----

system/files/aptly3.sec

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-----BEGIN PGP PRIVATE KEY BLOCK-----
2+
3+
lFgEZ3YCRhYJKwYBBAHaRw8BAQdAYDU0VSBcurX+uqAeR/w/XOLSZcghvOqzY8yW
4+
dcj3HUwAAP9lsZgE1YQfaS9xfVOSi3f91lbq13+U9FPdwxfiET0+bBFrtC9BcHRs
5+
eSBTZWNvbmRhcnkgU2lnbmluZyBLZXkgPGFwdGx5QGV4YW1wbGUuY29tPoiWBBMW
6+
CgA+FiEEruFt8Bg1T2f+X1xyu/ThlDTpHk4FAmd2AkYCGwMFCQPCZwAFCwkIBwIG
7+
FQoJCAsCBBYCAwECHgECF4AACgkQu/ThlDTpHk4nfwD/QJCDJ9qiOU6mYM65z7e0
8+
jdelb6TKaT29h9JtD+pJ0CkA/Ax3C3K6gJdnI3BLp7b++YDpxL5jwwDukta3PFIH
9+
FnUE
10+
=IXTY
11+
-----END PGP PRIVATE KEY BLOCK-----

system/lib.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ def prepare_fixture(self):
272272
self.run_cmd([
273273
self.gpgFinder.gpg2, "--import",
274274
os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files") + "/aptly.sec"], expected_code=None)
275+
self.run_cmd([
276+
self.gpgFinder.gpg2, "--import",
277+
os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files") + "/aptly3.sec"], expected_code=None)
275278

276279
if self.fixtureGpg:
277280
self.run_cmd([self.gpgFinder.gpg, "--no-default-keyring", "--trust-model", "always", "--batch", "--keyring", "aptlytest.gpg", "--import"] +
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
gpg: Signature made Mon Jan 26 10:18:32 2026 UTC
2+
gpg: using DSA key C5ACD2179B5231DFE842EE6121DBB89C16DB3E6D
3+
gpg: checking the trustdb
4+
gpg: no ultimately trusted keys found
5+
gpg: Good signature from "Aptly Tester (don't use it) <[email protected]>" [unknown]
6+
gpg: WARNING: This key is not certified with a trusted signature!
7+
gpg: There is no indication that the signature belongs to the owner.
8+
Primary key fingerprint: C5AC D217 9B52 31DF E842 EE61 21DB B89C 16DB 3E6D
9+
gpg: Signature made Mon Jan 26 10:18:32 2026 UTC
10+
gpg: using EDDSA key AEE16DF018354F67FE5F5C72BBF4E19434E91E4E
11+
gpg: Good signature from "Aptly Secondary Signing Key <[email protected]>" [unknown]
12+
gpg: WARNING: This key is not certified with a trusted signature!
13+
gpg: There is no indication that the signature belongs to the owner.
14+
Primary key fingerprint: AEE1 6DF0 1835 4F67 FE5F 5C72 BBF4 E194 34E9 1E4E

system/t12_api/publish.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import inspect
22
import os
33
import threading
4+
import re
45

56
from api_lib import TASK_SUCCEEDED, APITest
67

@@ -1874,3 +1875,63 @@ def check(self):
18741875
all_repos = self.get("/api/publish")
18751876
self.check_equal(all_repos.status_code, 200)
18761877
self.check_in(repo_expected, all_repos.json())
1878+
1879+
1880+
class PublishAPITestDualSignature(APITest):
1881+
"""
1882+
POST /publish/:prefix (local repos), GET /publish
1883+
"""
1884+
fixtureGpg = True
1885+
1886+
def check(self):
1887+
repo_name = self.random_name()
1888+
self.check_equal(self.post(
1889+
"/api/repos", json={"Name": repo_name, "DefaultDistribution": "wheezy"}).status_code, 201)
1890+
1891+
d = self.random_name()
1892+
self.check_equal(self.upload("/api/files/" + d,
1893+
"libboost-program-options-dev_1.49.0.1_i386.deb", "pyspi_0.6.1-1.3.dsc",
1894+
"pyspi_0.6.1-1.3.diff.gz", "pyspi_0.6.1.orig.tar.gz",
1895+
"pyspi-0.6.1-1.3.stripped.dsc").status_code, 200)
1896+
1897+
task = self.post_task("/api/repos/" + repo_name + "/file/" + d)
1898+
self.check_task(task)
1899+
1900+
# publishing under prefix, default distribution
1901+
prefix = self.random_name()
1902+
task = self.post_task(
1903+
"/api/publish/" + prefix,
1904+
json={
1905+
"SourceKind": "local",
1906+
"Sources": [{"Name": repo_name}],
1907+
"Signing": {"GPGKey": "C5ACD2179B5231DFE842EE6121DBB89C16DB3E6D,AEE16DF018354F67FE5F5C72BBF4E19434E91E4E"},
1908+
}
1909+
)
1910+
self.check_task(task)
1911+
repo_expected = {
1912+
'AcquireByHash': False,
1913+
'Architectures': ['i386', 'source'],
1914+
'Codename': '',
1915+
'Distribution': 'wheezy',
1916+
'Label': '',
1917+
'Origin': '',
1918+
'NotAutomatic': '',
1919+
'ButAutomaticUpgrades': '',
1920+
'Path': prefix + '/' + 'wheezy',
1921+
'Prefix': prefix,
1922+
'SignedBy': '',
1923+
'SkipContents': False,
1924+
'MultiDist': False,
1925+
'SourceKind': 'local',
1926+
'Sources': [{'Component': 'main', 'Name': repo_name}],
1927+
'Storage': '',
1928+
'Suite': ''}
1929+
1930+
all_repos = self.get("/api/publish")
1931+
self.check_equal(all_repos.status_code, 200)
1932+
self.check_in(repo_expected, all_repos.json())
1933+
1934+
self.check_exists("public/" + prefix + "/dists/wheezy/Release")
1935+
path = os.path.join(os.environ["HOME"], self.aptlyDir, "public", prefix, "dists/wheezy")
1936+
self.check_cmd_output(f"gpg --verify {path}/Release.gpg {path}/Release", "Release.gpg",
1937+
match_prepare=lambda s: re.sub(r'Signature made .*', '', s))

0 commit comments

Comments
 (0)