130 lines
5.2 KiB
Python
130 lines
5.2 KiB
Python
import unittest
|
|
|
|
from container_cleaner import ContainerCleaner
|
|
|
|
|
|
class MockedContainerCleaner(ContainerCleaner):
|
|
def __init__(self, container_arch_map):
|
|
self.container_arch_map = container_arch_map
|
|
|
|
def getDirEntries(self, path):
|
|
"""Mock certain OBS APIs returning directory entries"""
|
|
if path == ["source", "mock:prj"]:
|
|
srccontainers = [a.split(":")[0] for a in self.container_arch_map.keys()]
|
|
return list(set(srccontainers)) # Remove duplicates
|
|
elif path == ["build", "mock:prj", "containers"]:
|
|
all_archs = []
|
|
for archs in self.container_arch_map.values():
|
|
all_archs += archs
|
|
|
|
return list(set(all_archs))
|
|
elif path[0:3] == ["build", "mock:prj", "containers"] and len(path) == 4:
|
|
ret = []
|
|
for srccontainer in self.container_arch_map:
|
|
ret += [srccontainer]
|
|
|
|
return ret
|
|
else:
|
|
raise RuntimeError("Path %s not expected" % path)
|
|
|
|
def getDirBinaries(self, path):
|
|
"""Mock certain OBS APIs returning a list of binaries"""
|
|
if path[0:3] == ["build", "mock:prj", "containers"] and len(path) == 5:
|
|
arch = path[3]
|
|
srccontainer = path[4]
|
|
if arch in self.container_arch_map[srccontainer]:
|
|
return ["A binary"]
|
|
|
|
return []
|
|
else:
|
|
raise RuntimeError("Path %s not expected" % path)
|
|
|
|
|
|
class TestContainerCleaner(unittest.TestCase):
|
|
def doTest(self, container_arch_map, to_be_deleted_exp):
|
|
cleaner = MockedContainerCleaner(container_arch_map)
|
|
to_be_deleted = cleaner.findSourcepkgsToDelete("mock:prj")
|
|
to_be_deleted.sort()
|
|
self.assertEqual(to_be_deleted, to_be_deleted_exp)
|
|
|
|
def test_empty(self):
|
|
"""Empty project, do nothing"""
|
|
container_arch_map = {}
|
|
|
|
to_be_deleted_exp = []
|
|
|
|
return self.doTest(container_arch_map, to_be_deleted_exp)
|
|
|
|
def test_nothingToDo(self):
|
|
"""Non-empty project, still do nothing"""
|
|
container_arch_map = {"c": ["i586", "x86_64"],
|
|
"c.01": ["i586"],
|
|
"c.02": ["x86_64"],
|
|
"c.04": ["i586", "x86_64"],
|
|
"c.06": ["i586"],
|
|
"c.07": ["x86_64"],
|
|
"c.08": ["i586", "x86_64"],
|
|
"c.11": [],
|
|
"d.42": [], "d.43": []}
|
|
|
|
to_be_deleted_exp = []
|
|
|
|
return self.doTest(container_arch_map, to_be_deleted_exp)
|
|
|
|
def test_multiplePackages(self):
|
|
"""Multiple packages in one project"""
|
|
container_arch_map = {"c": ["i586", "x86_64"],
|
|
"c.01": ["i586"],
|
|
"c.02": ["x86_64"],
|
|
"c.03": [],
|
|
"c.04": ["i586", "x86_64"],
|
|
"c.05": ["i586", "x86_64"],
|
|
"c.06": ["i586"],
|
|
"c.07": ["x86_64"],
|
|
"c.08": ["i586", "x86_64"],
|
|
"c.09": ["i586", "x86_64"],
|
|
"c.10": ["i586", "x86_64"],
|
|
"c.11": [],
|
|
"d.42": [], "d.43": [],
|
|
"e.51": ["i586"],
|
|
"e.52": ["aarch64"],
|
|
"e.53": ["i586"],
|
|
"e.54": ["i586"],
|
|
"e.55": ["i586"],
|
|
"e.56": ["i586"],
|
|
"e.57": ["i586"]}
|
|
|
|
to_be_deleted_exp = ["c", "c.01", "c.02", "c.03", "c.04",
|
|
"e.51"]
|
|
|
|
return self.doTest(container_arch_map, to_be_deleted_exp)
|
|
|
|
def test_multibuild(self):
|
|
"""Packages using _multbuild.
|
|
There is no special handling for _multibuild - It's enough if any flavor has binaries."""
|
|
container_arch_map = {"c:docker": ["i586", "x86_64"],
|
|
"c.01:docker": ["i586"],
|
|
"c.02:lxc": ["x86_64"],
|
|
"c.03:docker": [],
|
|
"c.04": ["i586", "x86_64"],
|
|
"c.05:docker": ["i586", "x86_64"],
|
|
"c.06:docker": ["i586"],
|
|
"c.07:docker": ["x86_64"],
|
|
"c.08:docker": ["i586", "x86_64"],
|
|
"c.09:docker": ["i586", "x86_64"],
|
|
"c.10:docker": ["i586", "x86_64"],
|
|
"c.11:docker": [],
|
|
"d.42:lxc": [], "d.43": [],
|
|
"e.51": ["i586"],
|
|
"e.52": ["aarch64"],
|
|
"e.53": ["i586"],
|
|
"e.54:docker": ["i586"],
|
|
"e.55:docker": ["i586"],
|
|
"e.56": ["i586"],
|
|
"e.57": ["i586"]}
|
|
|
|
to_be_deleted_exp = ["c", "c.01", "c.02", "c.03", "c.04",
|
|
"e.51"]
|
|
|
|
return self.doTest(container_arch_map, to_be_deleted_exp)
|