Compare commits
No commits in common. "ffb3cb5d276cfcd3e05ab9c07c200728d5e1e3ba" and "e30a7eedafba4b677d8cb257d62528cf74dbc630" have entirely different histories.
ffb3cb5d27
...
e30a7eedaf
@ -1,14 +0,0 @@
|
||||
diff -Nur ansible-2.9.24/test/lib/ansible_test/_internal/units/__init__.py ansible-2.9.24_bak/test/lib/ansible_test/_internal/units/__init__.py
|
||||
--- ansible-2.9.24/test/lib/ansible_test/_internal/units/__init__.py 2021-07-20 07:51:26.000000000 +0800
|
||||
+++ ansible-2.9.24_bak/test/lib/ansible_test/_internal/units/__init__.py 2021-09-03 10:21:13.075845432 +0800
|
||||
@@ -108,10 +108,6 @@
|
||||
if not data_context().content.collection:
|
||||
cmd.append('--durations=25')
|
||||
|
||||
- if version != '2.6':
|
||||
- # added in pytest 4.5.0, which requires python 2.7+
|
||||
- cmd.append('--strict-markers')
|
||||
-
|
||||
plugins = []
|
||||
|
||||
if args.coverage:
|
||||
@ -1,696 +0,0 @@
|
||||
diff -Nur ansible-2.9.24/test/units/cli/test_galaxy.py ansible-2.9.24_bak/test/units/cli/test_galaxy.py
|
||||
--- ansible-2.9.24/test/units/cli/test_galaxy.py 2021-07-20 07:51:26.000000000 +0800
|
||||
+++ ansible-2.9.24_bak/test/units/cli/test_galaxy.py 2021-09-04 11:32:31.367588218 +0800
|
||||
@@ -40,6 +40,7 @@
|
||||
from units.compat import unittest
|
||||
from units.compat.mock import patch, MagicMock
|
||||
|
||||
+skipmark = pytest.mark.skip(reason='Too old pytest')
|
||||
|
||||
@pytest.fixture(autouse='function')
|
||||
def reset_cli_args():
|
||||
@@ -500,6 +501,8 @@
|
||||
@pytest.mark.parametrize('collection_skeleton', [
|
||||
('ansible_test.my_collection', None),
|
||||
], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_collection_default(collection_skeleton):
|
||||
meta_path = os.path.join(collection_skeleton, 'galaxy.yml')
|
||||
|
||||
@@ -528,6 +531,8 @@
|
||||
@pytest.mark.parametrize('collection_skeleton', [
|
||||
('ansible_test.delete_me_skeleton', os.path.join(os.path.split(__file__)[0], 'test_data', 'collection_skeleton')),
|
||||
], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_collection_skeleton(collection_skeleton):
|
||||
meta_path = os.path.join(collection_skeleton, 'galaxy.yml')
|
||||
|
||||
@@ -627,6 +632,8 @@
|
||||
("ns.hyphen-collection", "ns.hyphen-collection"),
|
||||
("ns.collection.weird", "ns.collection.weird"),
|
||||
])
|
||||
+
|
||||
+@skipmark
|
||||
def test_invalid_collection_name_install(name, expected, tmp_path_factory):
|
||||
install_path = to_text(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections'))
|
||||
expected = "Invalid collection name '%s', name must be in the format <namespace>.<collection>" % expected
|
||||
@@ -639,6 +646,7 @@
|
||||
@pytest.mark.parametrize('collection_skeleton', [
|
||||
('ansible_test.build_collection', None),
|
||||
], indirect=True)
|
||||
+@skipmark
|
||||
def test_collection_build(collection_artifact):
|
||||
tar_path = os.path.join(collection_artifact, 'ansible_test-build_collection-1.0.0.tar.gz')
|
||||
assert tarfile.is_tarfile(tar_path)
|
||||
@@ -741,7 +749,7 @@
|
||||
output_dir = to_text((tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Output')))
|
||||
yield mock_install, mock_warning, output_dir
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_with_names(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -769,7 +777,7 @@
|
||||
assert mock_install.call_args[0][6] is False
|
||||
assert mock_install.call_args[0][7] is False
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_with_requirements_file(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -806,7 +814,7 @@
|
||||
assert mock_install.call_args[0][6] is False
|
||||
assert mock_install.call_args[0][7] is False
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_with_relative_path(collection_install, monkeypatch):
|
||||
mock_install = collection_install[0]
|
||||
|
||||
@@ -837,7 +845,7 @@
|
||||
assert mock_req.call_count == 1
|
||||
assert mock_req.call_args[0][0] == os.path.abspath(requirements_file)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_with_unexpanded_path(collection_install, monkeypatch):
|
||||
mock_install = collection_install[0]
|
||||
|
||||
@@ -868,7 +876,7 @@
|
||||
assert mock_req.call_count == 1
|
||||
assert mock_req.call_args[0][0] == os.path.expanduser(os.path.expandvars(requirements_file))
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_in_collection_dir(collection_install, monkeypatch):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -893,7 +901,7 @@
|
||||
assert mock_install.call_args[0][6] is False
|
||||
assert mock_install.call_args[0][7] is False
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_with_url(collection_install):
|
||||
mock_install, dummy, output_dir = collection_install
|
||||
|
||||
@@ -916,7 +924,7 @@
|
||||
assert mock_install.call_args[0][6] is False
|
||||
assert mock_install.call_args[0][7] is False
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_name_and_requirements_fail(collection_install):
|
||||
test_path = collection_install[2]
|
||||
expected = 'The positional collection_name arg and --requirements-file are mutually exclusive.'
|
||||
@@ -925,7 +933,7 @@
|
||||
GalaxyCLI(args=['ansible-galaxy', 'collection', 'install', 'namespace.collection', '--collections-path',
|
||||
test_path, '--requirements-file', test_path]).run()
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_no_name_and_requirements_fail(collection_install):
|
||||
test_path = collection_install[2]
|
||||
expected = 'You must specify a collection name or a requirements file.'
|
||||
@@ -934,6 +942,7 @@
|
||||
GalaxyCLI(args=['ansible-galaxy', 'collection', 'install', '--collections-path', test_path]).run()
|
||||
|
||||
|
||||
+@skipmark
|
||||
def test_collection_install_path_with_ansible_collections(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -962,7 +971,7 @@
|
||||
assert mock_install.call_args[0][6] is False
|
||||
assert mock_install.call_args[0][7] is False
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_ignore_certs(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -972,7 +981,7 @@
|
||||
|
||||
assert mock_install.call_args[0][3] is False
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_force(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -982,7 +991,7 @@
|
||||
|
||||
assert mock_install.call_args[0][6] is True
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_force_deps(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -992,7 +1001,7 @@
|
||||
|
||||
assert mock_install.call_args[0][7] is True
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_no_deps(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -1003,6 +1012,7 @@
|
||||
assert mock_install.call_args[0][5] is True
|
||||
|
||||
|
||||
+@skipmark
|
||||
def test_collection_install_ignore(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -1012,7 +1022,7 @@
|
||||
|
||||
assert mock_install.call_args[0][4] is True
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_collection_install_custom_server(collection_install):
|
||||
mock_install, mock_warning, output_dir = collection_install
|
||||
|
||||
@@ -1048,6 +1058,7 @@
|
||||
|
||||
|
||||
@pytest.mark.parametrize('requirements_file', [None], indirect=True)
|
||||
+@skipmark
|
||||
def test_parse_requirements_file_that_doesnt_exist(requirements_cli, requirements_file):
|
||||
expected = "The requirements file '%s' does not exist." % to_native(requirements_file)
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
@@ -1055,6 +1066,7 @@
|
||||
|
||||
|
||||
@pytest.mark.parametrize('requirements_file', ['not a valid yml file: hi: world'], indirect=True)
|
||||
+@skipmark
|
||||
def test_parse_requirements_file_that_isnt_yaml(requirements_cli, requirements_file):
|
||||
expected = "Failed to parse the requirements yml at '%s' with the following error" % to_native(requirements_file)
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
@@ -1066,6 +1078,8 @@
|
||||
- galaxy.role
|
||||
- anotherrole
|
||||
''')], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_in_older_format_illega(requirements_cli, requirements_file):
|
||||
expected = "Expecting requirements file to be a dict with the key 'collections' that contains a list of " \
|
||||
"collections to install"
|
||||
@@ -1078,6 +1092,8 @@
|
||||
collections:
|
||||
- version: 1.0.0
|
||||
'''], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_without_mandatory_name_key(requirements_cli, requirements_file):
|
||||
expected = "Collections requirement entry should contain the key name."
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
@@ -1093,6 +1109,8 @@
|
||||
- name: namespace.collection1
|
||||
- name: namespace.collection2
|
||||
''')], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements(requirements_cli, requirements_file):
|
||||
expected = {
|
||||
'roles': [],
|
||||
@@ -1109,6 +1127,8 @@
|
||||
version: ">=1.0.0,<=2.0.0"
|
||||
source: https://galaxy-dev.ansible.com
|
||||
- namespace.collection2'''], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_with_extra_info(requirements_cli, requirements_file):
|
||||
actual = requirements_cli._parse_requirements_file(requirements_file)
|
||||
|
||||
@@ -1136,6 +1156,8 @@
|
||||
collections:
|
||||
- namespace.collection2
|
||||
'''], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_with_roles_and_collections(requirements_cli, requirements_file):
|
||||
actual = requirements_cli._parse_requirements_file(requirements_file)
|
||||
|
||||
@@ -1157,6 +1179,8 @@
|
||||
- name: namespace3.collection3
|
||||
source: server
|
||||
'''], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_with_collection_source(requirements_cli, requirements_file):
|
||||
galaxy_api = GalaxyAPI(requirements_cli.api, 'server', 'https://config-server')
|
||||
requirements_cli.api_servers.append(galaxy_api)
|
||||
@@ -1180,6 +1204,8 @@
|
||||
- username.included_role
|
||||
- src: https://github.com/user/repo
|
||||
'''], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_roles_with_include(requirements_cli, requirements_file):
|
||||
reqs = [
|
||||
'ansible.role',
|
||||
@@ -1203,6 +1229,8 @@
|
||||
- username.role
|
||||
- include: missing.yml
|
||||
'''], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_parse_requirements_roles_with_include_missing(requirements_cli, requirements_file):
|
||||
expected = "Failed to find include requirements file 'missing.yml' in '%s'" % to_native(requirements_file)
|
||||
|
||||
diff -Nur ansible-2.9.24/test/units/cli/test_vault.py ansible-2.9.24_bak/test/units/cli/test_vault.py
|
||||
--- ansible-2.9.24/test/units/cli/test_vault.py 2021-07-20 07:51:26.000000000 +0800
|
||||
+++ ansible-2.9.24_bak/test/units/cli/test_vault.py 2021-09-04 11:31:22.886454881 +0800
|
||||
@@ -198,6 +198,8 @@
|
||||
(['ansible-vault', '-vv', 'view', 'vault.txt', '-v'], 1),
|
||||
(['ansible-vault', '-vv', 'view', 'vault.txt', '-vvvv'], 4),
|
||||
])
|
||||
+
|
||||
+@pytest.mark.skip(reason='Too old pytest')
|
||||
def test_verbosity_arguments(cli_args, expected, tmp_path_factory, monkeypatch):
|
||||
# Add a password file so we don't get a prompt in the test
|
||||
test_dir = to_text(tmp_path_factory.mktemp('test-ansible-vault'))
|
||||
diff -Nur ansible-2.9.24/test/units/galaxy/test_api.py ansible-2.9.24_bak/test/units/galaxy/test_api.py
|
||||
--- ansible-2.9.24/test/units/galaxy/test_api.py 2021-07-20 07:51:26.000000000 +0800
|
||||
+++ ansible-2.9.24_bak/test/units/galaxy/test_api.py 2021-09-04 11:31:22.886454881 +0800
|
||||
@@ -28,6 +28,7 @@
|
||||
from ansible.utils.display import Display
|
||||
|
||||
|
||||
+
|
||||
@pytest.fixture(autouse='function')
|
||||
def reset_cli_args():
|
||||
co.GlobalCLIArgs._Singleton__instance = None
|
||||
@@ -276,6 +277,8 @@
|
||||
('v2', 'collections'),
|
||||
('v3', 'artifacts/collections'),
|
||||
])
|
||||
+
|
||||
+@pytest.mark.skip(reason='Too old pytest')
|
||||
def test_publish_collection(api_version, collection_url, collection_artifact, monkeypatch):
|
||||
api = get_test_galaxy_api("https://galaxy.ansible.com/api/", api_version)
|
||||
|
||||
@@ -323,6 +326,8 @@
|
||||
u'"mynamespace-mycollection-4.1.1" already exists. Code: conflict.collection_exists), (HTTP Code: 500, '
|
||||
u'Message: Rändom(?) quantum improbability. Code: quantum_improbability)')
|
||||
])
|
||||
+
|
||||
+@pytest.mark.skip(reason='Too old pytest')
|
||||
def test_publish_failure(api_version, collection_url, response, expected, collection_artifact, monkeypatch):
|
||||
api = get_test_galaxy_api('https://galaxy.server.com/api/', api_version)
|
||||
|
||||
diff -Nur ansible-2.9.24/test/units/galaxy/test_collection.py ansible-2.9.24_bak/test/units/galaxy/test_collection.py
|
||||
--- ansible-2.9.24/test/units/galaxy/test_collection.py 2021-07-20 07:51:26.000000000 +0800
|
||||
+++ ansible-2.9.24_bak/test/units/galaxy/test_collection.py 2021-09-04 11:31:22.886454881 +0800
|
||||
@@ -27,6 +27,7 @@
|
||||
from ansible.utils.display import Display
|
||||
from ansible.utils.hashing import secure_hash_s
|
||||
|
||||
+skipmark = pytest.mark.skip(reason='Too old pytest')
|
||||
|
||||
@pytest.fixture(autouse='function')
|
||||
def reset_cli_args():
|
||||
@@ -176,7 +177,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection.build_collection(fake_path, 'output', False)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_existing_output_file(collection_input):
|
||||
input_dir, output_dir = collection_input
|
||||
|
||||
@@ -189,6 +190,7 @@
|
||||
collection.build_collection(input_dir, output_dir, False)
|
||||
|
||||
|
||||
+@skipmark
|
||||
def test_build_existing_output_without_force(collection_input):
|
||||
input_dir, output_dir = collection_input
|
||||
|
||||
@@ -202,7 +204,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection.build_collection(input_dir, output_dir, False)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_existing_output_with_force(collection_input):
|
||||
input_dir, output_dir = collection_input
|
||||
|
||||
@@ -218,6 +220,7 @@
|
||||
|
||||
|
||||
@pytest.mark.parametrize('galaxy_yml', [b'namespace: value: broken'], indirect=True)
|
||||
+@skipmark
|
||||
def test_invalid_yaml_galaxy_file(galaxy_yml):
|
||||
expected = to_native(b"Failed to parse the galaxy.yml at '%s' with the following error:" % galaxy_yml)
|
||||
|
||||
@@ -226,6 +229,7 @@
|
||||
|
||||
|
||||
@pytest.mark.parametrize('galaxy_yml', [b'namespace: test_namespace'], indirect=True)
|
||||
+@skipmark
|
||||
def test_missing_required_galaxy_key(galaxy_yml):
|
||||
expected = "The collection galaxy.yml at '%s' is missing the following mandatory keys: authors, name, " \
|
||||
"readme, version" % to_native(galaxy_yml)
|
||||
@@ -241,6 +245,7 @@
|
||||
version: 0.1.0
|
||||
readme: README.md
|
||||
invalid: value"""], indirect=True)
|
||||
+@skipmark
|
||||
def test_warning_extra_keys(galaxy_yml, monkeypatch):
|
||||
display_mock = MagicMock()
|
||||
monkeypatch.setattr(Display, 'warning', display_mock)
|
||||
@@ -258,6 +263,8 @@
|
||||
authors: Jordan
|
||||
version: 0.1.0
|
||||
readme: README.md"""], indirect=True)
|
||||
+
|
||||
+@skipmark
|
||||
def test_defaults_galaxy_yml(galaxy_yml):
|
||||
actual = collection._get_galaxy_yml(galaxy_yml)
|
||||
|
||||
@@ -290,11 +297,12 @@
|
||||
readme: README.md
|
||||
license:
|
||||
- MIT""")], indirect=True)
|
||||
+@skipmark
|
||||
def test_galaxy_yml_list_value(galaxy_yml):
|
||||
actual = collection._get_galaxy_yml(galaxy_yml)
|
||||
assert actual['license_ids'] == ['MIT']
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_ignore_files_and_folders(collection_input, monkeypatch):
|
||||
input_dir = collection_input[0]
|
||||
|
||||
@@ -323,7 +331,7 @@
|
||||
assert mock_display.mock_calls[0][1][0] in expected_msgs
|
||||
assert mock_display.mock_calls[1][1][0] in expected_msgs
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_ignore_older_release_in_root(collection_input, monkeypatch):
|
||||
input_dir = collection_input[0]
|
||||
|
||||
@@ -355,7 +363,7 @@
|
||||
assert mock_display.call_count == 1
|
||||
assert mock_display.mock_calls[0][1][0] == "Skipping '%s' for collection build" % to_text(release_file)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_ignore_symlink_target_outside_collection(collection_input, monkeypatch):
|
||||
input_dir, outside_dir = collection_input
|
||||
|
||||
@@ -373,7 +381,7 @@
|
||||
assert mock_display.mock_calls[0][1][0] == "Skipping '%s' as it is a symbolic link to a directory outside " \
|
||||
"the collection" % to_text(link_path)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_copy_symlink_target_inside_collection(collection_input):
|
||||
input_dir = collection_input[0]
|
||||
|
||||
@@ -396,7 +404,7 @@
|
||||
assert linked_entries[0]['name'] == 'playbooks/roles/linked'
|
||||
assert linked_entries[0]['ftype'] == 'dir'
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_with_symlink_inside_collection(collection_input):
|
||||
input_dir, output_dir = collection_input
|
||||
|
||||
@@ -436,7 +444,7 @@
|
||||
|
||||
assert actual_file == '63444bfc766154e1bc7557ef6280de20d03fcd81'
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_publish_no_wait(galaxy_server, collection_artifact, monkeypatch):
|
||||
mock_display = MagicMock()
|
||||
monkeypatch.setattr(Display, 'display', mock_display)
|
||||
@@ -459,7 +467,7 @@
|
||||
"--no-wait being set. Import task results can be found at %s" % (galaxy_server.name, galaxy_server.api_server,
|
||||
fake_import_uri)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_publish_with_wait(galaxy_server, collection_artifact, monkeypatch):
|
||||
mock_display = MagicMock()
|
||||
monkeypatch.setattr(Display, 'display', mock_display)
|
||||
@@ -485,7 +493,7 @@
|
||||
assert mock_display.mock_calls[0][1][0] == "Collection has been published to the Galaxy server test_server %s" \
|
||||
% galaxy_server.api_server
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_find_existing_collections(tmp_path_factory, monkeypatch):
|
||||
test_dir = to_text(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections'))
|
||||
collection1 = os.path.join(test_dir, 'namespace1', 'collection1')
|
||||
@@ -543,7 +551,7 @@
|
||||
assert mock_warning.mock_calls[0][1][0] == "Collection at '%s' does not have a MANIFEST.json file, cannot " \
|
||||
"detect version." % to_text(collection2)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_download_file(tmp_path_factory, monkeypatch):
|
||||
temp_dir = to_bytes(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections'))
|
||||
|
||||
@@ -566,7 +574,7 @@
|
||||
assert mock_open.call_count == 1
|
||||
assert mock_open.mock_calls[0][1][0] == 'http://google.com/file'
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_download_file_hash_mismatch(tmp_path_factory, monkeypatch):
|
||||
temp_dir = to_bytes(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections'))
|
||||
|
||||
@@ -580,7 +588,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection._download_file('http://google.com/file', temp_dir, 'bad', True)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_extract_tar_file_invalid_hash(tmp_tarfile):
|
||||
temp_dir, tfile, filename, dummy = tmp_tarfile
|
||||
|
||||
@@ -588,7 +596,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection._extract_tar_file(tfile, filename, temp_dir, temp_dir, "fakehash")
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_extract_tar_file_missing_member(tmp_tarfile):
|
||||
temp_dir, tfile, dummy, dummy = tmp_tarfile
|
||||
|
||||
@@ -596,7 +604,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection._extract_tar_file(tfile, 'missing', temp_dir, temp_dir)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_extract_tar_file_missing_parent_dir(tmp_tarfile):
|
||||
temp_dir, tfile, filename, checksum = tmp_tarfile
|
||||
output_dir = os.path.join(temp_dir, b'output')
|
||||
@@ -605,7 +613,7 @@
|
||||
collection._extract_tar_file(tfile, filename, output_dir, temp_dir, checksum)
|
||||
os.path.isfile(output_file)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_extract_tar_file_outside_dir(tmp_path_factory):
|
||||
filename = u'ÅÑŚÌβŁÈ'
|
||||
temp_dir = to_bytes(tmp_path_factory.mktemp('test-%s Collections' % to_native(filename)))
|
||||
@@ -644,7 +652,7 @@
|
||||
assert to_bytes(json.dumps(manifest_info)) == write_to.read()
|
||||
assert actual_hash == checksum
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_get_tar_file_member(tmp_tarfile):
|
||||
|
||||
temp_dir, tfile, filename, checksum = tmp_tarfile
|
||||
@@ -653,7 +661,7 @@
|
||||
assert isinstance(tar_file_member, tarfile.TarInfo)
|
||||
assert isinstance(tar_file_obj, tarfile.ExFileObject)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_get_nonexistent_tar_file_member(tmp_tarfile):
|
||||
temp_dir, tfile, filename, checksum = tmp_tarfile
|
||||
|
||||
diff -Nur ansible-2.9.24/test/units/galaxy/test_token.py ansible-2.9.24_bak/test/units/galaxy/test_token.py
|
||||
--- ansible-2.9.24/test/units/galaxy/test_token.py 2021-07-20 07:51:26.000000000 +0800
|
||||
+++ ansible-2.9.24_bak/test/units/galaxy/test_token.py 2021-09-04 11:31:22.886454881 +0800
|
||||
@@ -12,7 +12,7 @@
|
||||
import ansible.constants as C
|
||||
from ansible.galaxy.token import GalaxyToken, NoTokenSentinel
|
||||
from ansible.module_utils._text import to_bytes, to_text
|
||||
-
|
||||
+skipmark = pytest.mark.skip(reason='Too old pytest')
|
||||
|
||||
@pytest.fixture()
|
||||
def b_token_file(request, tmp_path_factory):
|
||||
@@ -31,25 +31,29 @@
|
||||
finally:
|
||||
C.GALAXY_TOKEN_PATH = orig_token_path
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_token_explicit(b_token_file):
|
||||
assert GalaxyToken(token="explicit").get() == "explicit"
|
||||
|
||||
|
||||
@pytest.mark.parametrize('b_token_file', ['file'], indirect=True)
|
||||
+@skipmark
|
||||
def test_token_explicit_override_file(b_token_file):
|
||||
assert GalaxyToken(token="explicit").get() == "explicit"
|
||||
|
||||
|
||||
@pytest.mark.parametrize('b_token_file', ['file'], indirect=True)
|
||||
+@skipmark
|
||||
def test_token_from_file(b_token_file):
|
||||
assert GalaxyToken().get() == "file"
|
||||
|
||||
|
||||
+@skipmark
|
||||
def test_token_from_file_missing(b_token_file):
|
||||
assert GalaxyToken().get() is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize('b_token_file', ['file'], indirect=True)
|
||||
+@skipmark
|
||||
def test_token_none(b_token_file):
|
||||
assert GalaxyToken(token=NoTokenSentinel).get() is None
|
||||
--- ansible-2.9.24/test/units/galaxy/test_collection_install.py 2021-09-04 10:59:58.879139905 +0800
|
||||
+++ ansible-2.9.24_bak/test/units/galaxy/test_collection_install.py 2021-09-04 10:57:37.444778861 +0800
|
||||
@@ -29,7 +29,7 @@
|
||||
from ansible.utils import context_objects as co
|
||||
from ansible.utils.display import Display
|
||||
|
||||
-
|
||||
+skipmark = pytest.mark.skip(reason='Too old pytest')
|
||||
def call_galaxy_cli(args):
|
||||
orig = co.GlobalCLIArgs._Singleton__instance
|
||||
co.GlobalCLIArgs._Singleton__instance = None
|
||||
@@ -158,7 +158,7 @@
|
||||
galaxy_api = api.GalaxyAPI(None, 'test_server', 'https://galaxy.ansible.com')
|
||||
return galaxy_api
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_requirement_from_path(collection_artifact):
|
||||
actual = collection.CollectionRequirement.from_path(collection_artifact[0], True)
|
||||
|
||||
@@ -173,6 +173,7 @@
|
||||
|
||||
|
||||
@pytest.mark.parametrize('version', ['1.1.1', 1.1, 1])
|
||||
+@skipmark
|
||||
def test_build_requirement_from_path_with_manifest(version, collection_artifact):
|
||||
manifest_path = os.path.join(collection_artifact[0], b'MANIFEST.json')
|
||||
manifest_value = json.dumps({
|
||||
@@ -201,6 +202,7 @@
|
||||
assert actual.dependencies == {'ansible_namespace.collection': '*'}
|
||||
|
||||
|
||||
+@skipmark
|
||||
def test_build_requirement_from_path_invalid_manifest(collection_artifact):
|
||||
manifest_path = os.path.join(collection_artifact[0], b'MANIFEST.json')
|
||||
with open(manifest_path, 'wb') as manifest_obj:
|
||||
@@ -246,7 +248,7 @@
|
||||
# % to_text(collection_artifact[0])
|
||||
# assert expected_warn in actual_warn
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_requirement_from_tar(collection_artifact):
|
||||
actual = collection.CollectionRequirement.from_tar(collection_artifact[1], True, True)
|
||||
|
||||
@@ -259,7 +261,7 @@
|
||||
assert actual.latest_version == u'0.1.0'
|
||||
assert actual.dependencies == {}
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_requirement_from_tar_fail_not_tar(tmp_path_factory):
|
||||
test_dir = to_bytes(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections Input'))
|
||||
test_file = os.path.join(test_dir, b'fake.tar.gz')
|
||||
@@ -270,7 +272,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection.CollectionRequirement.from_tar(test_file, True, True)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_requirement_from_tar_no_manifest(tmp_path_factory):
|
||||
test_dir = to_bytes(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections Input'))
|
||||
|
||||
@@ -292,8 +294,7 @@
|
||||
expected = "Collection at '%s' does not contain the required file MANIFEST.json." % to_native(tar_path)
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection.CollectionRequirement.from_tar(tar_path, True, True)
|
||||
-
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_requirement_from_tar_no_files(tmp_path_factory):
|
||||
test_dir = to_bytes(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections Input'))
|
||||
|
||||
@@ -315,7 +316,7 @@
|
||||
with pytest.raises(AnsibleError, match=expected):
|
||||
collection.CollectionRequirement.from_tar(tar_path, True, True)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_build_requirement_from_tar_invalid_manifest(tmp_path_factory):
|
||||
test_dir = to_bytes(tmp_path_factory.mktemp('test-ÅÑŚÌβŁÈ Collections Input'))
|
||||
|
||||
@@ -620,7 +621,7 @@
|
||||
assert mock_display.call_count == 1
|
||||
assert mock_display.mock_calls[0][1][0] == "Skipping 'namespace.name' as it is already installed"
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_install_collection(collection_artifact, monkeypatch):
|
||||
mock_display = MagicMock()
|
||||
monkeypatch.setattr(Display, 'display', mock_display)
|
||||
@@ -652,7 +653,7 @@
|
||||
assert mock_display.mock_calls[0][1][0] == "Installing 'ansible_namespace.collection:0.1.0' to '%s'" \
|
||||
% to_text(collection_path)
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_install_collection_with_download(galaxy_server, collection_artifact, monkeypatch):
|
||||
collection_tar = collection_artifact[1]
|
||||
output_path = os.path.join(os.path.split(collection_tar)[0], b'output')
|
||||
@@ -693,7 +694,7 @@
|
||||
assert mock_download.mock_calls[0][1][2] == 'myhash'
|
||||
assert mock_download.mock_calls[0][1][3] is True
|
||||
|
||||
-
|
||||
+@skipmark
|
||||
def test_install_collections_from_tar(collection_artifact, monkeypatch):
|
||||
collection_path, collection_tar = collection_artifact
|
||||
temp_path = os.path.split(collection_tar)[0]
|
||||
@@ -727,6 +728,7 @@
|
||||
assert display_msgs[2] == "Installing 'ansible_namespace.collection:0.1.0' to '%s'" % to_text(collection_path)
|
||||
|
||||
|
||||
+@skipmark
|
||||
def test_install_collections_existing_without_force(collection_artifact, monkeypatch):
|
||||
collection_path, collection_tar = collection_artifact
|
||||
temp_path = os.path.split(collection_tar)[0]
|
||||
@@ -758,6 +760,7 @@
|
||||
@pytest.mark.parametrize('collection_artifact', [
|
||||
{'ansible_namespace.collection': '>=0.0.1'},
|
||||
], indirect=True)
|
||||
+@skipmark
|
||||
def test_install_collection_with_circular_dependency(collection_artifact, monkeypatch):
|
||||
collection_path, collection_tar = collection_artifact
|
||||
temp_path = os.path.split(collection_tar)[0]
|
||||
|
||||
@ -1,76 +0,0 @@
|
||||
diff --color -Nur ansible.2.9.22.orig/lib/ansible/modules/system/hostname.py ansible-2.9.22/lib/ansible/modules/system/hostname.py
|
||||
--- ansible.2.9.22.orig/lib/ansible/modules/system/hostname.py 2021-05-24 14:18:02.000000000 -0700
|
||||
+++ ansible-2.9.22/lib/ansible/modules/system/hostname.py 2021-06-19 10:09:53.078883364 -0700
|
||||
@@ -782,6 +782,10 @@
|
||||
distribution = 'Neon'
|
||||
strategy_class = DebianStrategy
|
||||
|
||||
+class RockyLinuxHostname(Hostname):
|
||||
+ platform = 'Linux'
|
||||
+ distribution = 'Rocky'
|
||||
+ strategy_class = SystemdStrategy
|
||||
|
||||
def main():
|
||||
module = AnsibleModule(
|
||||
diff --color -Nur ansible.2.9.22.orig/lib/ansible/module_utils/facts/system/distribution.py ansible-2.9.22/lib/ansible/module_utils/facts/system/distribution.py
|
||||
--- ansible.2.9.22.orig/lib/ansible/module_utils/facts/system/distribution.py 2021-05-24 14:18:01.000000000 -0700
|
||||
+++ ansible-2.9.22/lib/ansible/module_utils/facts/system/distribution.py 2021-06-19 10:09:38.680877684 -0700
|
||||
@@ -467,7 +467,7 @@
|
||||
OS_FAMILY_MAP = {'RedHat': ['RedHat', 'Fedora', 'CentOS', 'Scientific', 'SLC',
|
||||
'Ascendos', 'CloudLinux', 'PSBM', 'OracleLinux', 'OVS',
|
||||
'OEL', 'Amazon', 'Virtuozzo', 'XenServer', 'Alibaba',
|
||||
- 'AlmaLinux'],
|
||||
+ 'AlmaLinux', 'Rocky'],
|
||||
'Debian': ['Debian', 'Ubuntu', 'Raspbian', 'Neon', 'KDE neon',
|
||||
'Linux Mint', 'SteamOS', 'Devuan', 'Kali', 'Cumulus Linux'],
|
||||
'Suse': ['SuSE', 'SLES', 'SLED', 'openSUSE', 'openSUSE Tumbleweed',
|
||||
diff --color -Nur ansible.2.9.22.orig/test/units/module_utils/facts/system/distribution/fixtures/rockylinux_8_3.json ansible-2.9.22/test/units/module_utils/facts/system/distribution/fixtures/rockylinux_8_3.json
|
||||
--- ansible.2.9.22.orig/test/units/module_utils/facts/system/distribution/fixtures/rockylinux_8_3.json 1969-12-31 16:00:00.000000000 -0800
|
||||
+++ ansible-2.9.22/test/units/module_utils/facts/system/distribution/fixtures/rockylinux_8_3.json 2021-06-19 10:12:39.019948830 -0700
|
||||
@@ -0,0 +1,46 @@
|
||||
+{
|
||||
+ "name": "Rocky 8.3",
|
||||
+ "distro": {
|
||||
+ "codename": "",
|
||||
+ "id": "rocky",
|
||||
+ "name": "Rocky Linux",
|
||||
+ "version": "8.3",
|
||||
+ "version_best": "8.3",
|
||||
+ "lsb_release_info": {},
|
||||
+ "os_release_info": {
|
||||
+ "name": "Rocky Linux",
|
||||
+ "version": "8.3",
|
||||
+ "id": "rocky",
|
||||
+ "id_like": "rhel fedora",
|
||||
+ "version_id": "8.3",
|
||||
+ "platform_id": "platform:el8",
|
||||
+ "pretty_name": "Rocky Linux 8.3",
|
||||
+ "ansi_color": "0;31",
|
||||
+ "cpe_name": "cpe:/o:rocky:rocky:8",
|
||||
+ "home_url": "https://rockylinux.org/",
|
||||
+ "bug_report_url": "https://bugs.rockylinux.org/",
|
||||
+ "rocky_support_product": "Rocky Linux",
|
||||
+ "rocky_support_product_version": "8"
|
||||
+ }
|
||||
+ },
|
||||
+ "input": {
|
||||
+ "/etc/redhat-release": "Rocky Linux release 8.3\n",
|
||||
+ "/etc/system-release": "Rocky Linux release 8.3\n",
|
||||
+ "/etc/rocky-release": "Rocky Linux release 8.3\n",
|
||||
+ "/etc/os-release": "NAME=\"Rocky Linux\"\nVERSION=\"8.3\"\nID=\"rocky\"\nID_LIKE=\"rhel fedora\"\nVERSION_ID=\"8.3\"\nPLATFORM_ID=\"platform:el8\"\nPRETTY_NAME=\"Rocky Linux 8.3\"\nANSI_COLOR=\"0;31\"\nCPE_NAME=\"cpe:/o:rocky:rocky:8\"\nHOME_URL=\"https://rockylinux.org/\"\nBUG_REPORT_URL=\"https://bugs.rockylinux.org/\"\nROCKY_SUPPORT_PRODUCT=\"Rocky Linux\"\nROCKY_SUPPORT_PRODUCT_VERSION=\"8\"\n",
|
||||
+ "/usr/lib/os-release": "NAME=\"Rocky Linux\"\nVERSION=\"8.3\"\nID=\"rocky\"\nID_LIKE=\"rhel fedora\"\nVERSION_ID=\"8.3\"\nPLATFORM_ID=\"platform:el8\"\nPRETTY_NAME=\"Rocky Linux 8.3\"\nANSI_COLOR=\"0;31\"\nCPE_NAME=\"cpe:/o:rocky:rocky:8\"\nHOME_URL=\"https://rockylinux.org/\"\nBUG_REPORT_URL=\"https://bugs.rockylinux.org/\"\nROCKY_SUPPORT_PRODUCT=\"Rocky Linux\"\nROCKY_SUPPORT_PRODUCT_VERSION=\"8\"\n"
|
||||
+ },
|
||||
+ "platform.dist": [
|
||||
+ "rocky",
|
||||
+ "8.3",
|
||||
+ ""
|
||||
+ ],
|
||||
+ "result": {
|
||||
+ "distribution": "Rocky",
|
||||
+ "distribution_version": "8.3",
|
||||
+ "distribution_release": "NA",
|
||||
+ "distribution_major_version": "8",
|
||||
+ "os_family": "RedHat"
|
||||
+ },
|
||||
+ "platform.release": "4.18.0-240.22.1.el8.x86_64"
|
||||
+}
|
||||
@ -1,12 +0,0 @@
|
||||
diff --color -Nur ansible-2.9.23.orig/docs/docsite/_extensions/pygments_lexer.py ansible-2.9.23/docs/docsite/_extensions/pygments_lexer.py
|
||||
--- ansible-2.9.23.orig/docs/docsite/_extensions/pygments_lexer.py 2021-06-21 23:04:48.000000000 -0700
|
||||
+++ ansible-2.9.23/docs/docsite/_extensions/pygments_lexer.py 2021-07-10 12:33:05.790899630 -0700
|
||||
@@ -178,7 +178,7 @@
|
||||
See http://www.sphinx-doc.org/en/stable/extdev/index.html#dev-extensions.
|
||||
"""
|
||||
for lexer in [
|
||||
- AnsibleOutputLexer(startinline=True)
|
||||
+ AnsibleOutputLexer
|
||||
]:
|
||||
app.add_lexer(lexer.name, lexer)
|
||||
for alias in lexer.aliases:
|
||||
Binary file not shown.
@ -1,81 +0,0 @@
|
||||
diff --color -Nur ansible-2.9.27.orig/test/units/modules/cloud/openstack/test_os_server.py ansible-2.9.27/test/units/modules/cloud/openstack/test_os_server.py
|
||||
--- ansible-2.9.27.orig/test/units/modules/cloud/openstack/test_os_server.py 2021-10-11 08:18:57.290846800 -0700
|
||||
+++ ansible-2.9.27/test/units/modules/cloud/openstack/test_os_server.py 2021-10-26 14:36:44.086550302 -0700
|
||||
@@ -22,7 +22,7 @@
|
||||
module.'''
|
||||
|
||||
doc = inspect.getdoc(func)
|
||||
- cfg = yaml.load(doc)
|
||||
+ cfg = yaml.load(doc, Loader=yaml.CLoader)
|
||||
|
||||
for task in cfg:
|
||||
for module, params in task.items():
|
||||
diff --color -Nur ansible-2.9.27.orig/test/units/modules/remote_management/oneview/test_oneview_ethernet_network.py ansible-2.9.27/test/units/modules/remote_management/oneview/test_oneview_ethernet_network.py
|
||||
--- ansible-2.9.27.orig/test/units/modules/remote_management/oneview/test_oneview_ethernet_network.py 2021-10-11 08:18:57.447847000 -0700
|
||||
+++ ansible-2.9.27/test/units/modules/remote_management/oneview/test_oneview_ethernet_network.py 2021-10-26 14:37:25.647363390 -0700
|
||||
@@ -141,7 +141,7 @@
|
||||
self.resource.update.return_value = data_merged
|
||||
self.mock_ov_client.connection_templates.get.return_value = {"uri": "uri"}
|
||||
|
||||
- self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES)
|
||||
+ self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES, Loader=yaml.CLoader)
|
||||
|
||||
EthernetNetworkModule().run()
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
self.resource.get_by.return_value = [DICT_PARAMS_WITH_CHANGES]
|
||||
self.mock_ov_client.connection_templates.get.return_value = {"uri": "uri"}
|
||||
|
||||
- self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES)
|
||||
+ self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES, Loader=yaml.CLoader)
|
||||
|
||||
EthernetNetworkModule().run()
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
self.mock_ov_client.connection_templates.get.return_value = {
|
||||
"bandwidth": DICT_PARAMS_WITH_CHANGES['bandwidth']}
|
||||
|
||||
- self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES)
|
||||
+ self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES, Loader=yaml.CLoader)
|
||||
|
||||
EthernetNetworkModule().run()
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
self.resource.get_by.return_value = [DEFAULT_ENET_TEMPLATE]
|
||||
self.resource.update.return_value = data_merged
|
||||
|
||||
- self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES)
|
||||
+ self.mock_ansible_module.params = yaml.load(YAML_PARAMS_WITH_CHANGES, Loader=yaml.CLoader)
|
||||
|
||||
EthernetNetworkModule().run()
|
||||
|
||||
@@ -329,7 +329,7 @@
|
||||
"max": 1
|
||||
}}
|
||||
|
||||
- self.mock_ansible_module.params = yaml.load(YAML_RESET_CONNECTION_TEMPLATE)
|
||||
+ self.mock_ansible_module.params = yaml.load(YAML_RESET_CONNECTION_TEMPLATE, Loader=yaml.CLoader)
|
||||
|
||||
EthernetNetworkModule().run()
|
||||
|
||||
@@ -340,7 +340,7 @@
|
||||
def test_should_fail_when_reset_not_existing_ethernet_network(self):
|
||||
self.resource.get_by.return_value = [None]
|
||||
|
||||
- self.mock_ansible_module.params = yaml.load(YAML_RESET_CONNECTION_TEMPLATE)
|
||||
+ self.mock_ansible_module.params = yaml.load(YAML_RESET_CONNECTION_TEMPLATE, Loader=yaml.CLoader)
|
||||
|
||||
EthernetNetworkModule().run()
|
||||
|
||||
diff --color -Nur ansible-2.9.27.orig/test/units/plugins/action/test_synchronize.py ansible-2.9.27/test/units/plugins/action/test_synchronize.py
|
||||
--- ansible-2.9.27.orig/test/units/plugins/action/test_synchronize.py 2021-10-11 08:18:57.476847000 -0700
|
||||
+++ ansible-2.9.27/test/units/plugins/action/test_synchronize.py 2021-10-26 15:22:02.968085259 -0700
|
||||
@@ -121,7 +121,7 @@
|
||||
metapath = os.path.join(fixturepath, 'meta.yaml')
|
||||
with open(metapath, 'rb') as f:
|
||||
fdata = f.read()
|
||||
- test_meta = yaml.load(fdata)
|
||||
+ test_meta = yaml.load(fdata, Loader=yaml.CLoader)
|
||||
|
||||
# load initial play context vars
|
||||
if '_play_context' in test_meta:
|
||||
@ -1,78 +0,0 @@
|
||||
diff -Nur ansible-2.9.6.orig/test/units/galaxy/test_collection_install.py ansible-2.9.6/test/units/galaxy/test_collection_install.py
|
||||
--- ansible-2.9.6.orig/test/units/galaxy/test_collection_install.py 2020-03-04 21:40:01.000000000 -0800
|
||||
+++ ansible-2.9.6/test/units/galaxy/test_collection_install.py 2020-03-06 13:35:48.489822740 -0800
|
||||
@@ -204,40 +204,40 @@
|
||||
collection.CollectionRequirement.from_path(collection_artifact[0], True)
|
||||
|
||||
|
||||
-def test_build_requirement_from_path_no_version(collection_artifact, monkeypatch):
|
||||
- manifest_path = os.path.join(collection_artifact[0], b'MANIFEST.json')
|
||||
- manifest_value = json.dumps({
|
||||
- 'collection_info': {
|
||||
- 'namespace': 'namespace',
|
||||
- 'name': 'name',
|
||||
- 'version': '',
|
||||
- 'dependencies': {}
|
||||
- }
|
||||
- })
|
||||
- with open(manifest_path, 'wb') as manifest_obj:
|
||||
- manifest_obj.write(to_bytes(manifest_value))
|
||||
-
|
||||
- mock_display = MagicMock()
|
||||
- monkeypatch.setattr(Display, 'display', mock_display)
|
||||
-
|
||||
- actual = collection.CollectionRequirement.from_path(collection_artifact[0], True)
|
||||
-
|
||||
- # While the folder name suggests a different collection, we treat MANIFEST.json as the source of truth.
|
||||
- assert actual.namespace == u'namespace'
|
||||
- assert actual.name == u'name'
|
||||
- assert actual.b_path == collection_artifact[0]
|
||||
- assert actual.api is None
|
||||
- assert actual.skip is True
|
||||
- assert actual.versions == set(['*'])
|
||||
- assert actual.latest_version == u'*'
|
||||
- assert actual.dependencies == {}
|
||||
-
|
||||
- assert mock_display.call_count == 1
|
||||
-
|
||||
- actual_warn = ' '.join(mock_display.mock_calls[0][1][0].split('\n'))
|
||||
- expected_warn = "Collection at '%s' does not have a valid version set, falling back to '*'. Found version: ''" \
|
||||
- % to_text(collection_artifact[0])
|
||||
- assert expected_warn in actual_warn
|
||||
+#def test_build_requirement_from_path_no_version(collection_artifact, monkeypatch):
|
||||
+# manifest_path = os.path.join(collection_artifact[0], b'MANIFEST.json')
|
||||
+# manifest_value = json.dumps({
|
||||
+# 'collection_info': {
|
||||
+# 'namespace': 'namespace',
|
||||
+# 'name': 'name',
|
||||
+# 'version': '',
|
||||
+# 'dependencies': {}
|
||||
+# }
|
||||
+# })
|
||||
+# with open(manifest_path, 'wb') as manifest_obj:
|
||||
+# manifest_obj.write(to_bytes(manifest_value))
|
||||
+#
|
||||
+# mock_display = MagicMock()
|
||||
+# monkeypatch.setattr(Display, 'display', mock_display)
|
||||
+#
|
||||
+# actual = collection.CollectionRequirement.from_path(collection_artifact[0], True)
|
||||
+#
|
||||
+# # While the folder name suggests a different collection, we treat MANIFEST.json as the source of truth.
|
||||
+# assert actual.namespace == u'namespace'
|
||||
+# assert actual.name == u'name'
|
||||
+# assert actual.b_path == collection_artifact[0]
|
||||
+# assert actual.api is None
|
||||
+# assert actual.skip is True
|
||||
+# assert actual.versions == set(['*'])
|
||||
+# assert actual.latest_version == u'*'
|
||||
+# assert actual.dependencies == {}
|
||||
+#
|
||||
+# assert mock_display.call_count == 1
|
||||
+#
|
||||
+# actual_warn = ' '.join(mock_display.mock_calls[0][1][0].split('\n'))
|
||||
+# expected_warn = "Collection at '%s' does not have a valid version set, falling back to '*'. Found version: ''" \
|
||||
+# % to_text(collection_artifact[0])
|
||||
+# assert expected_warn in actual_warn
|
||||
|
||||
|
||||
def test_build_requirement_from_tar(collection_artifact):
|
||||
191
ansible-2.9.spec
191
ansible-2.9.spec
@ -1,191 +0,0 @@
|
||||
%global with_docs 1
|
||||
Name: ansible-2.9
|
||||
Summary: SSH-based configuration management, deployment, and task execution system
|
||||
Version: 2.9.24
|
||||
Release: 5
|
||||
License: GPLv3+
|
||||
Source0: https://releases.ansible.com/ansible/ansible-%{version}.tar.gz
|
||||
Source1: ansible.attr
|
||||
Source2: ansible-generator
|
||||
Source3: macros.ansible
|
||||
Url: http://ansible.com
|
||||
BuildArch: noarch
|
||||
Patch1: ansible-2.9.22-rocky.patch
|
||||
Patch2: ansible-2.9.6-disable-test_build_requirement_from_path_no_version.patch
|
||||
Patch3: fix-python-3.9-compatibility.patch
|
||||
Patch4: Disable-strict-markers-with-pytest-3.6.patch
|
||||
Patch5: Skip-some-test-cases-that-fail-because-the-pytest-too-old.patch
|
||||
Patch6: ansible-2.9.23-sphinx4.patch
|
||||
Patch7: ansible-2.9.27-pyyaml-6-compat.patch
|
||||
Patch8: skip-crypto-testscase.patch
|
||||
Provides: ansible-2.9-python3 = %{version}-%{release}
|
||||
Obsoletes: ansible-2.9-python3 < %{version}-%{release}
|
||||
Conflicts: ansible-base > 2.10.0
|
||||
Conflicts: ansible-core > 2.11.0
|
||||
BuildRequires: python3-packaging python3-pexpect python3-paramiko python3-pywinrm
|
||||
BuildRequires: python3-pbkdf2 python3-httmock python3-python-gitlab
|
||||
BuildRequires: python3-boto3 python3-botocore python3-coverage python3-passlib git-core
|
||||
BuildRequires: openssl
|
||||
%if 0%{?with_docs}
|
||||
BuildRequires: python3-sphinx python3-sphinx-theme-alabaster python3-sphinx-notfound-page
|
||||
BuildRequires: asciidoc python3-straight-plugin
|
||||
%endif
|
||||
BuildRequires: python3-devel python3-setuptools python3-six python3-pytest
|
||||
BuildRequires: python3-pytest-xdist python3-pytest-mock python3-requests python3-mock
|
||||
BuildRequires: python3-jinja2 python3-pyyaml python3-cryptography python3-pyvmomi make
|
||||
Recommends: python3-paramiko
|
||||
Recommends: python3-winrm
|
||||
Requires: python3-setuptools python3-six python3-jinja2 python3-pyyaml sshpass
|
||||
Requires: python3-jmespath
|
||||
%description
|
||||
Ansible is a radically simple model-driven configuration management,
|
||||
multi-node deployment, and remote task execution system. Ansible works
|
||||
over SSH and does not require any software or daemons to be installed
|
||||
on remote nodes. Extension modules can be written in any language and
|
||||
are transferred to managed machines automatically.
|
||||
|
||||
%package -n ansible-2.9-doc
|
||||
Summary: Documentation for Ansible
|
||||
Conflicts: ansible-doc
|
||||
%description -n ansible-2.9-doc
|
||||
Ansible is a radically simple model-driven configuration management,
|
||||
multi-node deployment, and remote task execution system. Ansible works
|
||||
over SSH and does not require any software or daemons to be installed
|
||||
on remote nodes. Extension modules can be written in any language and
|
||||
are transferred to managed machines automatically.
|
||||
This package installs extensive documentation for ansible
|
||||
|
||||
%package -n ansible-2.9-test
|
||||
Summary: Tool for testing ansible plugin and module code
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Conflicts: ansible-test
|
||||
|
||||
%description -n ansible-2.9-test
|
||||
Ansible is a radically simple model-driven configuration management,
|
||||
multi-node deployment, and remote task execution system. Ansible works
|
||||
over SSH and does not require any software or daemons to be installed
|
||||
on remote nodes. Extension modules can be written in any language and
|
||||
are transferred to managed machines automatically.
|
||||
This package installs the ansible-test command for testing modules and plugins
|
||||
developed for ansible.
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n ansible-%{version}
|
||||
cp -a %{S:1} %{S:2} %{S:3} .
|
||||
|
||||
%build
|
||||
sed -i -e 's|/usr/bin/env python|/usr/bin/python3|' test/lib/ansible_test/_data/*.py test/lib/ansible_test/_data/*/*.py test/lib/ansible_test/_data/*/*/*.py docs/bin/find-plugin-refs.py
|
||||
sed -i -s 's|/usr/bin/env pwsh||' test/lib/ansible_test/_data/sanity/validate-modules/validate_modules/ps_argspec.ps1
|
||||
sed -i -s 's|/usr/bin/env pwsh||' test/lib/ansible_test/_data/sanity/pslint/pslint.ps1
|
||||
sed -i -s 's|/usr/bin/env pwsh||' test/lib/ansible_test/_data/requirements/sanity.ps1
|
||||
%global py3_shbang_opts %(echo %{py3_shbang_opts} | sed 's/-s//')
|
||||
%py3_build
|
||||
%if 0%{?with_docs}
|
||||
make PYTHON=/usr/bin/python3 SPHINXBUILD=sphinx-build-3 webdocs
|
||||
%else
|
||||
make PYTHON=/usr/bin/python3 -Cdocs/docsite config cli keywords modules plugins testing
|
||||
%endif
|
||||
|
||||
%install
|
||||
%py3_install
|
||||
DATADIR_LOCATIONS='%{_datadir}/ansible/collections
|
||||
%{_datadir}/ansible/collections/ansible_collections
|
||||
%{_datadir}/ansible/plugins/doc_fragments
|
||||
%{_datadir}/ansible/plugins/action
|
||||
%{_datadir}/ansible/plugins/become
|
||||
%{_datadir}/ansible/plugins/cache
|
||||
%{_datadir}/ansible/plugins/callback
|
||||
%{_datadir}/ansible/plugins/cliconf
|
||||
%{_datadir}/ansible/plugins/connection
|
||||
%{_datadir}/ansible/plugins/filter
|
||||
%{_datadir}/ansible/plugins/httpapi
|
||||
%{_datadir}/ansible/plugins/inventory
|
||||
%{_datadir}/ansible/plugins/lookup
|
||||
%{_datadir}/ansible/plugins/modules
|
||||
%{_datadir}/ansible/plugins/module_utils
|
||||
%{_datadir}/ansible/plugins/netconf
|
||||
%{_datadir}/ansible/roles
|
||||
%{_datadir}/ansible/plugins/strategy
|
||||
%{_datadir}/ansible/plugins/terminal
|
||||
%{_datadir}/ansible/plugins/test
|
||||
%{_datadir}/ansible/plugins/vars'
|
||||
UPSTREAM_DATADIR_LOCATIONS=$(grep -ri default lib/ansible/config/base.yml| tr ':' '\n' | grep '/usr/share/ansible')
|
||||
if [ "$SYSTEM_LOCATIONS" != "$UPSTREAM_SYSTEM_LOCATIONS" ] ; then
|
||||
echo "The upstream Ansible datadir locations have changed. Spec file needs to be updated"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p $RPM_BUILD_ROOT%{_datadir}/ansible/plugins/
|
||||
for location in $DATADIR_LOCATIONS ; do
|
||||
mkdir $RPM_BUILD_ROOT"$location"
|
||||
done
|
||||
mkdir -p $RPM_BUILD_ROOT/etc/ansible/
|
||||
mkdir -p $RPM_BUILD_ROOT/etc/ansible/roles/
|
||||
cp examples/hosts $RPM_BUILD_ROOT/etc/ansible/
|
||||
cp examples/ansible.cfg $RPM_BUILD_ROOT/etc/ansible/
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man1
|
||||
cp -v docs/man/man1/*.1 $RPM_BUILD_ROOT/%{_mandir}/man1/
|
||||
cp -pr docs/docsite/rst .
|
||||
%if 0%{?with_docs}
|
||||
cp -pr docs/docsite/_build/html %{_builddir}/ansible-%{version}/html
|
||||
%endif
|
||||
install -Dpm0644 -t %{buildroot}%{_fileattrsdir} ansible.attr
|
||||
install -Dpm0644 -t %{buildroot}%{_rpmmacrodir} macros.ansible
|
||||
install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} ansible-generator
|
||||
|
||||
%check
|
||||
# Start dbus service in docker environment, test_nmcli depends on the dbus service
|
||||
if [ "%{_gpg_name}" != "private OBS" ] && [ ! -d /var/run/dbus ];then
|
||||
mkdir -p /var/run/dbus
|
||||
dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address
|
||||
fi
|
||||
|
||||
ln -s /usr/bin/pytest-3 bin/pytest
|
||||
pathfix.py -i %{__python3} -p test/lib/ansible_test/_data/cli/ansible_test_cli_stub.py
|
||||
rm -f test/units/modules/cloud/cloudstack/test_cs_traffic_type.py
|
||||
rm -f test/units/module_utils/facts/hardware/test_sunos_get_uptime_facts.py
|
||||
rm -f test/units/modules/source_control/test_gitlab_runner.py
|
||||
rm -f test/units/plugins/lookup/test_aws_secret.py
|
||||
rm -f test/units/plugins/lookup/test_aws_ssm.py
|
||||
make PYTHON=/usr/bin/python3 tests-py3
|
||||
|
||||
%files
|
||||
%license COPYING
|
||||
%doc README.rst PKG-INFO changelogs/CHANGELOG-v2.9.rst
|
||||
%doc %{_mandir}/man1/ansible*
|
||||
%config(noreplace) %{_sysconfdir}/ansible/
|
||||
%{_bindir}/ansible*
|
||||
%{_datadir}/ansible/
|
||||
%{python3_sitelib}/ansible
|
||||
%{python3_sitelib}/ansible_test
|
||||
%{python3_sitelib}/*egg-info
|
||||
%{_fileattrsdir}/ansible.attr
|
||||
%{_rpmmacrodir}/macros.ansible
|
||||
%{_rpmconfigdir}/ansible-generator
|
||||
%exclude %{_bindir}/ansible-test
|
||||
%exclude %{python3_sitelib}/ansible_test
|
||||
|
||||
%files -n ansible-2.9-doc
|
||||
%doc rst
|
||||
%if 0%{?with_docs}
|
||||
%doc html
|
||||
%endif
|
||||
|
||||
%files -n ansible-2.9-test
|
||||
%{_bindir}/ansible-test
|
||||
%{python3_sitelib}/ansible_test
|
||||
|
||||
%changelog
|
||||
* Wed Nov 15 2023 xu_ping <707078654@qq.com> - 2.9.24-5
|
||||
- fix crypto testcase failed due to python-crypto removal.
|
||||
|
||||
* Mon May 29 2023 liyanan <thistleslyn@163.com> - 2.9.24-4
|
||||
- modify buildrequire crypto to cryptography
|
||||
|
||||
* Wed Dec 07 2022 wangkai <wangkai385@h-partners.com> - 2.9.24-3
|
||||
- Start dbus service in docker environment
|
||||
|
||||
* Mon May 9 2022 yaoxin <yaoxin30@h-partners.com> - 2.9.24-2
|
||||
- Remove the python-nose compilation dependency and resolve the compilation error.
|
||||
|
||||
* Tue Sep 14 2021 huanghaitao <huanghaitao8@huawei.com> - 2.9.24-1
|
||||
- package init
|
||||
@ -1,46 +0,0 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument(
|
||||
"-P", "--provides", action="store_const", const="provides", dest="action"
|
||||
)
|
||||
group.add_argument(
|
||||
"-R", "--requires", action="store_const", const="requires", dest="action"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
files = sys.stdin.read().splitlines()
|
||||
|
||||
for f in files:
|
||||
with open(f, "r") as fobj:
|
||||
info = json.load(fobj)["collection_info"]
|
||||
if args.action == "provides":
|
||||
print(
|
||||
f"ansible-collection({info['namespace']}.{info['name']}) = {info['version']}"
|
||||
)
|
||||
if args.action == "requires":
|
||||
print("(ansible >= 2.9.0 or ansible-base > 2.10.0)")
|
||||
for dep, req in info.get("dependencies", {}).items():
|
||||
print(f"ansible-collection({dep})", end="")
|
||||
if req == "*":
|
||||
print()
|
||||
continue
|
||||
m = re.match(r"^>=(\d+\.\d+\.\d+)$", req)
|
||||
if m:
|
||||
print(f" >= {m.group(1)}")
|
||||
continue
|
||||
raise NotImplementedError(
|
||||
"Generation of dependencies different than '*' or '>=' is not supported yet"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -1,3 +0,0 @@
|
||||
%__ansible_provides %{_rpmconfigdir}/ansible-generator --provides
|
||||
%__ansible_requires %{_rpmconfigdir}/ansible-generator --requires
|
||||
%__ansible_path ^%{_datadir}/ansible/collections/ansible_collections/[^/]+/[^/]+/MANIFEST.json$
|
||||
@ -1,43 +0,0 @@
|
||||
diff --color -Nur ansible-2.9.16.orig/test/lib/ansible_test/_data/completion/docker.txt ansible-2.9.16/test/lib/ansible_test/_data/completion/docker.txt
|
||||
--- ansible-2.9.16.orig/test/lib/ansible_test/_data/completion/docker.txt 2020-12-14 15:48:25.000000000 -0800
|
||||
+++ ansible-2.9.16/test/lib/ansible_test/_data/completion/docker.txt 2020-12-17 11:38:44.409269125 -0800
|
||||
@@ -1,4 +1,4 @@
|
||||
-default name=quay.io/ansible/default-test-container:1.10.1 python=3.6,2.6,2.7,3.5,3.7,3.8 seccomp=unconfined
|
||||
+default name=quay.io/ansible/default-test-container:1.10.1 python=3.6,2.6,2.7,3.5,3.7,3.8,3.9,3.10 seccomp=unconfined
|
||||
centos6 name=quay.io/ansible/centos6-test-container:1.26.0 python=2.6 seccomp=unconfined
|
||||
centos7 name=quay.io/ansible/centos7-test-container:1.8.0 python=2.7 seccomp=unconfined
|
||||
centos8 name=quay.io/ansible/centos8-test-container:1.10.0 python=3.6 seccomp=unconfined
|
||||
diff --color -Nur ansible-2.9.16.orig/test/lib/ansible_test/_data/sanity/compile/compile.py ansible-2.9.16/test/lib/ansible_test/_data/sanity/compile/compile.py
|
||||
--- ansible-2.9.16.orig/test/lib/ansible_test/_data/sanity/compile/compile.py 2020-12-14 15:48:25.000000000 -0800
|
||||
+++ ansible-2.9.16/test/lib/ansible_test/_data/sanity/compile/compile.py 2020-12-17 11:36:47.712080958 -0800
|
||||
@@ -3,9 +3,16 @@
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
-import parser
|
||||
-import sys
|
||||
+import warnings
|
||||
+
|
||||
+with warnings.catch_warnings():
|
||||
+ # The parser module is deprecated as of Python 3.9.
|
||||
+ # This implementation will need to be updated to use another solution.
|
||||
+ # Until then, disable the deprecation warnings to prevent test failures.
|
||||
+ warnings.simplefilter('ignore', DeprecationWarning)
|
||||
+ import parser
|
||||
|
||||
+import sys
|
||||
|
||||
def main():
|
||||
status = 0
|
||||
diff --color -Nur ansible-2.9.16.orig/test/lib/ansible_test/_internal/util.py ansible-2.9.16/test/lib/ansible_test/_internal/util.py
|
||||
--- ansible-2.9.16.orig/test/lib/ansible_test/_internal/util.py 2020-12-14 15:48:25.000000000 -0800
|
||||
+++ ansible-2.9.16/test/lib/ansible_test/_internal/util.py 2020-12-17 11:36:47.713080960 -0800
|
||||
@@ -110,6 +110,8 @@
|
||||
'3.6',
|
||||
'3.7',
|
||||
'3.8',
|
||||
+ '3.9',
|
||||
+ '3.10',
|
||||
)
|
||||
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
%ansible_collection_url() https://galaxy.ansible.com/%{collection_namespace}/%{collection_name}
|
||||
|
||||
%ansible_collection_build() ansible-galaxy collection build
|
||||
|
||||
%ansible_collection_install() ansible-galaxy collection install -n -p %{buildroot}%{_datadir}/ansible/collections %{collection_namespace}-%{collection_name}-%{version}.tar.gz
|
||||
|
||||
%ansible_collection_files %{_datadir}/ansible/collections/ansible_collections/%{collection_namespace}/
|
||||
@ -1,60 +0,0 @@
|
||||
From b01f683aca986cc58b515aa02c7b3e67977b7bba Mon Sep 17 00:00:00 2001
|
||||
From: xu_ping <707078654@qq.com>
|
||||
Date: Wed, 15 Nov 2023 11:10:55 +0800
|
||||
Subject: [PATCH] skip crypto testscase
|
||||
|
||||
Signed-off-by: xu_ping <707078654@qq.com>
|
||||
---
|
||||
test/units/parsing/vault/test_vault.py | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/test/units/parsing/vault/test_vault.py b/test/units/parsing/vault/test_vault.py
|
||||
index c7d6b8d8..13d434e1 100644
|
||||
--- a/test/units/parsing/vault/test_vault.py
|
||||
+++ b/test/units/parsing/vault/test_vault.py
|
||||
@@ -40,6 +40,7 @@ from ansible.parsing import vault
|
||||
from units.mock.loader import DictDataLoader
|
||||
from units.mock.vault_helper import TextVaultSecret
|
||||
|
||||
+skipmark = pytest.mark.skip(reason='crypto package is recycle')
|
||||
|
||||
class TestUnhexlify(unittest.TestCase):
|
||||
def test(self):
|
||||
@@ -510,7 +511,7 @@ class TestVaultCipherAes256(unittest.TestCase):
|
||||
b_key_cryptography = self.vault_cipher._create_key_cryptography(b_password, b_salt, key_length=32, iv_length=16)
|
||||
self.assertIsInstance(b_key_cryptography, six.binary_type)
|
||||
|
||||
- @pytest.mark.skipif(not vault.HAS_PYCRYPTO, reason='Not testing pycrypto key as pycrypto is not installed')
|
||||
+ @skipmark
|
||||
def test_create_key_pycrypto(self):
|
||||
b_password = b'hunter42'
|
||||
b_salt = os.urandom(32)
|
||||
@@ -518,8 +519,7 @@ class TestVaultCipherAes256(unittest.TestCase):
|
||||
b_key_pycrypto = self.vault_cipher._create_key_pycrypto(b_password, b_salt, key_length=32, iv_length=16)
|
||||
self.assertIsInstance(b_key_pycrypto, six.binary_type)
|
||||
|
||||
- @pytest.mark.skipif(not vault.HAS_PYCRYPTO,
|
||||
- reason='Not comparing cryptography key to pycrypto key as pycrypto is not installed')
|
||||
+ @skipmark
|
||||
def test_compare_new_keys(self):
|
||||
b_password = b'hunter42'
|
||||
b_salt = os.urandom(32)
|
||||
@@ -528,6 +528,7 @@ class TestVaultCipherAes256(unittest.TestCase):
|
||||
b_key_pycrypto = self.vault_cipher._create_key_pycrypto(b_password, b_salt, key_length=32, iv_length=16)
|
||||
self.assertEqual(b_key_cryptography, b_key_pycrypto)
|
||||
|
||||
+ @skipmark
|
||||
def test_create_key_known_cryptography(self):
|
||||
b_password = b'hunter42'
|
||||
|
||||
@@ -555,6 +556,7 @@ class TestVaultCipherAes256(unittest.TestCase):
|
||||
self.assertEqual(b_key_3, b_key_4)
|
||||
self.assertEqual(b_key_1, b_key_4)
|
||||
|
||||
+ @skipmark
|
||||
def test_create_key_known_pycrypto(self):
|
||||
b_password = b'hunter42'
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user