This repository has been archived by the owner on May 24, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
320 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# | ||
# Copyright (C) 2019 Red Hat, Inc | ||
# see the LICENSE file for license | ||
# | ||
import logging | ||
|
||
from flask import Blueprint, jsonify | ||
|
||
|
||
from .quay import QUAY_ORG_MANAGER, ReleaseVersion | ||
|
||
logger = logging.getLogger(__name__) | ||
BLUEPRINT = Blueprint('packages', __name__) | ||
|
||
|
||
@BLUEPRINT.route("/<organization>/<repo>/<version>", methods=('DELETE',)) | ||
def delete_package_release(organization, repo, version=None): | ||
""" | ||
Delete particular version of released package from quay.io | ||
:param organization: quay.io organization | ||
:param repo: target repository | ||
:param version: version of operator manifest | ||
:return: HTTP response | ||
""" | ||
quay_org = QUAY_ORG_MANAGER.organization_login(organization) | ||
|
||
# quay.io may contain OMPS incompatible release version format string | ||
# but we want to be able to delete everything there, thus using _raw | ||
# method | ||
if version is None: | ||
versions = quay_org.get_releases_raw(repo) | ||
else: | ||
versions = [version] | ||
|
||
for ver in versions: | ||
quay_org.delete_release(repo, ver) | ||
|
||
data = { | ||
'organization': organization, | ||
'repo': repo, | ||
'deleted': versions, | ||
} | ||
|
||
resp = jsonify(data) | ||
resp.status_code = 200 | ||
return resp | ||
|
||
|
||
@BLUEPRINT.route("/<organization>/<repo>", methods=('DELETE',)) | ||
def delete_package_releases_all(organization, repo): | ||
return delete_package_release(organization, repo, version=None) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
# | ||
# Copyright (C) 2019 Red Hat, Inc | ||
# see the LICENSE file for license | ||
# | ||
|
||
import pytest | ||
|
||
|
||
def test_delete_released_package( | ||
client, valid_manifests_archive, endpoint_packages, | ||
mocked_packages_delete_quay_io): | ||
"""Test REST API for deleting released operators manifest packages""" | ||
|
||
rv = client.delete( | ||
endpoint_packages.url_path, | ||
) | ||
|
||
assert rv.status_code == 200, rv.get_json() | ||
expected = { | ||
'organization': endpoint_packages.org, | ||
'repo': endpoint_packages.repo, | ||
'deleted': ["0.0.1"], | ||
} | ||
assert rv.get_json() == expected | ||
|
||
|
||
@pytest.mark.parametrize('endpoint', [ | ||
'/packages/organization-X/repo-Y', | ||
'/packages/organization-X/repo-Y/1.0.1', | ||
]) | ||
@pytest.mark.parametrize('method', [ | ||
'GET', 'PATCH' 'PUT', 'HEAD', 'POST', 'TRACE', | ||
]) | ||
def test_method_not_allowed(client, endpoint, method): | ||
"""Specified endpoints currently support only DELETE method, test if other | ||
HTTP methods returns proper error code | ||
Method OPTIONS is excluded from testing due its special meaning | ||
""" | ||
rv = client.open(endpoint, method=method) | ||
assert rv.status_code == 405 | ||
|
||
|
||
@pytest.mark.parametrize('endpoint', [ | ||
'/packages', | ||
'/packages/organization-X/', | ||
'/packages/organization-X/repo-Y/version-Z/extra-something', | ||
]) | ||
def test_404_for_mistyped_entrypoints(client, endpoint): | ||
"""Test if HTTP 404 is returned for unexpected endpoints""" | ||
rv = client.post(endpoint) | ||
assert rv.status_code == 404 | ||
rv_json = rv.get_json() | ||
assert rv_json['error'] == 'NotFound' | ||
assert rv_json['status'] == 404 |
Empty file.
Oops, something went wrong.