mirror of https://github.com/aptly-dev/aptly
560 lines
18 KiB
Python
560 lines
18 KiB
Python
import tempfile
|
|
import shutil
|
|
import os
|
|
import inspect
|
|
import re
|
|
from lib import BaseTest
|
|
|
|
|
|
def gpgRemove(_, s):
|
|
return re.sub(r'Signature made .* using|gpgv: keyblock resource .*$|gpgv: Can\'t check signature: .*$', '', s, flags=re.MULTILINE)
|
|
|
|
|
|
def changesRemove(_, s):
|
|
return s.replace(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), "")
|
|
|
|
|
|
def tempDirRemove(self, s):
|
|
return s.replace(self.tempSrcDir, "")
|
|
|
|
|
|
class IncludeRepo1Test(BaseTest):
|
|
"""
|
|
include packages to local repo: .changes file from directory
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
outputMatchPrepare = gpgRemove
|
|
|
|
def check(self):
|
|
self.check_output()
|
|
self.check_cmd_output("aptly repo show -with-packages unstable", "repo_show")
|
|
|
|
# check pool
|
|
self.check_exists('pool/66/83/99580590bf1ffcd9eb161b6e5747_hardlink_0.2.1_amd64.deb')
|
|
self.check_exists('pool/c0/d7/458aa2ca3886cd6885f395a289ef_hardlink_0.2.1.dsc')
|
|
self.check_exists('pool/4d/f0/adce005526a1f0e1b38171ddb1f0_hardlink_0.2.1.tar.gz')
|
|
|
|
|
|
class IncludeRepo2Test(BaseTest):
|
|
"""
|
|
include packages to local repo: .changes file from file + custom repo
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create my-unstable",
|
|
"aptly repo add my-unstable ${files}",
|
|
]
|
|
runCmd = "aptly repo include -no-remove-files -keyring=${files}/aptly.pub -repo=my-{{.Distribution}} ${changes}/hardlink_0.2.1_amd64.changes"
|
|
outputMatchPrepare = gpgRemove
|
|
|
|
def check(self):
|
|
self.check_output()
|
|
self.check_cmd_output("aptly repo show -with-packages my-unstable", "repo_show")
|
|
|
|
# check pool
|
|
self.check_exists('pool/66/83/99580590bf1ffcd9eb161b6e5747_hardlink_0.2.1_amd64.deb')
|
|
self.check_exists('pool/c0/d7/458aa2ca3886cd6885f395a289ef_hardlink_0.2.1.dsc')
|
|
self.check_exists('pool/4d/f0/adce005526a1f0e1b38171ddb1f0_hardlink_0.2.1.tar.gz')
|
|
|
|
|
|
class IncludeRepo3Test(BaseTest):
|
|
"""
|
|
include packages to local repo: broken repo flag
|
|
"""
|
|
fixtureCmds = [
|
|
]
|
|
runCmd = "aptly repo include -no-remove-files -keyring=${files}/aptly.pub -repo=my-{{.Distribution} ${changes}"
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return s.replace('; missing space?', '')
|
|
|
|
|
|
class IncludeRepo4Test(BaseTest):
|
|
"""
|
|
include packages to local repo: missing repo
|
|
"""
|
|
fixtureCmds = [
|
|
]
|
|
runCmd = "aptly repo include -no-remove-files -ignore-signatures -keyring=${files}/aptly.pub ${changes}"
|
|
outputMatchPrepare = changesRemove
|
|
expectedCode = 1
|
|
|
|
|
|
class IncludeRepo5Test(BaseTest):
|
|
"""
|
|
include packages to local repo: remove files being added
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
|
outputMatchPrepare = gpgRemove
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo5Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "files", "pyspi_0.6.1-1.3.diff.gz"),
|
|
os.path.join(self.tempSrcDir, "01", "pyspi_0.6.1-1.3.diff.gz"))
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
self.check_output()
|
|
self.check_cmd_output("aptly repo show -with-packages unstable", "repo_show")
|
|
|
|
# check pool
|
|
self.check_exists('pool/66/83/99580590bf1ffcd9eb161b6e5747_hardlink_0.2.1_amd64.deb')
|
|
self.check_exists('pool/c0/d7/458aa2ca3886cd6885f395a289ef_hardlink_0.2.1.dsc')
|
|
self.check_exists('pool/4d/f0/adce005526a1f0e1b38171ddb1f0_hardlink_0.2.1.tar.gz')
|
|
|
|
for path in ["hardlink_0.2.1.dsc", "hardlink_0.2.1.tar.gz", "hardlink_0.2.1_amd64.changes", "hardlink_0.2.1_amd64.deb"]:
|
|
path = os.path.join(self.tempSrcDir, "01", path)
|
|
if os.path.exists(path):
|
|
raise Exception("path %s shouldn't exist" % (path, ))
|
|
|
|
path = os.path.join(self.tempSrcDir, "01", "pyspi_0.6.1-1.3.diff.gz")
|
|
if not os.path.exists(path):
|
|
raise Exception("path %s doesn't exist" % (path, ))
|
|
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo6Test(BaseTest):
|
|
"""
|
|
include packages to local repo: missing files
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo6Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
os.makedirs(os.path.join(self.tempSrcDir, "01"), 0o755)
|
|
|
|
for path in ["hardlink_0.2.1.dsc", "hardlink_0.2.1_amd64.changes", "hardlink_0.2.1_amd64.deb"]:
|
|
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes", path),
|
|
os.path.join(self.tempSrcDir, "01", path))
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo6Test, self).check()
|
|
|
|
for path in ["hardlink_0.2.1.dsc", "hardlink_0.2.1_amd64.changes", "hardlink_0.2.1_amd64.deb"]:
|
|
path = os.path.join(self.tempSrcDir, "01", path)
|
|
if not os.path.exists(path):
|
|
raise Exception("path %s doesn't exist" % (path, ))
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo7Test(BaseTest):
|
|
"""
|
|
include packages to local repo: wrong checksum
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo7Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1.dsc"), "w") as f:
|
|
f.write("A" * 949) # file size
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo7Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo8Test(BaseTest):
|
|
"""
|
|
include packages to local repo: wrong signature
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo8Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
|
contents = f.read()
|
|
f.seek(0, 0)
|
|
f.write(contents.replace('Julian', 'Andrey'))
|
|
f.truncate()
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo8Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo9Test(BaseTest):
|
|
"""
|
|
include packages to local repo: unsigned
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo9Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
|
contents = f.readlines()
|
|
contents = contents[3:31]
|
|
f.seek(0, 0)
|
|
f.write("".join(contents))
|
|
f.truncate()
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo9Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo10Test(BaseTest):
|
|
"""
|
|
include packages to local repo: wrong signature + -ignore-signatures
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -ignore-signatures "
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo10Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
|
contents = f.read()
|
|
f.seek(0, 0)
|
|
f.write(contents.replace('Julian', 'Andrey'))
|
|
f.truncate()
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo10Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo11Test(BaseTest):
|
|
"""
|
|
include packages to local repo: unsigned + -accept-unsigned
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -accept-unsigned -keyring=${files}/aptly.pub "
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo11Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
|
contents = f.readlines()
|
|
contents = contents[3:31]
|
|
f.seek(0, 0)
|
|
f.write("".join(contents))
|
|
f.truncate()
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo11Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo12Test(BaseTest):
|
|
"""
|
|
include packages to local repo: unsigned + -accept-unsigned + restriction breakage
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -accept-unsigned -keyring=${files}/aptly.pub "
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo12Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
|
contents = f.readlines()
|
|
contents = contents[3:31]
|
|
contents[3] = "Binary: hardlink-dbg\n"
|
|
f.seek(0, 0)
|
|
f.write("".join(contents))
|
|
f.truncate()
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo12Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo13Test(BaseTest):
|
|
"""
|
|
include packages to local repo: with denying uploaders.json
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -uploaders-file=${changes}/uploaders1.json -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo14Test(BaseTest):
|
|
"""
|
|
include packages to local repo: allow with uploaders.json
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -uploaders-file=${changes}/uploaders2.json -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo15Test(BaseTest):
|
|
"""
|
|
include packages to local repo: no uploaders.json
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -uploaders-file=${changes}/uploaders-404.json -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo16Test(BaseTest):
|
|
"""
|
|
include packages to local repo: malformed JSON
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -uploaders-file=${changes}/uploaders3.json -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo17Test(BaseTest):
|
|
"""
|
|
include packages to local repo: malformed rule
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -uploaders-file=${changes}/uploaders4.json -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo18Test(BaseTest):
|
|
"""
|
|
include packages to local repo: repo uploaders.json + global uploaders.json
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -uploaders-file=${changes}/uploaders2.json unstable",
|
|
]
|
|
runCmd = "aptly repo include -uploaders-file=${changes}/uploaders1.json -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo19Test(BaseTest):
|
|
"""
|
|
include packages to local repo: per-repo uploaders.json
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create -uploaders-file=${changes}/uploaders1.json unstable",
|
|
]
|
|
runCmd = "aptly repo include -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
expectedCode = 1
|
|
|
|
def outputMatchPrepare(_, s):
|
|
return changesRemove(_, gpgRemove(_, s))
|
|
|
|
|
|
class IncludeRepo20Test(BaseTest):
|
|
"""
|
|
include packages to local repo: .changes file from directory (internal PGP implementation)
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -no-remove-files -keyring=${files}/aptly.pub ${changes}"
|
|
outputMatchPrepare = gpgRemove
|
|
configOverride = {"gpgProvider": "internal"}
|
|
|
|
|
|
class IncludeRepo21Test(BaseTest):
|
|
"""
|
|
include packages to local repo: wrong signature (internal PGP implementation)
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create unstable",
|
|
]
|
|
runCmd = "aptly repo include -keyring=${files}/aptly.pub "
|
|
expectedCode = 1
|
|
configOverride = {"gpgProvider": "internal"}
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo21Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
|
|
shutil.copytree(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes"), os.path.join(self.tempSrcDir, "01"))
|
|
|
|
with open(os.path.join(self.tempSrcDir, "01", "hardlink_0.2.1_amd64.changes"), "r+") as f:
|
|
contents = f.read()
|
|
f.seek(0, 0)
|
|
f.write(contents.replace('Julian', 'Andrey'))
|
|
f.truncate()
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo21Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|
|
|
|
|
|
class IncludeRepo22Test(BaseTest):
|
|
"""
|
|
include packages to local repo: missing files, but files aready in the pool
|
|
"""
|
|
fixtureCmds = [
|
|
"aptly repo create stable",
|
|
"aptly repo create unstable",
|
|
"aptly repo add stable ${changes}"
|
|
]
|
|
runCmd = "aptly repo include -ignore-signatures -keyring=${files}/aptly.pub "
|
|
|
|
def outputMatchPrepare(self, s):
|
|
return gpgRemove(self, tempDirRemove(self, s))
|
|
|
|
def prepare(self):
|
|
super(IncludeRepo22Test, self).prepare()
|
|
|
|
self.tempSrcDir = tempfile.mkdtemp()
|
|
os.makedirs(os.path.join(self.tempSrcDir, "01"), 0o755)
|
|
|
|
for path in ["hardlink_0.2.1.dsc", "hardlink_0.2.1_amd64.deb"]:
|
|
shutil.copy(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes", path),
|
|
os.path.join(self.tempSrcDir, "01", path))
|
|
|
|
path = "hardlink_0.2.1_amd64.changes"
|
|
with open(os.path.join(os.path.dirname(inspect.getsourcefile(BaseTest)), "changes", path), "r") as source:
|
|
with open(os.path.join(self.tempSrcDir, "01", path), "w") as dest:
|
|
content = source.readlines()
|
|
# remove reference to .tar.gz file
|
|
content = [line for line in content if "hardlink_0.2.1.tar.gz" not in line]
|
|
dest.write("".join(content))
|
|
|
|
self.runCmd += self.tempSrcDir
|
|
|
|
def check(self):
|
|
try:
|
|
super(IncludeRepo22Test, self).check()
|
|
finally:
|
|
shutil.rmtree(self.tempSrcDir)
|