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:
parent
efc648f32a
commit
345265e9d2
1 changed files with 56 additions and 1 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue