From ced362a50d7825e51d7a160f6c14769a8f9b7338 Mon Sep 17 00:00:00 2001 From: Sloane Hertel <19572925+s-hertel@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:29:12 -0400 Subject: [PATCH] ansible-galaxy - remove deprecated v2 API (#85830) * ansible-galaxy - remove deprecated v2 API Update unit tests exercising the v2 Galaxy API Remove v2 API integration tests * Remove internal test configuration for servers which support API v2 and v3 * Update and simplify verify tests by using the configured server list --- changelogs/fragments/remove-v2-galaxy-api.yml | 2 + lib/ansible/cli/galaxy.py | 19 -- lib/ansible/config/manager.py | 2 - lib/ansible/galaxy/api.py | 86 ++----- .../targets/ansible-config/tasks/main.yml | 4 - .../tasks/install.yml | 77 ++---- .../ansible-galaxy-collection/tasks/main.yml | 17 +- .../tasks/verify.yml | 38 ++- .../templates/ansible.cfg.j2 | 8 +- test/sanity/ignore.txt | 1 - test/units/galaxy/test_api.py | 231 ++++++------------ test/units/galaxy/test_collection.py | 4 +- 12 files changed, 153 insertions(+), 336 deletions(-) create mode 100644 changelogs/fragments/remove-v2-galaxy-api.yml diff --git a/changelogs/fragments/remove-v2-galaxy-api.yml b/changelogs/fragments/remove-v2-galaxy-api.yml new file mode 100644 index 00000000000..d173aea7430 --- /dev/null +++ b/changelogs/fragments/remove-v2-galaxy-api.yml @@ -0,0 +1,2 @@ +removed_features: +- ansible-galaxy - removed the v2 Galaxy server API. Galaxy servers hosting collections must support v3. diff --git a/lib/ansible/cli/galaxy.py b/lib/ansible/cli/galaxy.py index 6fc310ea6b1..5d85a57bbf1 100755 --- a/lib/ansible/cli/galaxy.py +++ b/lib/ansible/cli/galaxy.py @@ -654,23 +654,10 @@ class GalaxyCLI(CLI): client_secret = server_options.pop('client_secret') token_val = server_options['token'] or NoTokenSentinel username = server_options['username'] - api_version = server_options.pop('api_version') if server_options['validate_certs'] is None: server_options['validate_certs'] = context.CLIARGS['resolved_validate_certs'] validate_certs = server_options['validate_certs'] - # This allows a user to explicitly force use of an API version when - # multiple versions are supported. This was added for testing - # against pulp_ansible and I'm not sure it has a practical purpose - # outside of this use case. As such, this option is not documented - # as of now - if api_version: - display.warning( - f'The specified "api_version" configuration for the galaxy server "{server_key}" is ' - 'not a public configuration, and may be removed at any time without warning.' - ) - server_options['available_api_versions'] = {'v%s' % api_version: '/v%s' % api_version} - # default case if no auth info is provided. server_options['token'] = None @@ -697,12 +684,6 @@ class GalaxyCLI(CLI): )) cmd_server = context.CLIARGS['api_server'] - if context.CLIARGS['api_version']: - api_version = context.CLIARGS['api_version'] - display.warning( - 'The --api-version is not a public argument, and may be removed at any time without warning.' - ) - galaxy_options['available_api_versions'] = {'v%s' % api_version: '/v%s' % api_version} cmd_token = GalaxyToken(token=context.CLIARGS['api_key']) diff --git a/lib/ansible/config/manager.py b/lib/ansible/config/manager.py index 33f398e199b..cf67f53a65a 100644 --- a/lib/ansible/config/manager.py +++ b/lib/ansible/config/manager.py @@ -36,7 +36,6 @@ GALAXY_SERVER_DEF = [ ('password', False, 'str'), ('token', False, 'str'), ('auth_url', False, 'str'), - ('api_version', False, 'int'), ('validate_certs', False, 'bool'), ('client_id', False, 'str'), ('client_secret', False, 'str'), @@ -45,7 +44,6 @@ GALAXY_SERVER_DEF = [ # config definition fields GALAXY_SERVER_ADDITIONAL = { - 'api_version': {'default': None, 'choices': [2, 3]}, 'validate_certs': {'cli': [{'name': 'validate_certs'}]}, 'timeout': {'cli': [{'name': 'timeout'}]}, 'token': {'default': None}, diff --git a/lib/ansible/galaxy/api.py b/lib/ansible/galaxy/api.py index b34be950f8c..23c1e307f83 100644 --- a/lib/ansible/galaxy/api.py +++ b/lib/ansible/galaxy/api.py @@ -113,13 +113,7 @@ def g_connect(versions): # url + '/api/' appended. self.api_server = n_url - # Default to only supporting v1, if only v1 is returned we also assume that v2 is available even though - # it isn't returned in the available_versions dict. - available_versions = data.get('available_versions', {u'v1': u'v1/'}) - if list(available_versions.keys()) == [u'v1']: - available_versions[u'v2'] = u'v2/' - - self._available_api_versions = available_versions + self._available_api_versions = available_versions = data['available_versions'] display.vvvv("Found API version '%s' with Galaxy server %s (%s)" % (', '.join(available_versions.keys()), self.name, self.api_server)) @@ -131,15 +125,6 @@ def g_connect(versions): % (method.__name__, ", ".join(versions), ", ".join(available_versions), self.name, self.api_server)) - # Warn only when we know we are talking to a collections API - if common_versions == {'v2'}: - display.deprecated( - 'The v2 Ansible Galaxy API is deprecated and no longer supported. ' - 'Ensure that you have configured the ansible-galaxy CLI to utilize an ' - 'updated and supported version of Ansible Galaxy.', - version='2.20', - ) - return method(self, *args, **kwargs) return wrapped return decorator @@ -213,11 +198,7 @@ class GalaxyError(AnsibleError): err_info = {} url_split = self.url.split('/') - if 'v2' in url_split: - galaxy_msg = err_info.get('message', http_error.reason) - code = err_info.get('code', 'Unknown') - full_error_msg = u"%s (HTTP Code: %d, Message: %s Code: %s)" % (message, self.http_code, galaxy_msg, code) - elif 'v3' in url_split: + if 'v3' in url_split: errors = err_info.get('errors', []) if not errors: errors = [{}] # Defaults are set below, we just need to make sure 1 error is present. @@ -339,7 +320,7 @@ class GalaxyAPI: return self._priority > other_galaxy_api._priority @property # type: ignore[misc] # https://github.com/python/mypy/issues/1362 - @g_connect(['v1', 'v2', 'v3']) + @g_connect(['v1', 'v3']) def available_api_versions(self): # Calling g_connect will populate self._available_api_versions return self._available_api_versions @@ -644,7 +625,7 @@ class GalaxyAPI: # Collection APIs # - @g_connect(['v2', 'v3']) + @g_connect(['v3']) def publish_collection(self, collection_path): """ Publishes a collection to a Galaxy server and returns the import task URI. @@ -679,18 +660,14 @@ class GalaxyAPI: 'Content-length': len(b_form_data), } - if 'v3' in self.available_api_versions: - n_url = _urljoin(self.api_server, self.available_api_versions['v3'], 'artifacts', 'collections') + '/' - else: - n_url = _urljoin(self.api_server, self.available_api_versions['v2'], 'collections') + '/' - + n_url = _urljoin(self.api_server, self.available_api_versions['v3'], 'artifacts', 'collections') + '/' resp = self._call_galaxy(n_url, args=b_form_data, headers=headers, method='POST', auth_required=True, error_context_msg='Error when publishing collection to %s (%s)' % (self.name, self.api_server)) return urljoin(self.api_server, resp['task']) - @g_connect(['v2', 'v3']) + @g_connect(['v3']) def wait_import_task(self, task_url, timeout=0): """ Waits until the import process on the Galaxy server has completed or the timeout is reached. @@ -748,7 +725,7 @@ class GalaxyAPI: data['error'].get('description', "Unknown error, see %s for more details" % task_url)) raise AnsibleError("Galaxy import process failed: %s (Code: %s)" % (description, code)) - @g_connect(['v2', 'v3']) + @g_connect(['v3']) def get_collection_metadata(self, namespace, name): """ Gets the collection information from the Galaxy server about a specific Collection. @@ -757,18 +734,11 @@ class GalaxyAPI: :param name: The collection name. return: CollectionMetadata about the collection. """ - if 'v3' in self.available_api_versions: - api_path = self.available_api_versions['v3'] - field_map = [ - ('created_str', 'created_at'), - ('modified_str', 'updated_at'), - ] - else: - api_path = self.available_api_versions['v2'] - field_map = [ - ('created_str', 'created'), - ('modified_str', 'modified'), - ] + api_path = self.available_api_versions['v3'] + field_map = [ + ('created_str', 'created_at'), + ('modified_str', 'updated_at'), + ] info_url = _urljoin(self.api_server, api_path, 'collections', namespace, name, '/') error_context_msg = 'Error when getting the collection info for %s.%s from %s (%s)' \ @@ -781,7 +751,7 @@ class GalaxyAPI: return CollectionMetadata(namespace, name, **metadata) - @g_connect(['v2', 'v3']) + @g_connect(['v3']) def get_collection_version_metadata(self, namespace, name, version): """ Gets the collection information from the Galaxy server about a specific Collection version. @@ -791,7 +761,7 @@ class GalaxyAPI: :param version: Version of the collection to get the information for. :return: CollectionVersionMetadata about the collection at the version requested. """ - api_path = self.available_api_versions.get('v3', self.available_api_versions.get('v2')) + api_path = self.available_api_versions['v3'] url_paths = [self.api_server, api_path, 'collections', namespace, name, 'versions', version, '/'] n_collection_url = _urljoin(*url_paths) @@ -815,7 +785,7 @@ class GalaxyAPI: download_url, data['artifact']['sha256'], data['metadata']['dependencies'], data['href'], signatures) - @g_connect(['v2', 'v3']) + @g_connect(['v3']) def get_collection_versions(self, namespace, name): """ Gets a list of available versions for a collection on a Galaxy server. @@ -824,17 +794,10 @@ class GalaxyAPI: :param name: The collection name. :return: A list of versions that are available. """ - relative_link = False - if 'v3' in self.available_api_versions: - api_path = self.available_api_versions['v3'] - pagination_path = ['links', 'next'] - relative_link = True # AH pagination results are relative an not an absolute URI. - else: - api_path = self.available_api_versions['v2'] - pagination_path = ['next'] + api_path = self.available_api_versions['v3'] + pagination_path = ['links', 'next'] - page_size_name = 'limit' if 'v3' in self.available_api_versions else 'page_size' - versions_url = _urljoin(self.api_server, api_path, 'collections', namespace, name, 'versions', '/?%s=%d' % (page_size_name, COLLECTION_PAGE_SIZE)) + versions_url = _urljoin(self.api_server, api_path, 'collections', namespace, name, 'versions', '/?limit=%d' % COLLECTION_PAGE_SIZE) versions_url_info = urlparse(versions_url) cache_key = versions_url_info.path @@ -889,11 +852,10 @@ class GalaxyAPI: if not next_link: break - elif relative_link: - next_link_info = urlparse(next_link) - if not next_link_info.scheme and not next_link_info.path.startswith('/'): - raise AnsibleError(f'Invalid non absolute pagination link: {next_link}') - next_link = urljoin(self.api_server, next_link) + next_link_info = urlparse(next_link) + if not next_link_info.scheme and not next_link_info.path.startswith('/'): + raise AnsibleError(f'Invalid non absolute pagination link: {next_link}') + next_link = urljoin(self.api_server, next_link) data = self._call_galaxy(to_native(next_link, errors='surrogate_or_strict'), error_context_msg=error_context_msg, cache=True, cache_key=cache_key) @@ -901,7 +863,7 @@ class GalaxyAPI: return versions - @g_connect(['v2', 'v3']) + @g_connect(['v3']) def get_collection_signatures(self, namespace, name, version): """ Gets the collection signatures from the Galaxy server about a specific Collection version. @@ -911,7 +873,7 @@ class GalaxyAPI: :param version: Version of the collection to get the information for. :return: A list of signature strings. """ - api_path = self.available_api_versions.get('v3', self.available_api_versions.get('v2')) + api_path = self.available_api_versions['v3'] url_paths = [self.api_server, api_path, 'collections', namespace, name, 'versions', version, '/'] n_collection_url = _urljoin(*url_paths) diff --git a/test/integration/targets/ansible-config/tasks/main.yml b/test/integration/targets/ansible-config/tasks/main.yml index 3fbcb56342a..c3b46fa4daf 100644 --- a/test/integration/targets/ansible-config/tasks/main.yml +++ b/test/integration/targets/ansible-config/tasks/main.yml @@ -73,9 +73,6 @@ password: value: my_pass origin: role_path ~ "/files/galaxy_server.ini" - api_version: - value: None - origin: default release_galaxy: test_galaxy: my_galaxy_ng: @@ -120,7 +117,6 @@ auth_url: username: password: - api_version: timeout: origin: '{{ role_path ~ "/files/galaxy_server.ini" }}' gs_keys: '{{ gs.keys()|list|sort }}' diff --git a/test/integration/targets/ansible-galaxy-collection/tasks/install.yml b/test/integration/targets/ansible-galaxy-collection/tasks/install.yml index e7af6bab733..2de0f11f447 100644 --- a/test/integration/targets/ansible-galaxy-collection/tasks/install.yml +++ b/test/integration/targets/ansible-galaxy-collection/tasks/install.yml @@ -337,27 +337,6 @@ environment: ANSIBLE_GALAXY_SERVER_LIST: bogus -# pulp_v2 doesn't require auth -- when: v2|default(false) - block: - - name: install a collection with an empty server list - {{ test_id }} - command: ansible-galaxy collection install namespace5.name -s '{{ test_server }}' --api-version 2 {{ galaxy_verbosity }} - register: install_empty_server_list - environment: - ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/ansible_collections' - ANSIBLE_GALAXY_SERVER_LIST: '' - - - name: get result of a collection with an empty server list - {{ test_id }} - slurp: - path: '{{ galaxy_dir }}/ansible_collections/namespace5/name/MANIFEST.json' - register: install_empty_server_list_actual - - - name: assert install a collection with an empty server list - {{ test_id }} - assert: - that: - - '"Installing ''namespace5.name:1.0.0'' to" in install_empty_server_list.stdout' - - (install_empty_server_list_actual.content | b64decode | from_json).collection_info.version == '1.0.0' - - name: create test requirements file with both roles and collections - {{ test_id }} copy: content: | @@ -764,40 +743,38 @@ - namespace8 - namespace9 -- when: not v2|default(false) - block: - - name: install cache.cache at the current latest version - command: ansible-galaxy collection install cache.cache -s '{{ test_name }}' -vvv - environment: - ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/ansible_collections' +- name: install cache.cache at the current latest version + command: ansible-galaxy collection install cache.cache -s '{{ test_name }}' -vvv + environment: + ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/ansible_collections' - - set_fact: - cache_version_build: '{{ (cache_version_build | int) + 1 }}' +- set_fact: + cache_version_build: '{{ (cache_version_build | int) + 1 }}' - - name: publish update for cache.cache test - setup_collections: - server: galaxy_ng - collections: - - namespace: cache - name: cache - version: 1.0.{{ cache_version_build }} +- name: publish update for cache.cache test + setup_collections: + server: galaxy_ng + collections: + - namespace: cache + name: cache + version: 1.0.{{ cache_version_build }} - - name: make sure the cache version list is ignored on a collection version change - {{ test_id }} - command: ansible-galaxy collection install cache.cache -s '{{ test_name }}' --force -vvv - register: install_cached_update - environment: - ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/ansible_collections' +- name: make sure the cache version list is ignored on a collection version change - {{ test_id }} + command: ansible-galaxy collection install cache.cache -s '{{ test_name }}' --force -vvv + register: install_cached_update + environment: + ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/ansible_collections' - - name: get result of cache version list is ignored on a collection version change - {{ test_id }} - slurp: - path: '{{ galaxy_dir }}/ansible_collections/cache/cache/MANIFEST.json' - register: install_cached_update_actual +- name: get result of cache version list is ignored on a collection version change - {{ test_id }} + slurp: + path: '{{ galaxy_dir }}/ansible_collections/cache/cache/MANIFEST.json' + register: install_cached_update_actual - - name: assert cache version list is ignored on a collection version change - {{ test_id }} - assert: - that: - - '"Installing ''cache.cache:1.0." ~ cache_version_build ~ "'' to" in install_cached_update.stdout' - - (install_cached_update_actual.content | b64decode | from_json).collection_info.version == '1.0.' ~ cache_version_build +- name: assert cache version list is ignored on a collection version change - {{ test_id }} + assert: + that: + - '"Installing ''cache.cache:1.0." ~ cache_version_build ~ "'' to" in install_cached_update.stdout' + - (install_cached_update_actual.content | b64decode | from_json).collection_info.version == '1.0.' ~ cache_version_build - name: install collection with symlink - {{ test_id }} command: ansible-galaxy collection install symlink.symlink -s '{{ test_name }}' {{ galaxy_verbosity }} diff --git a/test/integration/targets/ansible-galaxy-collection/tasks/main.yml b/test/integration/targets/ansible-galaxy-collection/tasks/main.yml index e17d6aa1224..7bcc38286d8 100644 --- a/test/integration/targets/ansible-galaxy-collection/tasks/main.yml +++ b/test/integration/targets/ansible-galaxy-collection/tasks/main.yml @@ -74,13 +74,8 @@ test_server: '{{ item.server }}' test_api_server: '{{ item.api_server|default(item.server) }}' loop: - - name: pulp_v2 - api_server: '{{ galaxy_ng_server }}' - server: '{{ pulp_server }}primary/api/' - v2: true - name: galaxy_ng server: '{{ galaxy_ng_server }}' - v3: true - include_tasks: setup_gpg.yml @@ -109,7 +104,6 @@ test_server: '{{ item.server }}' test_api_server: '{{ item.api_server|default(item.server) }}' requires_auth: '{{ item.requires_auth|default(false) }}' - v2: '{{ item.v2|default(false) }}' args: apply: environment: @@ -117,12 +111,7 @@ loop: - name: galaxy_ng server: '{{ galaxy_ng_server }}' - v3: true requires_auth: true - - name: pulp_v2 - server: '{{ pulp_server }}primary/api/' - api_server: '{{ galaxy_ng_server }}' - v2: true - name: test installing and downloading collections with the range of supported resolvelib versions include_tasks: supported_resolvelib.yml @@ -184,7 +173,7 @@ - >- "'secondary.name:1.0.0' obtained from server secondary" in install_cross_dep.stdout - # pulp_v2 is highest in the list so it will find it there first + # galaxy_ng is highest in the list so it will find it there first - >- "'parent_dep.parent_collection:1.0.0' obtained from server galaxy_ng" in install_cross_dep.stdout @@ -214,9 +203,9 @@ ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}' ANSIBLE_CONFIG: '{{ galaxy_dir }}/ansible.cfg' vars: - test_api_fallback: 'galaxy_ng' + test_api_fallback: 'secondary' test_api_fallback_versions: 'v3, pulp-v3, v1' - test_name: 'pulp_v2' + test_name: 'galaxy_ng' - name: run ansible-galaxy collection list tests include_tasks: list.yml diff --git a/test/integration/targets/ansible-galaxy-collection/tasks/verify.yml b/test/integration/targets/ansible-galaxy-collection/tasks/verify.yml index 9c482037c2c..96c2245696e 100644 --- a/test/integration/targets/ansible-galaxy-collection/tasks/verify.yml +++ b/test/integration/targets/ansible-galaxy-collection/tasks/verify.yml @@ -13,8 +13,8 @@ args: chdir: '{{ galaxy_dir }}' -- name: publish collection - {{ test_name }} - command: ansible-galaxy collection publish ansible_test-verify-1.0.0.tar.gz -s {{ test_name }} {{ galaxy_verbosity }} +- name: publish to fallback server {{ test_api_fallback }} + command: ansible-galaxy collection publish ansible_test-verify-1.0.0.tar.gz -s {{ test_api_fallback }} {{ galaxy_verbosity }} args: chdir: '{{ galaxy_dir }}' @@ -28,25 +28,23 @@ - verify.rc != 0 - verify.stderr is contains "'file' type is not supported. The format namespace.name is expected." -- name: install the collection from the server - command: ansible-galaxy collection install ansible_test.verify:1.0.0 -s {{ test_api_fallback }} {{ galaxy_verbosity }} +- name: install the collection from the secondary server + command: ansible-galaxy collection install ansible_test.verify:1.0.0 {{ galaxy_verbosity }} # This command is hardcoded with -vvvv purposefully to evaluate extra verbosity messages - name: verify the collection against the first valid server command: ansible-galaxy collection verify ansible_test.verify:1.0.0 -vvvv {{ galaxy_verbosity }} register: verify - vars: - # This sets a specific precedence that the tests are expecting - ANSIBLE_GALAXY_SERVER_LIST: offline,secondary,pulp_v2,galaxy_ng - assert: that: - verify is success - - >- - "Found API version '" + test_api_fallback_versions + "' with Galaxy server " + test_api_fallback in verify.stdout + - verify.stdout is search(msg) + vars: + msg: "Found API version '{{ test_api_fallback_versions }}' with Galaxy server {{ test_api_fallback }}" - name: verify the installed collection against the server - command: ansible-galaxy collection verify ansible_test.verify:1.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:1.0.0 {{ galaxy_verbosity }} register: verify - assert: @@ -55,10 +53,10 @@ - "'Collection ansible_test.verify contains modified content' not in verify.stdout" - name: verify the installed collection against the server, with unspecified version in CLI - command: ansible-galaxy collection verify ansible_test.verify -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify {{ galaxy_verbosity }} - name: verify a collection that doesn't appear to be installed - command: ansible-galaxy collection verify ansible_test.verify:1.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:1.0.0 {{ galaxy_verbosity }} environment: ANSIBLE_COLLECTIONS_PATH: '{{ galaxy_dir }}/nonexistent_dir' register: verify @@ -90,13 +88,13 @@ args: chdir: '{{ galaxy_dir }}' -- name: publish the new version +- name: publish to primary server {{ test_name }} command: ansible-galaxy collection publish ansible_test-verify-2.0.0.tar.gz -s {{ test_name }} {{ galaxy_verbosity }} args: chdir: '{{ galaxy_dir }}' - name: verify a version of a collection that isn't installed - command: ansible-galaxy collection verify ansible_test.verify:2.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:2.0.0 {{ galaxy_verbosity }} register: verify failed_when: verify.rc == 0 @@ -106,10 +104,10 @@ - '"ansible_test.verify has the version ''1.0.0'' but is being compared to ''2.0.0''" in verify.stdout' - name: install the new version from the server - command: ansible-galaxy collection install ansible_test.verify:2.0.0 --force -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection install ansible_test.verify:2.0.0 --force {{ galaxy_verbosity }} - name: verify the installed collection against the server - command: ansible-galaxy collection verify ansible_test.verify:2.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:2.0.0 {{ galaxy_verbosity }} register: verify - assert: @@ -153,7 +151,7 @@ - "updated_file.stat.checksum != file.stat.checksum" - name: test verifying checksums of the modified collection - command: ansible-galaxy collection verify ansible_test.verify:2.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:2.0.0 {{ galaxy_verbosity }} register: verify failed_when: verify.rc == 0 @@ -171,7 +169,7 @@ diff: true - name: ensure a modified FILES.json is validated - command: ansible-galaxy collection verify ansible_test.verify:2.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:2.0.0 {{ galaxy_verbosity }} register: verify failed_when: verify.rc == 0 @@ -193,7 +191,7 @@ line: ' "chksum_sha256": "{{ manifest_info.stat.checksum }}",' - name: ensure the MANIFEST.json is validated against the uncorrupted file from the server - command: ansible-galaxy collection verify ansible_test.verify:2.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:2.0.0 {{ galaxy_verbosity }} register: verify failed_when: verify.rc == 0 @@ -221,7 +219,7 @@ dest: '{{ galaxy_dir }}/ansible_collections/ansible_test/verify/galaxy.yml' - name: test we only verify collections containing a MANIFEST.json with the version on the server - command: ansible-galaxy collection verify ansible_test.verify:2.0.0 -s {{ test_name }} {{ galaxy_verbosity }} + command: ansible-galaxy collection verify ansible_test.verify:2.0.0 {{ galaxy_verbosity }} register: verify failed_when: verify.rc == 0 diff --git a/test/integration/targets/ansible-galaxy-collection/templates/ansible.cfg.j2 b/test/integration/targets/ansible-galaxy-collection/templates/ansible.cfg.j2 index a242979d227..97dbbb34781 100644 --- a/test/integration/targets/ansible-galaxy-collection/templates/ansible.cfg.j2 +++ b/test/integration/targets/ansible-galaxy-collection/templates/ansible.cfg.j2 @@ -1,17 +1,11 @@ [galaxy] # Ensures subsequent unstable reruns don't use the cached information causing another failure cache_dir={{ remote_tmp_dir }}/galaxy_cache -server_list=offline,galaxy_ng,secondary,pulp_v2 +server_list=offline,galaxy_ng,secondary [galaxy_server.offline] url={{ offline_server }} -[galaxy_server.pulp_v2] -url={{ pulp_server }}primary/api/ -username={{ pulp_user }} -password={{ pulp_password }} -api_version=2 - [galaxy_server.galaxy_ng] url={{ galaxy_ng_server }}content/primary/ token={{ galaxy_ng_token.json.token }} diff --git a/test/sanity/ignore.txt b/test/sanity/ignore.txt index 37902613d09..2cff1a050b4 100644 --- a/test/sanity/ignore.txt +++ b/test/sanity/ignore.txt @@ -229,4 +229,3 @@ test/integration/targets/ansible-test-sanity-pylint/deprecated_thing.py pylint:a test/integration/targets/ansible-test-sanity-pylint/deprecated_thing.py pylint:ansible-deprecated-date-not-permitted # required to verify plugin against core test/integration/targets/ansible-test-sanity-pylint/deprecated_thing.py pylint:ansible-deprecated-unnecessary-collection-name # required to verify plugin against core test/integration/targets/ansible-test-sanity-pylint/deprecated_thing.py pylint:ansible-deprecated-collection-name-not-permitted # required to verify plugin against core -lib/ansible/galaxy/api.py pylint:ansible-deprecated-version # TODO: 2.20 diff --git a/test/units/galaxy/test_api.py b/test/units/galaxy/test_api.py index 58985f1bb0e..58bda34f713 100644 --- a/test/units/galaxy/test_api.py +++ b/test/units/galaxy/test_api.py @@ -126,37 +126,32 @@ def get_v3_collection_versions(namespace='namespace', name='collection'): def get_collection_versions(namespace='namespace', name='collection'): - base_url = 'https://galaxy.server.com/api/v2/collections/{0}/{1}/'.format(namespace, name) - versions_url = base_url + 'versions/' + base_url = f'/api/v3/plugin/ansible/content/published/collections/index/{namespace}/{name}/' + versions_url = f'{base_url}versions/' # Response for collection info responses = [ { - "id": 1000, "href": base_url, "name": name, - "namespace": { - "id": 30000, - "href": "https://galaxy.ansible.com/api/v1/namespaces/30000/", - "name": namespace, - }, - "versions_url": versions_url, - "latest_version": { + "namespace": namespace, + "highest_version": { + "href": f"{versions_url}1.0.5", "version": "1.0.5", - "href": versions_url + "1.0.5/" }, + "versions_url": versions_url, "deprecated": False, - "created": "2021-02-09T16:55:42.749915-05:00", - "modified": "2021-02-09T16:55:42.749915-05:00", + "created_at": "2021-02-09T16:55:42.749915-05:00", + "updated_at": "2021-02-09T16:55:42.749915-05:00", } ] # Paginated responses for versions page_versions = (('1.0.0', '1.0.1',), ('1.0.2', '1.0.3',), ('1.0.4', '1.0.5'),) - last_page = None + prev_page = None for page in range(1, len(page_versions) + 1): if page < len(page_versions): - next_page = versions_url + '?page={0}'.format(page + 1) + next_page = f'{versions_url}?limit=2&offset={page + 1}' else: next_page = None @@ -168,13 +163,19 @@ def get_collection_versions(namespace='namespace', name='collection'): responses.append( { - 'count': 6, - 'next': next_page, - 'previous': last_page, - 'results': version_results, + 'meta': { + 'count': 6, + }, + 'links': { + 'first': f'{versions_url}?limit=2&offset=0', + 'next': next_page, + 'previous': prev_page, + 'last': f'{versions_url}?limit=2&offset={len(page_versions)}', + }, + 'data': version_results, } ) - last_page = page + prev_page = page return responses @@ -265,9 +266,8 @@ def test_initialise_galaxy(monkeypatch): api = GalaxyAPI(None, "test", "https://galaxy.ansible.com/api/") actual = api.authenticate("github_token") - assert len(api.available_api_versions) == 2 + assert len(api.available_api_versions) == 1 assert api.available_api_versions['v1'] == u'v1/' - assert api.available_api_versions['v2'] == u'v2/' assert actual == {u'token': u'my token'} assert mock_open.call_count == 2 assert mock_open.mock_calls[0][1][0] == 'https://galaxy.ansible.com/api/' @@ -288,9 +288,8 @@ def test_initialise_galaxy_with_auth(monkeypatch): api = GalaxyAPI(None, "test", "https://galaxy.ansible.com/api/", token=GalaxyToken(token='my_token')) actual = api.authenticate("github_token") - assert len(api.available_api_versions) == 2 + assert len(api.available_api_versions) == 1 assert api.available_api_versions['v1'] == u'v1/' - assert api.available_api_versions['v2'] == u'v2/' assert actual == {u'token': u'my token'} assert mock_open.call_count == 2 assert mock_open.mock_calls[0][1][0] == 'https://galaxy.ansible.com/api/' @@ -303,7 +302,7 @@ def test_initialise_galaxy_with_auth(monkeypatch): def test_initialise_automation_hub(monkeypatch): mock_open = MagicMock() mock_open.side_effect = [ - StringIO(u'{"available_versions":{"v2": "v2/", "v3":"v3/"}}'), + StringIO(u'{"available_versions":{"v3":"v3/"}}'), ] monkeypatch.setattr(galaxy_api, 'open_url', mock_open) token = KeycloakToken(auth_url='https://api.test/') @@ -313,8 +312,7 @@ def test_initialise_automation_hub(monkeypatch): api = GalaxyAPI(None, "test", "https://galaxy.ansible.com/api/", token=token) - assert len(api.available_api_versions) == 2 - assert api.available_api_versions['v2'] == u'v2/' + assert len(api.available_api_versions) == 1 assert api.available_api_versions['v3'] == u'v3/' assert mock_open.mock_calls[0][1][0] == 'https://galaxy.ansible.com/api/' @@ -341,7 +339,7 @@ def test_initialise_unknown(monkeypatch): def test_get_available_api_versions(monkeypatch): mock_open = MagicMock() mock_open.side_effect = [ - StringIO(u'{"available_versions":{"v1":"v1/","v2":"v2/"}}'), + StringIO(u'{"available_versions":{"v1":"v1/","v3":"v3/"}}'), ] monkeypatch.setattr(galaxy_api, 'open_url', mock_open) @@ -349,7 +347,7 @@ def test_get_available_api_versions(monkeypatch): actual = api.available_api_versions assert len(actual) == 2 assert actual['v1'] == u'v1/' - assert actual['v2'] == u'v2/' + assert actual['v3'] == u'v3/' assert mock_open.call_count == 1 assert mock_open.mock_calls[0][1][0] == 'https://galaxy.ansible.com/api/' @@ -360,7 +358,7 @@ def test_publish_collection_missing_file(): fake_path = u'/fake/ÅÑŚÌβŁÈ/path' expected = to_native("The collection path specified '%s' does not exist." % fake_path) - api = get_test_galaxy_api("https://galaxy.ansible.com/api/", "v2") + api = get_test_galaxy_api("https://galaxy.ansible.com/api/", "v3") with pytest.raises(AnsibleError, match=expected): api.publish_collection(fake_path) @@ -369,7 +367,7 @@ def test_publish_collection_not_a_tarball(): expected = "The collection path specified '{0}' is not a tarball, use 'ansible-galaxy collection build' to " \ "create a proper release artifact." - api = get_test_galaxy_api("https://galaxy.ansible.com/api/", "v2") + api = get_test_galaxy_api("https://galaxy.ansible.com/api/", "v3") with tempfile.NamedTemporaryFile(prefix=u'ÅÑŚÌβŁÈ') as temp_file: temp_file.write(b"\x00") temp_file.flush() @@ -378,7 +376,7 @@ def test_publish_collection_not_a_tarball(): def test_publish_collection_unsupported_version(): - expected = "Galaxy action publish_collection requires API versions 'v2, v3' but only 'v1' are available on test " \ + expected = "Galaxy action publish_collection requires API versions 'v3' but only 'v1' are available on test " \ "https://galaxy.ansible.com/api/" api = get_test_galaxy_api("https://galaxy.ansible.com/api/", "v1") @@ -387,7 +385,6 @@ def test_publish_collection_unsupported_version(): @pytest.mark.parametrize('api_version, collection_url', [ - ('v2', 'collections'), ('v3', 'artifacts/collections'), ]) def test_publish_collection(api_version, collection_url, collection_artifact, monkeypatch): @@ -410,12 +407,6 @@ def test_publish_collection(api_version, collection_url, collection_artifact, mo @pytest.mark.parametrize('api_version, collection_url, response, expected', [ - ('v2', 'collections', {}, - 'Error when publishing collection to test (%s) (HTTP Code: 500, Message: msg Code: Unknown)'), - ('v2', 'collections', { - 'message': u'Galaxy error messäge', - 'code': 'GWE002', - }, u'Error when publishing collection to test (%s) (HTTP Code: 500, Message: Galaxy error messäge Code: GWE002)'), ('v3', 'artifact/collections', {}, 'Error when publishing collection to test (%s) (HTTP Code: 500, Message: msg Code: Unknown)'), ('v3', 'artifact/collections', { @@ -452,8 +443,6 @@ def test_publish_failure(api_version, collection_url, response, expected, collec @pytest.mark.parametrize('server_url, api_version, token_type, token_ins, full_import_uri', [ - ('https://galaxy.server.com/api', 'v2', 'Token', GalaxyToken('my token'), - 'https://galaxy.server.com/api/v2/collection-imports/1234/'), ('https://galaxy.server.com/api/automation-hub/', 'v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), 'https://galaxy.server.com/api/automation-hub/v3/imports/collections/1234/'), ]) @@ -482,8 +471,6 @@ def test_wait_import_task(server_url, api_version, token_type, token_ins, full_i @pytest.mark.parametrize('server_url, api_version, token_type, token_ins, full_import_uri', [ - ('https://galaxy.server.com/api/', 'v2', 'Token', GalaxyToken('my token'), - 'https://galaxy.server.com/api/v2/collection-imports/1234/'), ('https://galaxy.server.com/api/automation-hub', 'v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), 'https://galaxy.server.com/api/automation-hub/v3/imports/collections/1234/'), ]) @@ -526,8 +513,6 @@ def test_wait_import_task_multiple_requests(server_url, api_version, token_type, @pytest.mark.parametrize('server_url, api_version, token_type, token_ins, full_import_uri,', [ - ('https://galaxy.server.com/api/', 'v2', 'Token', GalaxyToken('my token'), - 'https://galaxy.server.com/api/v2/collection-imports/1234/'), ('https://galaxy.server.com/api/automation-hub/', 'v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), 'https://galaxy.server.com/api/automation-hub/v3/imports/collections/1234/'), ]) @@ -600,8 +585,6 @@ def test_wait_import_task_with_failure(server_url, api_version, token_type, toke @pytest.mark.parametrize('server_url, api_version, token_type, token_ins, full_import_uri', [ - ('https://galaxy.server.com/api/', 'v2', 'Token', GalaxyToken('my_token'), - 'https://galaxy.server.com/api/v2/collection-imports/1234/'), ('https://galaxy.server.com/api/automation-hub/', 'v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), 'https://galaxy.server.com/api/automation-hub/v3/imports/collections/1234/'), ]) @@ -670,8 +653,6 @@ def test_wait_import_task_with_failure_no_error(server_url, api_version, token_t @pytest.mark.parametrize('server_url, api_version, token_type, token_ins, full_import_uri', [ - ('https://galaxy.server.com/api', 'v2', 'Token', GalaxyToken('my token'), - 'https://galaxy.server.com/api/v2/collection-imports/1234/'), ('https://galaxy.server.com/api/automation-hub', 'v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), 'https://galaxy.server.com/api/automation-hub/v3/imports/collections/1234/'), ]) @@ -725,7 +706,6 @@ def test_wait_import_task_timeout(server_url, api_version, token_type, token_ins @pytest.mark.parametrize('api_version, token_type, version, token_ins', [ - ('v2', None, 'v2.1.13', None), ('v3', 'Bearer', 'v1.0.0', KeycloakToken(auth_url='https://api.test/api/automation-hub/')), ]) def test_get_collection_version_metadata_no_version(api_version, token_type, version, token_ins, monkeypatch): @@ -777,11 +757,11 @@ def test_get_collection_version_metadata_no_version(api_version, token_type, ver assert mock_open.mock_calls[0][2]['headers']['Authorization'] == '%s my token' % token_type -@pytest.mark.parametrize('api_version, token_type, token_ins, version', [ - ('v2', None, None, '2.1.13'), - ('v3', 'Bearer', KeycloakToken(auth_url='https://api.test/api/automation-hub/'), '1.0.0'), +@pytest.mark.parametrize('api_version, token_type, token_ins', [ + ('v3', None, None), + ('v3', 'Bearer', KeycloakToken(auth_url='https://api.test/api/automation-hub/')), ]) -def test_get_collection_signatures_backwards_compat(api_version, token_type, token_ins, version, monkeypatch): +def test_get_collection_signatures_backwards_compat(api_version, token_type, token_ins, monkeypatch): api = get_test_galaxy_api('https://galaxy.server.com/api/', api_version, token_ins=token_ins) if token_ins: @@ -795,23 +775,23 @@ def test_get_collection_signatures_backwards_compat(api_version, token_type, tok ] monkeypatch.setattr(galaxy_api, 'open_url', mock_open) - actual = api.get_collection_signatures('namespace', 'collection', version) + actual = api.get_collection_signatures('namespace', 'collection', '1.0.0') assert actual == [] assert mock_open.call_count == 1 - assert mock_open.mock_calls[0][1][0] == '%s%s/collections/namespace/collection/versions/%s/' \ - % (api.api_server, api_version, version) + assert mock_open.mock_calls[0][1][0] == '%s%s/collections/namespace/collection/versions/1.0.0/' \ + % (api.api_server, api_version) - # v2 calls dont need auth, so no authz header or token_type + # v3 calls dont need auth, so no authz header or token_type if token_type: assert mock_open.mock_calls[0][2]['headers']['Authorization'] == '%s my token' % token_type -@pytest.mark.parametrize('api_version, token_type, token_ins, version', [ - ('v2', None, None, '2.1.13'), - ('v3', 'Bearer', KeycloakToken(auth_url='https://api.test/api/automation-hub/'), '1.0.0'), +@pytest.mark.parametrize('api_version, token_type, token_ins', [ + ('v3', None, None), + ('v3', 'Bearer', KeycloakToken(auth_url='https://api.test/api/automation-hub/')), ]) -def test_get_collection_signatures(api_version, token_type, token_ins, version, monkeypatch): +def test_get_collection_signatures(api_version, token_type, token_ins, monkeypatch): api = get_test_galaxy_api('https://galaxy.server.com/api/', api_version, token_ins=token_ins) if token_ins: @@ -840,7 +820,7 @@ def test_get_collection_signatures(api_version, token_type, token_ins, version, ] monkeypatch.setattr(galaxy_api, 'open_url', mock_open) - actual = api.get_collection_signatures('namespace', 'collection', version) + actual = api.get_collection_signatures('namespace', 'collection', '1.0.0') assert actual == [ "-----BEGIN PGP SIGNATURE-----\nSIGNATURE1\n-----END PGP SIGNATURE-----\n", @@ -848,48 +828,41 @@ def test_get_collection_signatures(api_version, token_type, token_ins, version, ] assert mock_open.call_count == 1 - assert mock_open.mock_calls[0][1][0] == '%s%s/collections/namespace/collection/versions/%s/' \ - % (api.api_server, api_version, version) + assert mock_open.mock_calls[0][1][0] == '%s%s/collections/namespace/collection/versions/1.0.0/' \ + % (api.api_server, api_version) - # v2 calls dont need auth, so no authz header or token_type + # v3 calls dont need auth, so no authz header or token_type if token_type: assert mock_open.mock_calls[0][2]['headers']['Authorization'] == '%s my token' % token_type -@pytest.mark.parametrize('api_version, token_type, token_ins, response', [ - ('v2', None, None, { - 'count': 2, - 'next': None, - 'previous': None, - 'results': [ - { - 'version': '1.0.0', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.0', - }, - { - 'version': '1.0.1', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.1', - }, - ], - }), - # TODO: Verify this once Automation Hub is actually out - ('v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), { - 'count': 2, - 'next': None, - 'previous': None, +@pytest.mark.parametrize('api_version, token_type, token_ins', [ + ('v3', None, None), + ('v3', 'Bearer', KeycloakToken(auth_url='https://ah.test/')) +]) +def test_get_collection_versions(api_version, token_type, token_ins, monkeypatch): + response = { + 'meta': { + 'count': 2 + }, + 'links': { + 'first': '/api/v3/plugin/ansible/content/published/collections/index/ns/col/versions/?limit=100&offset=0', + 'previous': None, + 'next': None, + 'last': '/api/v3/plugin/ansible/content/published/collections/index/ns/col/versions/?limit=100&offset=0' + }, 'data': [ { 'version': '1.0.0', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.0', + 'href': '/api/v3/plugin/ansible/content/published/collections/index/ns/col/versions/1.0.0/', }, { 'version': '1.0.1', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.1', + 'href': '/api/v3/plugin/ansible/content/pubished/collections/index/ns/col/versions/1.0.1/', }, ], - }), -]) -def test_get_collection_versions(api_version, token_type, token_ins, response, monkeypatch): + } + api = get_test_galaxy_api('https://galaxy.server.com/api/', api_version, token_ins=token_ins) if token_ins: @@ -906,7 +879,7 @@ def test_get_collection_versions(api_version, token_type, token_ins, response, m actual = api.get_collection_versions('namespace', 'collection') assert actual == [u'1.0.0', u'1.0.1'] - page_query = '?limit=100' if api_version == 'v3' else '?page_size=100' + page_query = '?limit=100' assert mock_open.call_count == 1 assert mock_open.mock_calls[0][1][0] == 'https://galaxy.server.com/api/%s/collections/namespace/collection/' \ 'versions/%s' % (api_version, page_query) @@ -915,53 +888,6 @@ def test_get_collection_versions(api_version, token_type, token_ins, response, m @pytest.mark.parametrize('api_version, token_type, token_ins, responses', [ - ('v2', None, None, [ - { - 'count': 6, - 'next': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/?page=2&page_size=100', - 'previous': None, - 'results': [ # Pay no mind, using more manageable results than page_size would indicate - { - 'version': '1.0.0', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.0', - }, - { - 'version': '1.0.1', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.1', - }, - ], - }, - { - 'count': 6, - 'next': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/?page=3&page_size=100', - 'previous': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions', - 'results': [ - { - 'version': '1.0.2', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.2', - }, - { - 'version': '1.0.3', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.3', - }, - ], - }, - { - 'count': 6, - 'next': None, - 'previous': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/?page=2&page_size=100', - 'results': [ - { - 'version': '1.0.4', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.4', - }, - { - 'version': '1.0.5', - 'href': 'https://galaxy.server.com/api/v2/collections/namespace/collection/versions/1.0.5', - }, - ], - }, - ]), ('v3', 'Bearer', KeycloakToken(auth_url='https://api.test/'), [ { 'count': 6, @@ -1034,14 +960,9 @@ def test_get_collection_versions_pagination(api_version, token_type, token_ins, assert mock_open.call_count == 3 - if api_version == 'v3': - query_1 = 'limit=100' - query_2 = 'limit=100&offset=100' - query_3 = 'limit=100&offset=200' - else: - query_1 = 'page_size=100' - query_2 = 'page=2&page_size=100' - query_3 = 'page=3&page_size=100' + query_1 = 'limit=100' + query_2 = 'limit=100&offset=100' + query_3 = 'limit=100&offset=200' assert mock_open.mock_calls[0][1][0] == 'https://galaxy.server.com/api/%s/collections/namespace/collection/' \ 'versions/?%s' % (api_version, query_1) @@ -1160,7 +1081,7 @@ def test_cache_complete_pagination(cache_dir, monkeypatch): responses = get_collection_versions() cache_file = os.path.join(cache_dir, 'api.json') - api = get_test_galaxy_api('https://galaxy.server.com/api/', 'v2', no_cache=False) + api = get_test_galaxy_api('https://galaxy.server.com/api/', 'v3', no_cache=False) mock_open = MagicMock( side_effect=[ @@ -1177,7 +1098,7 @@ def test_cache_complete_pagination(cache_dir, monkeypatch): final_cache = json.loads(fd.read()) cached_server = final_cache['galaxy.server.com:'] - cached_collection = cached_server['/api/v2/collections/namespace/collection/versions/'] + cached_collection = cached_server['/api/v3/collections/namespace/collection/versions/'] cached_versions = [r['version'] for r in cached_collection['results']] assert final_cache == api._cache @@ -1218,14 +1139,14 @@ def test_cache_flaky_pagination(cache_dir, monkeypatch): responses = get_collection_versions() cache_file = os.path.join(cache_dir, 'api.json') - api = get_test_galaxy_api('https://galaxy.server.com/api/', 'v2', no_cache=False) + api = get_test_galaxy_api('https://galaxy.server.com/api/', 'v3', no_cache=False) # First attempt, fail midway through mock_open = MagicMock( side_effect=[ StringIO(to_text(json.dumps(responses[0]))), StringIO(to_text(json.dumps(responses[1]))), - urllib.error.HTTPError(responses[1]['next'], 500, 'Error', {}, StringIO()), + urllib.error.HTTPError(responses[1]['links']['next'], 500, 'Error', {}, StringIO()), StringIO(to_text(json.dumps(responses[3]))), ] ) @@ -1246,13 +1167,13 @@ def test_cache_flaky_pagination(cache_dir, monkeypatch): 'version': 1, 'galaxy.server.com:': { 'modified': { - 'namespace.collection': responses[0]['modified'] + 'namespace.collection': responses[0]['updated_at'] } } } # Reset API - api = get_test_galaxy_api('https://galaxy.server.com/api/', 'v2', no_cache=False) + api = get_test_galaxy_api('https://galaxy.server.com/api/', 'v3', no_cache=False) # Second attempt is successful so cache should be populated mock_open = MagicMock( @@ -1270,7 +1191,7 @@ def test_cache_flaky_pagination(cache_dir, monkeypatch): final_cache = json.loads(fd.read()) cached_server = final_cache['galaxy.server.com:'] - cached_collection = cached_server['/api/v2/collections/namespace/collection/versions/'] + cached_collection = cached_server['/api/v3/collections/namespace/collection/versions/'] cached_versions = [r['version'] for r in cached_collection['results']] assert cached_versions == actual_versions diff --git a/test/units/galaxy/test_collection.py b/test/units/galaxy/test_collection.py index 7115a1da44f..8da860da284 100644 --- a/test/units/galaxy/test_collection.py +++ b/test/units/galaxy/test_collection.py @@ -846,7 +846,7 @@ def test_publish_no_wait(galaxy_server, collection_artifact, monkeypatch): monkeypatch.setattr(Display, 'display', mock_display) artifact_path, mock_open = collection_artifact - fake_import_uri = 'https://galaxy.server.com/api/v2/import/1234' + fake_import_uri = 'https://galaxy.server.com/api/v3/import/1234' mock_publish = MagicMock() mock_publish.return_value = fake_import_uri @@ -869,7 +869,7 @@ def test_publish_with_wait(galaxy_server, collection_artifact, monkeypatch): monkeypatch.setattr(Display, 'display', mock_display) artifact_path, mock_open = collection_artifact - fake_import_uri = 'https://galaxy.server.com/api/v2/import/1234' + fake_import_uri = 'https://galaxy.server.com/api/v3/import/1234' mock_publish = MagicMock() mock_publish.return_value = fake_import_uri