Actions
Issue #4910
closedAnsibleDistribution allows setting repo and repo_version together in a PUT request
Start date:
Due date:
Estimated time:
Severity:
2. Medium
Platform Release:
OS:
Triaged:
Yes
Groomed:
No
Sprint Candidate:
No
Tags:
Sprint:
Sprint 56
Quarter:
Description
As stated in https://pulp.plan.io/issues/4846
4. Update the AnsibleDistribution to set both 'repository' and 'repository_version' and verify it rejects it. These options cannot be used together
It is true for a POST request, however when using a PUT to update existing distribution it allows both fields to exist together.
How to reproduce it: (Using pulp-smash shell)¶
Having `pulp-smash` installed do
$ cd pulp_ansible
$ export PULP_SMASH_CONFIG_FILE=path/to/settings.json
$ pulp-smash shell
Now inside pulp-smash shell run the following script (if ipython is installed you must be able to copy-paste the whole script)
from pulp_ansible.tests.functional import constants as ct
# create a repo
repo = api.client.post(pulp3.constants.REPO_PATH, pulp3.utils.gen_repo())
# create ansible galaxy role remote
_url = 'https://galaxy.ansible.com/api/v1/roles/?namespace__name=elastic'
_body = pulp3.utils.gen_remote(url=_url)
remote = api.client.post(ct.ANSIBLE_REMOTE_PATH, _body)
# sync it
pulp3.utils.sync(cfg, remote, repo)
repo = api.client.get(repo['_href'])
# create ansible distribution
_body = pulp3.utils.gen_distribution(repository=repo['_href'])
dist = api.client.post(ct.ANSIBLE_DISTRIBUTION_PATH, _body)
# Assert distribution has repository but not repository_version
assert dist['repository'] is not None
assert dist['repository_version'] is None
# Patch dist removing repository and setting repository version
api.client.patch(dist['_href'], {'repository': None})
api.client.patch(dist['_href'], {'repository_version': repo['_latest_version_href']})
# re-read the dist
dist = api.client.get(dist['_href'])
# Assert distribution now has repository_version but not repository
assert dist['repository'] is None
assert dist['repository_version'] is not None
# Now We try to use a `PUT` to replace the whole distribution
# the new object will have only repository but not repository_version
new_dist = dist.copy()
new_dist['repository'] = repo['_href']
del new_dist['repository_version']
assert 'repository_version' not in new_dist
assert new_dist['repository'] == repo['_href']
# Perform the PUT replacing the whole distribution
api.client.put(dist['_href'], new_dist)
# Re-read the distribution
dist = api.client.get(dist['_href'])
# Notice that the distribution now has repository and repository_version together
assert dist['repository'] == repo['_href'] # passes
assert dist['repository_version'] is None # fails
Actual results:¶
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
~/Projects/pulp/pulp-smash/pulp_smash/pulp_smash_cli.py in <module>
51
52 assert dist['repository'] == repo['_href'] # passes
---> 53 assert dist['repository_version'] is None # fails
AssertionError:
Expected results:¶
No error since the PUT replaced the whole object.
Related issues
Updated by rochacbruno over 5 years ago
- Related to Test #4846: CRUD RepositoryVersionDistribution added
Updated by daviddavis over 5 years ago
- Triaged changed from No to Yes
- Sprint set to Sprint 54
Updated by dkliban@redhat.com over 5 years ago
- Sprint changed from Sprint 55 to Sprint 56
Updated by daviddavis over 5 years ago
- Status changed from NEW to ASSIGNED
- Assignee set to fao89
Updated by fao89 over 5 years ago
- Status changed from ASSIGNED to CLOSED - WORKSFORME
(pulp) [vagrant@pulp3-source-fedora28 hello]$ http POST $BASE_ADDR/pulp/api/v3/distributions/ansible/ansible/ \
> name='baz10' \
> base_path='foo10' \
> repository=${REPO_HREF} \
> repository_version=${REPO_HREF}versions/1/
HTTP/1.1 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Connection: close
Content-Length: 102
Content-Type: application/json
Date: Fri, 26 Jul 2019 17:40:55 GMT
Server: gunicorn/19.9.0
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
{
"non_field_errors": [
"The attributes 'repository' and 'repository_version' must be usedexclusively."
]
}
(pulp) [vagrant@pulp3-source-fedora28 devel]$ http PUT $BASE_ADDR/pulp/api/v3/distributions/ansible/ansible/4262ed83-e86c-4a13-baff-fc543c46a391/ \
> name='baz10' \
> base_path='foo10' \
> repository=${REPO_HREF} \
> repository_version=${REPO_HREF}versions/1/
HTTP/1.1 400 Bad Request
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Connection: close
Content-Length: 102
Content-Type: application/json
Date: Fri, 26 Jul 2019 17:49:01 GMT
Server: gunicorn/19.9.0
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN
{
"non_field_errors": [
"The attributes 'repository' and 'repository_version' must be usedexclusively."
]
}
Updated by fao89 over 5 years ago
- Status changed from CLOSED - WORKSFORME to ASSIGNED
=================================== FAILURES ===================================
RepositoryVersionDistributionTestCase.test_05_positive_full_update_distribution_to_use_repo
self = <pulp_ansible.tests.functional.api.role.test_crd_distribution.RepositoryVersionDistributionTestCase testMethod=test_05_positive_full_update_distribution_to_use_repo>
@skip_if(bool, "distribution", False)
@skip_if(bool, "repo", False)
def test_05_positive_full_update_distribution_to_use_repo(self):
"""Put a distribution with 'repository' field set."""
if not selectors.bug_is_fixed(4910, self.cfg.pulp_version):
raise unittest.SkipTest("Issue 4910 is not resolved")
new_dist = self.distribution.copy()
new_dist["repository"] = self.repo["_href"]
del new_dist["repository_version"]
del self.distribution["repository_version"]
self.distribution.update(self.client.put(self.distribution["_href"], new_dist))
self.assertEqual(self.distribution["repository"], self.repo["_href"])
> self.assertIsNone(self.distribution["repository_version"])
E AssertionError: '/pulp/api/v3/repositories/c8047abd-eb82-4718-9f35-80beb674755b/versions/1/' is not None
pulp_ansible/tests/functional/api/role/test_crd_distribution.py:132: AssertionError
Updated by fao89 over 5 years ago
- Status changed from ASSIGNED to POST
Added by Fabricio Aguiar over 5 years ago
Updated by Anonymous over 5 years ago
- Status changed from POST to MODIFIED
Applied in changeset pulp:pulpcore|ce2a9647b713a8f910b9324b460efaa8d48e8e25.
Added by Fabricio Aguiar over 5 years ago
Revision 43357cf9 | View on GitHub
update test for 4910
ref #4910
Updated by bmbouter over 4 years ago
- Status changed from MODIFIED to CLOSED - CURRENTRELEASE
Actions
assure exclusively on repository serializer
closes #4910