test/builder: check manifest fetching

Add a test that checks that manifests are indeed uploaded and
another test that simulates a failure while fetching manifests.
This commit is contained in:
Christian Kellner 2021-02-25 14:31:34 +01:00
parent efc648f32a
commit 345265e9d2

View file

@ -70,7 +70,8 @@ class MockComposer:
"result": compose, "result": compose,
"status": self.status, "status": self.status,
"routes": { "routes": {
"logs": 200 "logs": 200,
"manifests": 200
} }
} }
@ -86,6 +87,12 @@ class MockComposer:
body=self.compose_logs body=self.compose_logs
) )
httpretty.register_uri(
httpretty.GET,
urllib.parse.urljoin(self.url, "compose/" + compose_id + "/manifests"),
body=self.compose_manifests
)
return [201, response_headers, json.dumps(compose)] return [201, response_headers, json.dumps(compose)]
def compose_status(self, _request, uri, response_headers): def compose_status(self, _request, uri, response_headers):
@ -125,6 +132,24 @@ class MockComposer:
} }
return [200, response_headers, json.dumps(result)] return [200, response_headers, json.dumps(result)]
def compose_manifests(self, _request, uri, response_headers):
route = self.routes.get("manifests")
if route and route["status"] != 200:
return [route["status"], response_headers, "Internal error"]
target = os.path.basename(os.path.dirname(uri))
compose = self.composes.get(target)
if not compose:
return [400, response_headers, f"Unknown compose: {target}"]
ireqs = compose["request"]["image_requests"]
result = [
{"sources": {}, "pipeline": {}} for _ in ireqs
]
return [200, response_headers, json.dumps(result)]
class UploadTracker: class UploadTracker:
"""Mock koji file uploading and keep track of uploaded files """Mock koji file uploading and keep track of uploaded files
@ -481,6 +506,7 @@ class TestBuilderPlugin(PluginTest):
# check uploads: logs, compose request # check uploads: logs, compose request
for arch in arches: for arch in arches:
self.uploads.assert_upload(f"{arch}-image_type.log.json") self.uploads.assert_upload(f"{arch}-image_type.log.json")
self.uploads.assert_upload(f"{arch}-image_type.manifest.json")
self.uploads.assert_upload("compose-request.json") self.uploads.assert_upload("compose-request.json")
self.uploads.assert_upload("compose-status.json") self.uploads.assert_upload("compose-status.json")
self.uploads.assert_upload("koji-init.log.json") self.uploads.assert_upload("koji-init.log.json")
@ -513,6 +539,7 @@ class TestBuilderPlugin(PluginTest):
self.uploads.assert_upload("compose-request.json") self.uploads.assert_upload("compose-request.json")
self.uploads.assert_upload("x86_64-image_type.log.json") self.uploads.assert_upload("x86_64-image_type.log.json")
self.uploads.assert_upload("x86_64-image_type.manifest.json")
self.uploads.assert_upload("compose-status.json") self.uploads.assert_upload("compose-status.json")
# build must not have been tagged # build must not have been tagged
self.assertEqual(len(session.host.tags), 0) self.assertEqual(len(session.host.tags), 0)
@ -545,6 +572,34 @@ class TestBuilderPlugin(PluginTest):
with self.assertRaises(AssertionError): with self.assertRaises(AssertionError):
self.uploads.assert_upload("x86_64-image_type.log.json") self.uploads.assert_upload("x86_64-image_type.log.json")
@httpretty.activate
def test_compose_no_manifest(self):
# Simulate fetching the manifests fails, a non-fatal issue
session = self.mock_session()
handler = self.make_handler(session=session)
url = self.plugin.DEFAULT_COMPOSER_URL
composer = MockComposer(url)
composer.httpretty_regsiter()
args = ["name", "version", "distro",
["image_type"],
"fedora-candidate",
composer.architectures,
{}]
composer.routes["manifests"] = {
"status": 500
}
res = handler.handler(*args)
assert res, "invalid compose result"
self.uploads.assert_upload("compose-request.json")
with self.assertRaises(AssertionError):
self.uploads.assert_upload("x86_64-image_type.manifest.json")
@httpretty.activate @httpretty.activate
def test_skip_tag(self): def test_skip_tag(self):
# Simulate a successful compose, where the tagging # Simulate a successful compose, where the tagging