forked from pulp/pulp_python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_upload.py
More file actions
154 lines (135 loc) · 5.84 KB
/
Copy pathtest_upload.py
File metadata and controls
154 lines (135 loc) · 5.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
from urllib.parse import urljoin
import pytest
import requests
from pulp_python.tests.functional.constants import (
PYTHON_EGG_FILENAME,
PYTHON_EGG_SHA256,
PYTHON_EGG_URL,
PYTHON_FIXTURES_URL,
PYTHON_WHEEL_FILENAME,
PYTHON_WHEEL_SHA256,
PYTHON_WHEEL_URL,
)
from pulp_python.tests.functional.utils import ensure_metadata
@pytest.mark.parametrize(
"pkg_filename, pkg_url",
[(PYTHON_WHEEL_FILENAME, PYTHON_WHEEL_URL), (PYTHON_EGG_FILENAME, PYTHON_EGG_URL)],
)
def test_synchronous_package_upload(
delete_orphans_pre, download_python_file, gen_user, python_bindings, pkg_filename, pkg_url
):
"""
Test synchronously uploading a Python package with labels.
"""
python_file = download_python_file(pkg_filename, pkg_url)
# Upload a unit with labels
with gen_user(model_roles=["python.python_package_uploader"]):
labels = {"key_1": "value_1"}
content_body = {"file": python_file, "pulp_labels": labels}
package = python_bindings.ContentPackagesApi.upload(**content_body)
assert package.pulp_labels == labels
assert package.name == "shelf-reader"
assert package.filename == pkg_filename
# Check that uploading the same unit again with different (or same) labels has no effect
with gen_user(model_roles=["python.python_package_uploader"]):
labels_2 = {"key_2": "value_2"}
content_body_2 = {"file": python_file, "pulp_labels": labels_2}
duplicate_package = python_bindings.ContentPackagesApi.upload(**content_body_2)
assert duplicate_package.pulp_href == package.pulp_href
assert duplicate_package.pulp_labels == package.pulp_labels
assert duplicate_package.pulp_labels != labels_2
# Check that the upload fails if the user does not have the required permissions
with gen_user(model_roles=[]):
with pytest.raises(python_bindings.ApiException) as ctx:
python_bindings.ContentPackagesApi.upload(**content_body)
assert ctx.value.status == 403
@pytest.mark.parallel
def test_synchronous_package_upload_with_metadata(
download_python_file,
monitor_task,
pulp_content_url,
python_bindings,
python_distribution_factory,
python_repo,
):
"""
Test that the synchronous upload of a Python wheel package creates a metadata artifact.
"""
wheel_filename = "setuptools-80.9.0-py3-none-any.whl"
wheel_url = urljoin(urljoin(PYTHON_FIXTURES_URL, "packages/"), wheel_filename)
python_file = download_python_file(wheel_filename, wheel_url)
content_body = {"file": python_file}
content = python_bindings.ContentPackagesApi.upload(**content_body)
body = {"add_content_units": [content.pulp_href]}
monitor_task(python_bindings.RepositoriesPythonApi.modify(python_repo.pulp_href, body).task)
distro = python_distribution_factory(repository=python_repo)
# Test that metadata is accessible
ensure_metadata(pulp_content_url, distro.base_path, wheel_filename, "setuptools", "80.9.0")
@pytest.mark.parallel
def test_legacy_upload_invalid_protocol_version(
python_empty_repo_distro, python_package_dist_directory
):
_, egg_file, _ = python_package_dist_directory(PYTHON_EGG_URL, PYTHON_WHEEL_URL)
_, distro = python_empty_repo_distro()
url = urljoin(distro.base_url, "legacy/")
with open(egg_file, "rb") as f:
response = requests.post(
url,
data={"sha256_digest": PYTHON_EGG_SHA256, "protocol_version": 2},
files={"content": f},
auth=("admin", "password"),
)
assert response.status_code == 400
assert response.json()["protocol_version"] == ['"2" is not a valid choice.']
with open(egg_file, "rb") as f:
response = requests.post(
url,
data={"sha256_digest": PYTHON_EGG_SHA256, "protocol_version": 0},
files={"content": f},
auth=("admin", "password"),
)
assert response.status_code == 400
assert response.json()["protocol_version"] == ['"0" is not a valid choice.']
@pytest.mark.parallel
def test_legacy_upload_invalid_filetype(python_empty_repo_distro, python_package_dist_directory):
_, egg_file, wheel_file = python_package_dist_directory(PYTHON_EGG_URL, PYTHON_WHEEL_URL)
_, distro = python_empty_repo_distro()
url = urljoin(distro.base_url, "legacy/")
with open(egg_file, "rb") as f:
response = requests.post(
url,
data={"sha256_digest": PYTHON_EGG_SHA256, "filetype": "bdist_wheel"},
files={"content": f},
auth=("admin", "password"),
)
assert response.status_code == 400
assert response.json()["filetype"] == [
"filetype bdist_wheel does not match found filetype sdist for file shelf-reader-0.1.tar.gz"
]
with open(wheel_file, "rb") as f:
response = requests.post(
url,
data={"sha256_digest": PYTHON_WHEEL_SHA256, "filetype": "sdist"},
files={"content": f},
auth=("admin", "password"),
)
assert response.status_code == 400
assert response.json()["filetype"] == [
"filetype sdist does not match found filetype bdist_wheel for file shelf_reader-0.1-py2-none-any.whl" # noqa: E501
]
@pytest.mark.parallel
def test_legacy_upload_invalid_metadata_version(
python_empty_repo_distro, python_package_dist_directory
):
_, egg_file, _ = python_package_dist_directory(PYTHON_EGG_URL, PYTHON_WHEEL_URL)
_, distro = python_empty_repo_distro()
url = urljoin(distro.base_url, "legacy/")
with open(egg_file, "rb") as f:
response = requests.post(
url,
data={"sha256_digest": PYTHON_EGG_SHA256, "metadata_version": "3.0"},
files={"content": f},
auth=("admin", "password"),
)
assert response.status_code == 400
assert response.json()["metadata_version"] == ['"3.0" is not a valid choice.']