mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-04-20 19:38:39 +00:00
https://wiki.debian.org/DebianRepository/Format#Version The Version field, if specified, shall be the version of the release. On the other hand, if not set or set to an empty value, the Version field will not be included in the Release file. Signed-off-by: Zhang Xiao <xiao.zhang@windriver.com>
1027 lines
42 KiB
Python
1027 lines
42 KiB
Python
import os
|
|
import hashlib
|
|
import inspect
|
|
import re
|
|
from lib import BaseTest, ungzip_if_required
|
|
|
|
|
|
def strip_processor(output):
|
|
return "\n".join([l for l in output.split("\n") if not l.startswith(' ') and not l.startswith('Date:') and not l.startswith('Valid-Until:')])
|
|
|
|
|
|
def strip_processor_keep_date(output):
|
|
return "\n".join([l for l in output.split("\n") if not l.startswith(' ')])
|
|
|
|
|
|
class PublishRepo1Test(BaseTest):
|
|
"""
|
|
publish repo: default
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo1Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
|
|
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
self.check_exists(
|
|
'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
|
|
self.check_file_contents('public/dists/maverick/main/source/Sources',
|
|
'sources', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
|
|
self.check_file_contents('public/dists/maverick/main/binary-i386/Packages',
|
|
'binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
|
|
self.check_file_contents('public/dists/maverick/main/Contents-i386.gz',
|
|
'contents_i386', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
|
|
self.check_file_contents('public/dists/maverick/Contents-i386.gz',
|
|
'contents_i386_legacy', match_prepare=ungzip_if_required, mode='b', ensure_utf8=False)
|
|
|
|
# verify signatures
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
|
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
|
|
|
# verify sums
|
|
release = self.read_file('public/dists/maverick/Release').split("\n")
|
|
release = [l for l in release if l.startswith(" ")]
|
|
pathsSeen = set()
|
|
for l in release:
|
|
fileHash, fileSize, path = l.split()
|
|
if "Contents" in path and not path.endswith(".gz"):
|
|
# "Contents" are present in index, but not really written to disk
|
|
continue
|
|
|
|
pathsSeen.add(path)
|
|
|
|
fileSize = int(fileSize)
|
|
|
|
st = os.stat(os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
|
|
if fileSize != st.st_size:
|
|
raise Exception("file size doesn't match for %s: %d != %d" % (
|
|
path, fileSize, st.st_size))
|
|
|
|
if len(fileHash) == 32:
|
|
h = hashlib.md5()
|
|
elif len(fileHash) == 40:
|
|
h = hashlib.sha1()
|
|
elif len(fileHash) == 64:
|
|
h = hashlib.sha256()
|
|
else:
|
|
h = hashlib.sha512()
|
|
|
|
h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
|
|
|
|
if h.hexdigest() != fileHash:
|
|
raise Exception("file hash doesn't match for %s: %s != %s" % (
|
|
path, fileHash, h.hexdigest()))
|
|
|
|
if pathsSeen != set(['main/binary-i386/Packages', 'main/binary-i386/Packages.bz2', 'main/binary-i386/Packages.gz',
|
|
'main/source/Sources', 'main/source/Sources.gz', 'main/source/Sources.bz2',
|
|
'main/binary-i386/Release', 'main/source/Release', 'main/Contents-i386.gz',
|
|
'Contents-i386.gz']):
|
|
raise Exception("path seen wrong: %r" % (pathsSeen, ))
|
|
|
|
|
|
class PublishRepo2Test(BaseTest):
|
|
"""
|
|
publish repo: different component
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -component=contrib local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo2Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
|
|
|
|
self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
self.check_exists(
|
|
'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
|
|
|
|
class PublishRepo3Test(BaseTest):
|
|
"""
|
|
publish repo: different architectures
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly -architectures=i386 publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -component=contrib local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo3Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
|
|
self.check_not_exists('public/dists/maverick/contrib/source/Sources')
|
|
self.check_not_exists(
|
|
'public/dists/maverick/contrib/source/Sources.gz')
|
|
self.check_not_exists(
|
|
'public/dists/maverick/contrib/source/Sources.bz2')
|
|
|
|
self.check_not_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_not_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_not_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_not_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
self.check_exists(
|
|
'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
|
|
|
|
class PublishRepo4Test(BaseTest):
|
|
"""
|
|
publish repo: under prefix
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo ppa"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo4Test, self).check()
|
|
|
|
self.check_exists('public/ppa/dists/maverick/InRelease')
|
|
self.check_exists('public/ppa/dists/maverick/Release')
|
|
self.check_exists('public/ppa/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists(
|
|
'public/ppa/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists(
|
|
'public/ppa/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/ppa/dists/maverick/main/binary-i386/Packages.bz2')
|
|
self.check_exists('public/ppa/dists/maverick/main/Contents-i386.gz')
|
|
self.check_exists('public/ppa/dists/maverick/main/source/Sources')
|
|
self.check_exists('public/ppa/dists/maverick/main/source/Sources.gz')
|
|
self.check_exists('public/ppa/dists/maverick/main/source/Sources.bz2')
|
|
|
|
self.check_exists('public/ppa/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_exists(
|
|
'public/ppa/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists(
|
|
'public/ppa/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/ppa/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
self.check_exists(
|
|
'public/ppa/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
|
|
|
|
class PublishRepo5Test(BaseTest):
|
|
"""
|
|
publish repo: specify distribution
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo local-repo"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo6Test(BaseTest):
|
|
"""
|
|
publish repo: double publish under root
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo",
|
|
]
|
|
runCmd = "aptly publish repo -distribution=maverick local-repo"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo7Test(BaseTest):
|
|
"""
|
|
publish repo: double publish under prefix
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo ./ppa",
|
|
]
|
|
runCmd = "aptly publish repo -distribution=maverick local-repo ppa"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo8Test(BaseTest):
|
|
"""
|
|
publish repo: wrong prefix
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -distribution=maverick local-repo ppa/dists/la"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo9Test(BaseTest):
|
|
"""
|
|
publish repo: wrong prefix
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -distribution=maverick local-repo ppa/pool/la"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo10Test(BaseTest):
|
|
"""
|
|
publish repo: wrong prefix
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -distribution=maverick local-repo ../la"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo11Test(BaseTest):
|
|
"""
|
|
publish repo: no snapshot
|
|
"""
|
|
runCmd = "aptly publish repo local-repo"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo12Test(BaseTest):
|
|
"""
|
|
publish repo: -skip-signing
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -skip-signing -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo12Test, self).check()
|
|
|
|
self.check_not_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_not_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
|
|
|
|
|
|
class PublishRepo13Test(BaseTest):
|
|
"""
|
|
publish repo: empty repo is not publishable w/o architectures list
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
]
|
|
runCmd = "aptly publish repo --distribution=mars --skip-signing local-repo"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo14Test(BaseTest):
|
|
"""
|
|
publish repo: publishing defaults from local repo
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=maverick -component=contrib local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo14Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/contrib/Contents-i386.gz')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
|
|
|
|
self.check_exists('public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
self.check_exists(
|
|
'public/pool/contrib/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
|
|
|
|
class PublishRepo15Test(BaseTest):
|
|
"""
|
|
publish repo: custom label
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -component=contrib -label=label15 local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo15Test, self).check()
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
|
|
|
|
|
|
class PublishRepo16Test(BaseTest):
|
|
"""
|
|
publish repo: empty repo is publishable with architectures list
|
|
"""
|
|
fixtureDB = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -architectures=source,i386 --distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo16Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/main/source/Sources')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
|
|
|
|
|
|
class PublishRepo17Test(BaseTest):
|
|
"""
|
|
publish repo: multiple component
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create repo1",
|
|
"aptly repo create repo2",
|
|
"aptly repo add repo1 ${files}/libboost-program-options-dev_1.49.0.1_i386.deb ${files}/pyspi_0.6.1-1.3.dsc",
|
|
"aptly repo add repo2 ${files}/pyspi-0.6.1-1.3.stripped.dsc",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -component=main,contrib -distribution=maverick repo1 repo2"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo17Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/main/source/Sources')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
|
|
|
|
self.check_exists('public/dists/maverick/contrib/binary-i386/Packages')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/contrib/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/contrib/source/Sources.bz2')
|
|
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/pool/contrib/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
|
|
|
|
# verify signatures
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
|
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
|
|
|
# verify sums
|
|
release = self.read_file('public/dists/maverick/Release').split("\n")
|
|
release = [l for l in release if l.startswith(" ")]
|
|
pathsSeen = set()
|
|
for l in release:
|
|
fileHash, fileSize, path = l.split()
|
|
if "Contents" in path and not path.endswith(".gz"):
|
|
# "Contents" are present in index, but not really written to disk
|
|
continue
|
|
|
|
pathsSeen.add(path)
|
|
|
|
fileSize = int(fileSize)
|
|
|
|
st = os.stat(os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
|
|
if fileSize != st.st_size:
|
|
raise Exception("file size doesn't match for %s: %d != %d" % (
|
|
path, fileSize, st.st_size))
|
|
|
|
if len(fileHash) == 32:
|
|
h = hashlib.md5()
|
|
elif len(fileHash) == 40:
|
|
h = hashlib.sha1()
|
|
elif len(fileHash) == 64:
|
|
h = hashlib.sha256()
|
|
else:
|
|
h = hashlib.sha512()
|
|
|
|
h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
|
|
|
|
if h.hexdigest() != fileHash:
|
|
raise Exception("file hash doesn't match for %s: %s != %s" % (
|
|
path, fileHash, h.hexdigest()))
|
|
|
|
if pathsSeen != set(['main/binary-i386/Packages', 'main/binary-i386/Packages.gz',
|
|
'main/binary-i386/Packages.bz2',
|
|
'main/source/Sources', 'main/source/Sources.gz', 'main/source/Sources.bz2',
|
|
'contrib/binary-i386/Packages', 'contrib/binary-i386/Packages.gz',
|
|
'contrib/binary-i386/Packages.bz2',
|
|
'contrib/source/Sources', 'contrib/source/Sources.gz', 'contrib/source/Sources.bz2',
|
|
'main/source/Release', 'contrib/source/Release',
|
|
'main/binary-i386/Release', 'contrib/binary-i386/Release',
|
|
'main/Contents-i386.gz', 'Contents-i386.gz']):
|
|
raise Exception("path seen wrong: %r" % (pathsSeen, ))
|
|
|
|
|
|
class PublishRepo18Test(BaseTest):
|
|
"""
|
|
publish repo: multiple component, guessing component names
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=squeeze -component=main repo1",
|
|
"aptly repo create -distribution=squeeze -component=contrib repo2",
|
|
"aptly repo add repo1 ${files}/libboost-program-options-dev_1.49.0.1_i386.deb ${files}/pyspi_0.6.1-1.3.dsc",
|
|
"aptly repo add repo2 ${files}/pyspi-0.6.1-1.3.stripped.dsc",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -component=, repo1 repo2"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
|
|
class PublishRepo19Test(BaseTest):
|
|
"""
|
|
publish repo: duplicate component name (guessed)
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=squeeze -component=contrib repo1",
|
|
"aptly repo create -distribution=squeeze -component=contrib repo2",
|
|
"aptly repo add repo1 ${files}/libboost-program-options-dev_1.49.0.1_i386.deb ${files}/pyspi_0.6.1-1.3.dsc",
|
|
"aptly repo add repo2 ${files}/pyspi-0.6.1-1.3.stripped.dsc",
|
|
]
|
|
runCmd = "aptly publish repo -component=, repo1 repo2"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo20Test(BaseTest):
|
|
"""
|
|
publish repo: duplicate component name (manual)
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=squeeze -component=main repo1",
|
|
"aptly repo create -distribution=squeeze -component=contrib repo2",
|
|
]
|
|
runCmd = "aptly publish repo -component=b,b repo1 repo2"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo21Test(BaseTest):
|
|
"""
|
|
publish repo: distribution conflict
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=squeeze -component=main repo1",
|
|
"aptly repo create -distribution=wheezy -component=contrib repo2",
|
|
]
|
|
runCmd = "aptly publish repo -component=, repo1 repo2"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo22Test(BaseTest):
|
|
"""
|
|
publish reop: no such repo
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=squeeze -component=main repo1",
|
|
]
|
|
runCmd = "aptly publish repo -component=, repo1 repo2"
|
|
expectedCode = 1
|
|
|
|
|
|
class PublishRepo23Test(BaseTest):
|
|
"""
|
|
publish repo: mismatch in count
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -distribution=squeeze -component=main repo1",
|
|
]
|
|
runCmd = "aptly publish repo -component=main,contrib repo1"
|
|
expectedCode = 2
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return "\n".join([l for l in self.ensure_utf8(s).split("\n") if l.startswith("ERROR")])
|
|
|
|
|
|
class PublishRepo24Test(BaseTest):
|
|
"""
|
|
publish repo: conflicting files in the repo
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo1",
|
|
"aptly repo add local-repo1 ${files}",
|
|
"aptly repo create local-repo2",
|
|
"aptly repo add local-repo2 ${testfiles}",
|
|
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo1",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze local-repo2"
|
|
expectedCode = 1
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
|
|
class PublishRepo25Test(BaseTest):
|
|
"""
|
|
publish repo: -force-overwrite
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo1",
|
|
"aptly repo add local-repo1 ${files}",
|
|
"aptly repo create local-repo2",
|
|
"aptly repo add local-repo2 ${testfiles}",
|
|
"aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo1",
|
|
]
|
|
runCmd = "aptly publish repo -force-overwrite -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=squeeze local-repo2"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo25Test, self).check()
|
|
|
|
self.check_file_contents(
|
|
"public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz", "file")
|
|
|
|
|
|
class PublishRepo26Test(BaseTest):
|
|
"""
|
|
publish repo: sign with passphrase
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
"gpg --import --batch --passphrase verysecret ${files}/aptly_passphrase.sec"
|
|
]
|
|
runCmd = "aptly publish repo -batch -keyring=${files}/aptly_passphrase.pub -passphrase=verysecret -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return s.replace("gpg: gpg-agent is not available in this session\n", "")
|
|
|
|
def check(self):
|
|
super(PublishRepo26Test, self).check()
|
|
|
|
# verify signatures
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
|
|
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
|
|
"--verify", os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
|
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
|
|
|
|
|
class PublishRepo27Test(BaseTest):
|
|
"""
|
|
publish repo: with udebs
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files} ${udebs}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo27Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/InRelease')
|
|
self.check_exists('public/dists/maverick/Release')
|
|
self.check_exists('public/dists/maverick/Release.gpg')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Release')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/main/Contents-i386.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/debian-installer/binary-i386/Release')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/debian-installer/binary-i386/Packages')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/debian-installer/binary-i386/Packages.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/debian-installer/binary-i386/Packages.bz2')
|
|
self.check_exists('public/dists/maverick/main/Contents-udeb-i386.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Release')
|
|
self.check_exists('public/dists/maverick/main/source/Sources')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.gz')
|
|
self.check_exists('public/dists/maverick/main/source/Sources.bz2')
|
|
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.dsc')
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1-1.3.diff.gz')
|
|
self.check_exists('public/pool/main/p/pyspi/pyspi_0.6.1.orig.tar.gz')
|
|
self.check_exists(
|
|
'public/pool/main/p/pyspi/pyspi-0.6.1-1.3.stripped.dsc')
|
|
self.check_exists(
|
|
'public/pool/main/b/boost-defaults/libboost-program-options-dev_1.49.0.1_i386.deb')
|
|
self.check_exists(
|
|
'public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_amd64.udeb')
|
|
self.check_exists(
|
|
'public/pool/main/d/dmraid/dmraid-udeb_1.0.0.rc16-4.1_i386.udeb')
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents('public/dists/maverick/main/debian-installer/binary-i386/Packages',
|
|
'udeb_binary', match_prepare=lambda s: "\n".join(sorted(s.split("\n"))))
|
|
|
|
|
|
class PublishRepo28Test(BaseTest):
|
|
"""
|
|
publish repo: -skip-contents
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files} ${udebs}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-contents local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo28Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/Release')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Release')
|
|
self.check_not_exists('public/dists/maverick/main/Contents-i386.gz')
|
|
self.check_exists(
|
|
'public/dists/maverick/main/debian-installer/binary-i386/Release')
|
|
self.check_not_exists(
|
|
'public/dists/maverick/main/Contents-udeb-i386.gz')
|
|
|
|
|
|
class PublishRepo29Test(BaseTest):
|
|
"""
|
|
publish repo: broken .deb file for contents
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${testfiles}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
|
|
class PublishRepo30Test(BaseTest):
|
|
"""
|
|
publish repo: default (internal PGP implementation)
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
configOverride = {"gpgProvider": "internal"}
|
|
|
|
def check(self):
|
|
super(PublishRepo30Test, self).check()
|
|
|
|
# verify signatures
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
|
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
|
|
|
|
|
class PublishRepo31Test(BaseTest):
|
|
"""
|
|
publish repo: sign with passphrase (internal PGP implementation)
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly_passphrase.pub -secret-keyring=${files}/aptly_passphrase.sec -passphrase=verysecret -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
configOverride = {"gpgProvider": "internal"}
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return re.sub(r' \d{4}-\d{2}-\d{2}', '', self.ensure_utf8(s))
|
|
|
|
def check(self):
|
|
super(PublishRepo31Test, self).check()
|
|
|
|
# verify signatures
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
|
|
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly_passphrase.pub"),
|
|
"--verify", os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
|
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
|
|
|
|
|
class PublishRepo32Test(BaseTest):
|
|
"""
|
|
publish repo: default with gpg2
|
|
"""
|
|
requiresGPG2 = True
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -gpg-key=C5ACD2179B5231DFE842EE6121DBB89C16DB3E6D -keyring=${files}/aptly.pub -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return s.replace("gpg: gpg-agent is not available in this session\n", "")
|
|
|
|
def check(self):
|
|
super(PublishRepo32Test, self).check()
|
|
|
|
# verify signatures
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/InRelease')])
|
|
self.run_cmd([self.gpgFinder.gpg, "--no-auto-check-trustdb", "--keyring", os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "aptly.pub"),
|
|
"--verify", os.path.join(
|
|
os.environ["HOME"], ".aptly", 'public/dists/maverick/Release.gpg'),
|
|
os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/Release')])
|
|
|
|
|
|
class PublishRepo33Test(BaseTest):
|
|
"""
|
|
publish repo: -skip-bz2
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files} ${udebs}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-bz2 local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo33Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/Release')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Release')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-i386/Packages.gz')
|
|
self.check_not_exists('public/dists/maverick/main/binary-i386/Packages.bz2')
|
|
|
|
self.check_exists('public/dists/maverick/main/binary-amd64/Release')
|
|
self.check_exists('public/dists/maverick/main/binary-amd64/Packages')
|
|
self.check_exists('public/dists/maverick/main/binary-amd64/Packages.gz')
|
|
self.check_not_exists('public/dists/maverick/main/binary-amd64/Packages.bz2')
|
|
|
|
|
|
class PublishRepo34Test(BaseTest):
|
|
"""
|
|
publish repo: skeleton files
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}"
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -skip-contents local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def prepare_fixture(self):
|
|
super(PublishRepo34Test, self).prepare_fixture()
|
|
|
|
self.write_file(os.path.join('skel', 'dists', 'maverick', 'main', 'dep11', 'README'), 'README test file')
|
|
self.write_file(os.path.join('skel', 'dists', 'maverick', 'Release'), 'Release test file')
|
|
|
|
def check(self):
|
|
super(PublishRepo34Test, self).check()
|
|
|
|
self.check_exists('public/dists/maverick/main/dep11/README')
|
|
|
|
self.check_exists('public/dists/maverick/Release')
|
|
|
|
readme = self.read_file('public/dists/maverick/main/dep11/README')
|
|
if readme != 'README test file':
|
|
raise Exception("README file not copied on publish")
|
|
|
|
release = self.read_file('public/dists/maverick/Release')
|
|
if release == 'Release test file':
|
|
raise Exception("Release file was copied on publish")
|
|
|
|
release = self.read_file('public/dists/maverick/Release').split("\n")
|
|
release = [l for l in release if l.startswith(" ")]
|
|
pathsSeen = set()
|
|
for l in release:
|
|
fileHash, fileSize, path = l.split()
|
|
pathsSeen.add(path)
|
|
|
|
fileSize = int(fileSize)
|
|
|
|
st = os.stat(os.path.join(os.environ["HOME"], ".aptly", 'public/dists/maverick/', path))
|
|
if fileSize != st.st_size:
|
|
raise Exception("file size doesn't match for %s: %d != %d" % (path, fileSize, st.st_size))
|
|
|
|
if len(fileHash) == 32:
|
|
h = hashlib.md5()
|
|
elif len(fileHash) == 40:
|
|
h = hashlib.sha1()
|
|
elif len(fileHash) == 64:
|
|
h = hashlib.sha256()
|
|
else:
|
|
h = hashlib.sha512()
|
|
|
|
h.update(self.read_file(os.path.join('public/dists/maverick', path), mode='b'))
|
|
|
|
if h.hexdigest() != fileHash:
|
|
raise Exception("file hash doesn't match for %s: %s != %s" % (path, fileHash, h.hexdigest()))
|
|
|
|
if 'main/dep11/README' not in pathsSeen:
|
|
raise Exception("README file not included in release file")
|
|
|
|
|
|
class PublishRepo35Test(BaseTest):
|
|
"""
|
|
publish repo: signed-by
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -component=contrib -label=label35 -signed-by=comma,separated,string local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo35Test, self).check()
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
|
|
|
|
|
|
class PublishRepo36Test(BaseTest):
|
|
"""
|
|
publish repo: SOURCE_DATE_EPOCH produces byte-identical output
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -skip-signing -distribution=maverick local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
environmentOverride = {"SOURCE_DATE_EPOCH": "1234567890"}
|
|
|
|
def check(self):
|
|
super(PublishRepo36Test, self).check()
|
|
|
|
# verify Release file includes the expected date from SOURCE_DATE_EPOCH
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor_keep_date)
|
|
|
|
# save Release file from first publish
|
|
first_release = self.read_file('public/dists/maverick/Release')
|
|
|
|
# drop and republish with same SOURCE_DATE_EPOCH
|
|
self.run_cmd("aptly publish drop maverick")
|
|
self.run_cmd("aptly publish repo -skip-signing -distribution=maverick local-repo")
|
|
|
|
# verify byte-identical output
|
|
second_release = self.read_file('public/dists/maverick/Release')
|
|
self.check_equal(first_release, second_release)
|
|
|
|
|
|
class PublishRepo37Test(BaseTest):
|
|
"""
|
|
publish repo: custom version
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create local-repo",
|
|
"aptly repo add local-repo ${files}",
|
|
]
|
|
runCmd = "aptly publish repo -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -component=contrib -label=label37 -version=13.3 local-repo"
|
|
gold_processor = BaseTest.expand_environ
|
|
|
|
def check(self):
|
|
super(PublishRepo37Test, self).check()
|
|
|
|
# verify contents except of sums
|
|
self.check_file_contents(
|
|
'public/dists/maverick/Release', 'release', match_prepare=strip_processor)
|