diff options
Diffstat (limited to 'test/units/modules/source_control')
11 files changed, 0 insertions, 2262 deletions
diff --git a/test/units/modules/source_control/bitbucket/test_bitbucket_access_key.py b/test/units/modules/source_control/bitbucket/test_bitbucket_access_key.py deleted file mode 100644 index f1cb4fe71b..0000000000 --- a/test/units/modules/source_control/bitbucket/test_bitbucket_access_key.py +++ /dev/null @@ -1,337 +0,0 @@ -from ansible.module_utils.source_control.bitbucket import BitbucketHelper -from ansible.modules.source_control.bitbucket import bitbucket_access_key -from units.compat import unittest -from units.compat.mock import patch -from units.modules.utils import AnsibleFailJson, AnsibleExitJson, ModuleTestCase, set_module_args - - -class TestBucketAccessKeyModule(ModuleTestCase): - def setUp(self): - super(TestBucketAccessKeyModule, self).setUp() - self.module = bitbucket_access_key - - def test_missing_key_with_present_state(self): - with self.assertRaises(AnsibleFailJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'label': 'key name', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(exec_info.exception.args[0]['msg'], self.module.error_messages['required_key']) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value=None) - def test_create_deploy_key(self, *args): - with patch.object(self.module, 'create_deploy_key') as create_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'key': 'public_key', - 'label': 'key name', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(create_deploy_key_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value=None) - def test_create_deploy_key_check_mode(self, *args): - with patch.object(self.module, 'create_deploy_key') as create_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'key': 'public_key', - 'label': 'key name', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(create_deploy_key_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value={ - "id": 123, - "label": "mykey", - "created_on": "2019-03-23T10:15:21.517377+00:00", - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADA...AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", - "type": "deploy_key", - "comment": "", - "last_used": None, - "repository": { - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test" - }, - "html": { - "href": "https://bitbucket.org/mleu/test" - }, - "avatar": { - "href": "..." - } - }, - "type": "repository", - "name": "test", - "full_name": "mleu/test", - "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" - }, - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" - } - }, - }) - def test_update_deploy_key(self, *args): - with patch.object(self.module, 'delete_deploy_key') as delete_deploy_key_mock: - with patch.object(self.module, 'create_deploy_key') as create_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'key': 'new public key', - 'label': 'mykey', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(delete_deploy_key_mock.call_count, 1) - self.assertEqual(create_deploy_key_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value={ - "id": 123, - "label": "mykey", - "created_on": "2019-03-23T10:15:21.517377+00:00", - "key": "new public key", - "type": "deploy_key", - "comment": "", - "last_used": None, - "repository": { - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test" - }, - "html": { - "href": "https://bitbucket.org/mleu/test" - }, - "avatar": { - "href": "..." - } - }, - "type": "repository", - "name": "test", - "full_name": "mleu/test", - "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" - }, - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" - } - }, - }) - def test_dont_update_same_value(self, *args): - with patch.object(self.module, 'delete_deploy_key') as delete_deploy_key_mock: - with patch.object(self.module, 'create_deploy_key') as create_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'key': 'new public key', - 'label': 'mykey', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(delete_deploy_key_mock.call_count, 0) - self.assertEqual(create_deploy_key_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value={ - "id": 123, - "label": "mykey", - "created_on": "2019-03-23T10:15:21.517377+00:00", - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADA...AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", - "type": "deploy_key", - "comment": "", - "last_used": None, - "repository": { - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test" - }, - "html": { - "href": "https://bitbucket.org/mleu/test" - }, - "avatar": { - "href": "..." - } - }, - "type": "repository", - "name": "test", - "full_name": "mleu/test", - "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" - }, - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" - } - }, - }) - def test_update_deploy_key_check_mode(self, *args): - with patch.object(self.module, 'delete_deploy_key') as delete_deploy_key_mock: - with patch.object(self.module, 'create_deploy_key') as create_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'key': 'new public key', - 'label': 'mykey', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(delete_deploy_key_mock.call_count, 0) - self.assertEqual(create_deploy_key_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value={ - "id": 123, - "label": "mykey", - "created_on": "2019-03-23T10:15:21.517377+00:00", - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADA...AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", - "type": "deploy_key", - "comment": "", - "last_used": None, - "repository": { - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test" - }, - "html": { - "href": "https://bitbucket.org/mleu/test" - }, - "avatar": { - "href": "..." - } - }, - "type": "repository", - "name": "test", - "full_name": "mleu/test", - "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" - }, - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" - } - }, - }) - def test_delete_deploy_key(self, *args): - with patch.object(self.module, 'delete_deploy_key') as delete_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'label': 'mykey', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_deploy_key_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value=None) - def test_delete_absent_deploy_key(self, *args): - with patch.object(self.module, 'delete_deploy_key') as delete_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'label': 'mykey', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_deploy_key_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_access_key, 'get_existing_deploy_key', return_value={ - "id": 123, - "label": "mykey", - "created_on": "2019-03-23T10:15:21.517377+00:00", - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADA...AdkTg7HGqL3rlaDrEcWfL7Lu6TnhBdq5", - "type": "deploy_key", - "comment": "", - "last_used": None, - "repository": { - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test" - }, - "html": { - "href": "https://bitbucket.org/mleu/test" - }, - "avatar": { - "href": "..." - } - }, - "type": "repository", - "name": "test", - "full_name": "mleu/test", - "uuid": "{85d08b4e-571d-44e9-a507-fa476535aa98}" - }, - "links": { - "self": { - "href": "https://api.bitbucket.org/2.0/repositories/mleu/test/deploy-keys/123" - } - }, - }) - def test_delete_deploy_key_check_mode(self, *args): - with patch.object(self.module, 'delete_deploy_key') as delete_deploy_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'label': 'mykey', - 'state': 'absent', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(delete_deploy_key_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - -if __name__ == '__main__': - unittest.main() diff --git a/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_key_pair.py b/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_key_pair.py deleted file mode 100644 index 44e7c31ea7..0000000000 --- a/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_key_pair.py +++ /dev/null @@ -1,192 +0,0 @@ -from ansible.module_utils.source_control.bitbucket import BitbucketHelper -from ansible.modules.source_control.bitbucket import bitbucket_pipeline_key_pair -from units.compat import unittest -from units.compat.mock import patch -from units.modules.utils import AnsibleFailJson, AnsibleExitJson, ModuleTestCase, set_module_args - - -class TestBucketPipelineKeyPairModule(ModuleTestCase): - def setUp(self): - super(TestBucketPipelineKeyPairModule, self).setUp() - self.module = bitbucket_pipeline_key_pair - - def test_missing_keys_with_present_state(self): - with self.assertRaises(AnsibleFailJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(exec_info.exception.args[0]['msg'], self.module.error_messages['required_keys']) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value=None) - def test_create_keys(self, *args): - with patch.object(self.module, 'update_ssh_key_pair') as update_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'public_key': 'public', - 'private_key': 'PRIVATE', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_ssh_key_pair_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value=None) - def test_create_keys_check_mode(self, *args): - with patch.object(self.module, 'update_ssh_key_pair') as update_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'public_key': 'public', - 'private_key': 'PRIVATE', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(update_ssh_key_pair_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value={ - 'public_key': 'unknown', - 'type': 'pipeline_ssh_key_pair', - }) - def test_update_keys(self, *args): - with patch.object(self.module, 'update_ssh_key_pair') as update_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'public_key': 'public', - 'private_key': 'PRIVATE', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_ssh_key_pair_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value={ - 'public_key': 'public', - 'type': 'pipeline_ssh_key_pair', - }) - def test_dont_update_same_key(self, *args): - with patch.object(self.module, 'update_ssh_key_pair') as update_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'public_key': 'public', - 'private_key': 'PRIVATE', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_ssh_key_pair_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value={ - 'public_key': 'unknown', - 'type': 'pipeline_ssh_key_pair', - }) - def test_update_keys_check_mode(self, *args): - with patch.object(self.module, 'update_ssh_key_pair') as update_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'public_key': 'public', - 'private_key': 'PRIVATE', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(update_ssh_key_pair_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value={ - 'public_key': 'public', - 'type': 'pipeline_ssh_key_pair', - }) - def test_delete_keys(self, *args): - with patch.object(self.module, 'delete_ssh_key_pair') as delete_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_ssh_key_pair_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value=None) - def test_delete_absent_keys(self, *args): - with patch.object(self.module, 'delete_ssh_key_pair') as delete_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_ssh_key_pair_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_key_pair, 'get_existing_ssh_key_pair', return_value={ - 'public_key': 'public', - 'type': 'pipeline_ssh_key_pair', - }) - def test_delete_keys_check_mode(self, *args): - with patch.object(self.module, 'delete_ssh_key_pair') as delete_ssh_key_pair_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'state': 'absent', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(delete_ssh_key_pair_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - -if __name__ == '__main__': - unittest.main() diff --git a/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_known_host.py b/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_known_host.py deleted file mode 100644 index 99bd663957..0000000000 --- a/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_known_host.py +++ /dev/null @@ -1,187 +0,0 @@ -import pytest - -from ansible.module_utils.source_control.bitbucket import BitbucketHelper -from ansible.modules.source_control.bitbucket import bitbucket_pipeline_known_host -from ansible.modules.source_control.bitbucket.bitbucket_pipeline_known_host import HAS_PARAMIKO -from units.compat import unittest -from units.compat.mock import patch -from units.modules.utils import AnsibleExitJson, ModuleTestCase, set_module_args - - -class TestBucketPipelineKnownHostModule(ModuleTestCase): - def setUp(self): - super(TestBucketPipelineKnownHostModule, self).setUp() - self.module = bitbucket_pipeline_known_host - - @pytest.mark.skipif(not HAS_PARAMIKO, reason='paramiko must be installed to test key creation') - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value=None) - def test_create_known_host(self, *args): - with patch.object(self.module, 'create_known_host') as create_known_host_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(create_known_host_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(BitbucketHelper, 'request', return_value=(dict(status=201), dict())) - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value=None) - def test_create_known_host_with_key(self, *args): - with patch.object(self.module, 'get_host_key') as get_host_key_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'key': 'ssh-rsa public', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(get_host_key_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @pytest.mark.skipif(not HAS_PARAMIKO, reason='paramiko must be installed to test key creation') - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value={ - 'type': 'pipeline_known_host', - 'uuid': '{21cc0590-bebe-4fae-8baf-03722704119a7}', - 'hostname': 'bitbucket.org', - 'public_key': { - 'type': 'pipeline_ssh_public_key', - 'md5_fingerprint': 'md5:97:8c:1b:f2:6f:14:6b:4b:3b:ec:aa:46:46:74:7c:40', - 'sha256_fingerprint': 'SHA256:zzXQOXSFBEiUtuE8AikoYKwbHaxvSc0ojez9YXaGp1A', - 'key_type': 'ssh-rsa', - 'key': 'AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kN...seeFVBoGqzHM9yXw==' - } - }) - def test_dont_create_same_value(self, *args): - with patch.object(self.module, 'create_known_host') as create_known_host_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(create_known_host_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @pytest.mark.skipif(not HAS_PARAMIKO, reason='paramiko must be installed to test key creation') - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value=None) - def test_create_known_host_check_mode(self, *args): - with patch.object(self.module, 'create_known_host') as create_known_host_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(create_known_host_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @pytest.mark.skipif(not HAS_PARAMIKO, reason='paramiko must be installed to test key creation') - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value={ - 'type': 'pipeline_known_host', - 'uuid': '{21cc0590-bebe-4fae-8baf-03722704119a7}', - 'hostname': 'bitbucket.org', - 'public_key': { - 'type': 'pipeline_ssh_public_key', - 'md5_fingerprint': 'md5:97:8c:1b:f2:6f:14:6b:4b:3b:ec:aa:46:46:74:7c:40', - 'sha256_fingerprint': 'SHA256:zzXQOXSFBEiUtuE8AikoYKwbHaxvSc0ojez9YXaGp1A', - 'key_type': 'ssh-rsa', - 'key': 'AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kN...seeFVBoGqzHM9yXw==' - } - }) - def test_delete_known_host(self, *args): - with patch.object(self.module, 'delete_known_host') as delete_known_host_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_known_host_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @pytest.mark.skipif(not HAS_PARAMIKO, reason='paramiko must be installed to test key creation') - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value=None) - def test_delete_absent_known_host(self, *args): - with patch.object(self.module, 'delete_known_host') as delete_known_host_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_known_host_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @pytest.mark.skipif(not HAS_PARAMIKO, reason='paramiko must be installed to test key creation') - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_known_host, 'get_existing_known_host', return_value={ - 'type': 'pipeline_known_host', - 'uuid': '{21cc0590-bebe-4fae-8baf-03722704119a7}', - 'hostname': 'bitbucket.org', - 'public_key': { - 'type': 'pipeline_ssh_public_key', - 'md5_fingerprint': 'md5:97:8c:1b:f2:6f:14:6b:4b:3b:ec:aa:46:46:74:7c:40', - 'sha256_fingerprint': 'SHA256:zzXQOXSFBEiUtuE8AikoYKwbHaxvSc0ojez9YXaGp1A', - 'key_type': 'ssh-rsa', - 'key': 'AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kN...seeFVBoGqzHM9yXw==' - } - }) - def test_delete_known_host_check_mode(self, *args): - with patch.object(self.module, 'delete_known_host') as delete_known_host_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'bitbucket.org', - 'state': 'absent', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(delete_known_host_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - -if __name__ == '__main__': - unittest.main() diff --git a/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_variable.py b/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_variable.py deleted file mode 100644 index 0cb87d0c5e..0000000000 --- a/test/units/modules/source_control/bitbucket/test_bitbucket_pipeline_variable.py +++ /dev/null @@ -1,290 +0,0 @@ -from ansible.module_utils.source_control.bitbucket import BitbucketHelper -from ansible.modules.source_control.bitbucket import bitbucket_pipeline_variable -from units.compat import unittest -from units.compat.mock import patch -from units.modules.utils import AnsibleFailJson, AnsibleExitJson, ModuleTestCase, set_module_args - - -class TestBucketPipelineVariableModule(ModuleTestCase): - def setUp(self): - super(TestBucketPipelineVariableModule, self).setUp() - self.module = bitbucket_pipeline_variable - - def test_without_required_parameters(self): - with self.assertRaises(AnsibleFailJson) as exec_info: - set_module_args({ - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(exec_info.exception.args[0]['msg'], BitbucketHelper.error_messages['required_client_id']) - - def test_missing_value_with_present_state(self): - with self.assertRaises(AnsibleFailJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(exec_info.exception.args[0]['msg'], self.module.error_messages['required_value']) - - @patch.dict('os.environ', { - 'BITBUCKET_CLIENT_ID': 'ABC', - 'BITBUCKET_CLIENT_SECRET': 'XXX', - }) - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value=None) - def test_env_vars_params(self, *args): - with self.assertRaises(AnsibleExitJson): - set_module_args({ - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'state': 'absent', - }) - self.module.main() - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value=None) - def test_create_variable(self, *args): - with patch.object(self.module, 'create_pipeline_variable') as create_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(create_pipeline_variable_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value=None) - def test_create_variable_check_mode(self, *args): - with patch.object(self.module, 'create_pipeline_variable') as create_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(create_pipeline_variable_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'value': 'Im alive', - 'type': 'pipeline_variable', - 'secured': False, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_update_variable(self, *args): - with patch.object(self.module, 'update_pipeline_variable') as update_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_pipeline_variable_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'type': 'pipeline_variable', - 'secured': True, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_update_secured_variable(self, *args): - with patch.object(self.module, 'update_pipeline_variable') as update_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'secured': True, - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_pipeline_variable_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'type': 'pipeline_variable', - 'secured': False, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_update_secured_state(self, *args): - with patch.object(self.module, 'update_pipeline_variable') as update_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'secured': True, - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_pipeline_variable_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'type': 'pipeline_variable', - 'secured': False, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_dont_update_same_value(self, *args): - with patch.object(self.module, 'update_pipeline_variable') as update_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'state': 'present', - }) - self.module.main() - - self.assertEqual(update_pipeline_variable_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'value': 'Im alive', - 'type': 'pipeline_variable', - 'secured': False, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_update_variable_check_mode(self, *args): - with patch.object(self.module, 'update_pipeline_variable') as update_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'value': '42', - 'state': 'present', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(update_pipeline_variable_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'value': 'Im alive', - 'type': 'pipeline_variable', - 'secured': False, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_delete_variable(self, *args): - with patch.object(self.module, 'delete_pipeline_variable') as delete_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_pipeline_variable_mock.call_count, 1) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value=None) - def test_delete_absent_variable(self, *args): - with patch.object(self.module, 'delete_pipeline_variable') as delete_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'state': 'absent', - }) - self.module.main() - - self.assertEqual(delete_pipeline_variable_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], False) - - @patch.object(BitbucketHelper, 'fetch_access_token', return_value='token') - @patch.object(bitbucket_pipeline_variable, 'get_existing_pipeline_variable', return_value={ - 'name': 'PIPELINE_VAR_NAME', - 'value': 'Im alive', - 'type': 'pipeline_variable', - 'secured': False, - 'uuid': '{9ddb0507-439a-495a- 99f3 - 564f15138127}' - }) - def test_delete_variable_check_mode(self, *args): - with patch.object(self.module, 'delete_pipeline_variable') as delete_pipeline_variable_mock: - with self.assertRaises(AnsibleExitJson) as exec_info: - set_module_args({ - 'client_id': 'ABC', - 'client_secret': 'XXX', - 'username': 'name', - 'repository': 'repo', - 'name': 'PIPELINE_VAR_NAME', - 'state': 'absent', - '_ansible_check_mode': True, - }) - self.module.main() - - self.assertEqual(delete_pipeline_variable_mock.call_count, 0) - self.assertEqual(exec_info.exception.args[0]['changed'], True) - - -if __name__ == '__main__': - unittest.main() diff --git a/test/units/modules/source_control/gitlab/gitlab.py b/test/units/modules/source_control/gitlab/gitlab.py deleted file mode 100644 index aacada058e..0000000000 --- a/test/units/modules/source_control/gitlab/gitlab.py +++ /dev/null @@ -1,580 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import - -import sys - -from httmock import response # noqa -from httmock import urlmatch # noqa - -from units.compat import unittest - -from gitlab import Gitlab - - -class FakeAnsibleModule(object): - def __init__(self): - self.check_mode = False - - def fail_json(self, **args): - pass - - def exit_json(self, **args): - pass - - -class GitlabModuleTestCase(unittest.TestCase): - def setUp(self): - unitest_python_version_check_requirement(self) - - self.mock_module = FakeAnsibleModule() - - self.gitlab_instance = Gitlab("http://localhost", private_token="private_token", api_version=4) - - -# Python 2.7+ is needed for python-gitlab -GITLAB_MINIMUM_PYTHON_VERSION = (2, 7) - - -# Verify if the current Python version is higher than GITLAB_MINIMUM_PYTHON_VERSION -def python_version_match_requirement(): - return sys.version_info >= GITLAB_MINIMUM_PYTHON_VERSION - - -# Skip unittest test case if python version don't match requirement -def unitest_python_version_check_requirement(unittest_testcase): - if not python_version_match_requirement(): - unittest_testcase.skipTest("Python %s+ is needed for python-gitlab" % ",".join(map(str, GITLAB_MINIMUM_PYTHON_VERSION))) - - -''' -USER API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users", method="get") -def resp_find_user(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1, "username": "john_smith", "name": "John Smith", "state": "active",' - '"avatar_url": "http://localhost:3000/uploads/user/avatar/1/cd8.jpeg",' - '"web_url": "http://localhost:3000/john_smith"}, {"id": 2,' - '"username": "jack_smith", "name": "Jack Smith", "state": "blocked",' - '"avatar_url": "http://gravatar.com/../e32131cd8.jpeg",' - '"web_url": "http://localhost:3000/jack_smith"}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users", method="post") -def resp_create_user(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "username": "john_smith", "name": "John Smith", "state": "active",' - '"avatar_url": "http://localhost:3000/uploads/user/avatar/1/cd8.jpeg",' - '"web_url": "http://localhost:3000/john_smith","created_at": "2012-05-23T08:00:58Z",' - '"bio": null, "location": null, "public_email": "john@example.com", "skype": "",' - '"linkedin": "", "twitter": "", "website_url": "", "organization": ""}') - content = content.encode("utf-8") - return response(201, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1", method="get") -def resp_get_user(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "username": "john_smith", "name": "John Smith",' - '"state": "active",' - '"avatar_url": "http://localhost:3000/uploads/user/avatar/1/cd8.jpeg",' - '"web_url": "http://localhost:3000/john_smith",' - '"created_at": "2012-05-23T08:00:58Z", "bio": null, "location": null,' - '"public_email": "john@example.com", "skype": "", "linkedin": "",' - '"twitter": "", "website_url": "", "organization": "", "is_admin": false}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1", method="get") -def resp_get_missing_user(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(404, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1", method="delete") -def resp_delete_user(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(204, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1", method="delete") -def resp_delete_missing_user(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(404, content, headers, None, 5, request) - - -''' -USER SSHKEY API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1/keys", method="get") -def resp_get_user_keys(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1, "title": "Public key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596' - 'k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQa' - 'SeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",' - '"created_at": "2014-08-01T14:47:39.080Z"},{"id": 3,' - '"title": "Another Public key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596' - 'k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaS' - 'eP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",' - '"created_at": "2014-08-01T14:47:39.080Z"}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1/keys", method="post") -def resp_create_user_keys(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "title": "Private key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDA1YotVDm2mAyk2tPt4E7AHm01sS6JZmcUdRuSuA5z' - 'szUJzYPPUSRAX3BCgTqLqYx//UuVncK7YqLVSbbwjKR2Ez5lISgCnVfLVEXzwhv+xawxKWmI7hJ5S0tOv6MJ+Ixy' - 'Ta4xcKwJTwB86z22n9fVOQeJTR2dSOH1WJrf0PvRk+KVNY2jTiGHTi9AIjLnyD/jWRpOgtdfkLRc8EzAWrWlgNmH' - '2WOKBw6za0az6XoG75obUdFVdW3qcD0xc809OHLi7FDf+E7U4wiZJCFuUizMeXyuK/SkaE1aee4Qp5R4dxTR4TP9' - 'M1XAYkf+kF0W9srZ+mhF069XD/zhUPJsvwEF",' - '"created_at": "2014-08-01T14:47:39.080Z"}') - content = content.encode("utf-8") - return response(201, content, headers, None, 5, request) - - -''' -GROUP API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups", method="get") -def resp_find_group(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1, "name": "Foobar Group", "path": "foo-bar",' - '"description": "An interesting group", "visibility": "public",' - '"lfs_enabled": true, "avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",' - '"web_url": "http://localhost:3000/groups/foo-bar", "request_access_enabled": false,' - '"full_name": "Foobar Group", "full_path": "foo-bar",' - '"file_template_project_id": 1, "parent_id": null, "projects": []}, {"id": 2, "name": "BarFoo Group", "path": "bar-foor",' - '"description": "An interesting group", "visibility": "public",' - '"lfs_enabled": true, "avatar_url": "http://localhost:3000/uploads/group/avatar/2/bar.jpg",' - '"web_url": "http://localhost:3000/groups/bar-foo", "request_access_enabled": false,' - '"full_name": "BarFoo Group", "full_path": "bar-foo",' - '"file_template_project_id": 1, "parent_id": null, "projects": []}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1", method="get") -def resp_get_group(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "name": "Foobar Group", "path": "foo-bar",' - '"description": "An interesting group", "visibility": "public",' - '"lfs_enabled": true, "avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",' - '"web_url": "http://localhost:3000/groups/foo-bar", "request_access_enabled": false,' - '"full_name": "Foobar Group", "full_path": "foo-bar",' - '"file_template_project_id": 1, "parent_id": null, "projects": [{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}]}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1", method="get") -def resp_get_missing_group(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(404, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups", method="post") -def resp_create_group(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "name": "Foobar Group", "path": "foo-bar",' - '"description": "An interesting group", "visibility": "public",' - '"lfs_enabled": true, "avatar_url": "http://localhost:3000/uploads/group/avatar/1/foo.jpg",' - '"web_url": "http://localhost:3000/groups/foo-bar", "request_access_enabled": false,' - '"full_name": "Foobar Group", "full_path": "foo-bar",' - '"file_template_project_id": 1, "parent_id": null}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups", method="post") -def resp_create_subgroup(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 2, "name": "BarFoo Group", "path": "bar-foor",' - '"description": "An interesting group", "visibility": "public",' - '"lfs_enabled": true, "avatar_url": "http://localhost:3000/uploads/group/avatar/2/bar.jpg",' - '"web_url": "http://localhost:3000/groups/foo-bar/bar-foo", "request_access_enabled": false,' - '"full_name": "BarFoo Group", "full_path": "foo-bar/bar-foo",' - '"file_template_project_id": 1, "parent_id": 1}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/users/1", method="delete") -def resp_delete_group(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(204, content, headers, None, 5, request) - - -''' -GROUP MEMBER API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1/members/1", method="get") -def resp_get_member(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "username": "raymond_smith", "name": "Raymond Smith", "state": "active",' - '"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",' - '"web_url": "http://192.168.1.8:3000/root", "expires_at": "2012-10-22T14:13:35Z", "access_level": 30}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1/members", method="get") -def resp_find_member(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1, "username": "raymond_smith", "name": "Raymond Smith", "state": "active",' - '"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",' - '"web_url": "http://192.168.1.8:3000/root", "expires_at": "2012-10-22T14:13:35Z", "access_level": 30},{' - '"id": 2, "username": "john_doe", "name": "John Doe","state": "active",' - '"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",' - '"web_url": "http://192.168.1.8:3000/root","expires_at": "2012-10-22T14:13:35Z",' - '"access_level": 30}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1/members", method="post") -def resp_add_member(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "username": "raymond_smith", "name": "Raymond Smith",' - '"state": "active",' - '"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",' - '"web_url": "http://192.168.1.8:3000/root", "expires_at": "2012-10-22T14:13:35Z",' - '"access_level": 30}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1/members/1", method="put") -def resp_update_member(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1, "username": "raymond_smith", "name": "Raymond Smith",' - '"state": "active",' - '"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",' - '"web_url": "http://192.168.1.8:3000/root", "expires_at": "2012-10-22T14:13:35Z",' - '"access_level": 10}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -''' -DEPLOY KEY API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/deploy_keys", method="get") -def resp_find_project_deploy_key(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1,"title": "Public key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxc' - 'KDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",' - '"created_at": "2013-10-02T10:12:29Z"},{"id": 3,"title": "Another Public key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxc' - 'KDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",' - '"created_at": "2013-10-02T11:12:29Z"}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/deploy_keys/1", method="get") -def resp_get_project_deploy_key(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"title": "Public key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxc' - 'KDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",' - '"created_at": "2013-10-02T10:12:29Z"}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/deploy_keys", method="post") -def resp_create_project_deploy_key(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"title": "Public key",' - '"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxc' - 'KDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=",' - '"created_at": "2013-10-02T10:12:29Z"}') - content = content.encode("utf-8") - return response(201, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/deploy_keys/1", method="delete") -def resp_delete_project_deploy_key(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(204, content, headers, None, 5, request) - - -''' -PROJECT API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="get") -def resp_find_project(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1", method="get") -def resp_get_project(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/foo-bar%2Fdiaspora-client", method="get") -def resp_get_project_by_name(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1/projects", method="get") -def resp_find_group_project(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1/projects/1", method="get") -def resp_get_group_project(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects", method="post") -def resp_create_project(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"description": null, "default_branch": "master",' - '"ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",' - '"http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",' - '"web_url": "http://example.com/diaspora/diaspora-client",' - '"readme_url": "http://example.com/diaspora/diaspora-client/blob/master/README.md",' - '"tag_list": ["example","disapora client"],"name": "Diaspora Client",' - '"name_with_namespace": "Diaspora / Diaspora Client","path": "diaspora-client",' - '"path_with_namespace": "diaspora/diaspora-client","created_at": "2013-09-30T13:46:02Z",' - '"last_activity_at": "2013-09-30T13:46:02Z","forks_count": 0,' - '"avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png",' - '"star_count": 0}') - content = content.encode("utf-8") - return response(201, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1", method="delete") -def resp_delete_project(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - - return response(204, content, headers, None, 5, request) - - -''' -HOOK API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/hooks", method="get") -def resp_find_project_hook(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"id": 1,"url": "http://example.com/hook","project_id": 3,' - '"push_events": true,"push_events_branch_filter": "","issues_events": true,' - '"confidential_issues_events": true,"merge_requests_events": true,' - '"tag_push_events": true,"note_events": true,"job_events": true,' - '"pipeline_events": true,"wiki_page_events": true,"enable_ssl_verification": true,' - '"created_at": "2012-10-12T17:04:47Z"}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/hooks/1", method="get") -def resp_get_project_hook(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"url": "http://example.com/hook","project_id": 3,' - '"push_events": true,"push_events_branch_filter": "","issues_events": true,' - '"confidential_issues_events": true,"merge_requests_events": true,' - '"tag_push_events": true,"note_events": true,"job_events": true,' - '"pipeline_events": true,"wiki_page_events": true,"enable_ssl_verification": true,' - '"created_at": "2012-10-12T17:04:47Z"}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/hooks", method="post") -def resp_create_project_hook(url, request): - headers = {'content-type': 'application/json'} - content = ('{"id": 1,"url": "http://example.com/hook","project_id": 3,' - '"push_events": true,"push_events_branch_filter": "","issues_events": true,' - '"confidential_issues_events": true,"merge_requests_events": true,' - '"tag_push_events": true,"note_events": true,"job_events": true,' - '"pipeline_events": true,"wiki_page_events": true,"enable_ssl_verification": true,' - '"created_at": "2012-10-12T17:04:47Z"}') - content = content.encode("utf-8") - return response(201, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/projects/1/hooks/1", method="delete") -def resp_delete_project_hook(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(204, content, headers, None, 5, request) - - -''' -RUNNER API -''' - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/runners/all", method="get") -def resp_find_runners_all(url, request): - headers = {'content-type': 'application/json'} - content = ('[{"active": true,"description": "test-1-20150125","id": 1,' - '"is_shared": false,"ip_address": "127.0.0.1","name": null,' - '"online": true,"status": "online"},{"active": true,' - '"description": "test-2-20150125","id": 2,"ip_address": "127.0.0.1",' - '"is_shared": false,"name": null,"online": false,"status": "offline"}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/runners", method="get") -def resp_find_runners_list(url, request): - headers = {'content-type': 'application/json', - "X-Page": 1, - "X-Next-Page": 2, - "X-Per-Page": 1, - "X-Total-Pages": 1, - "X-Total": 2} - content = ('[{"active": true,"description": "test-1-20150125","id": 1,' - '"is_shared": false,"ip_address": "127.0.0.1","name": null,' - '"online": true,"status": "online"},{"active": true,' - '"description": "test-2-20150125","id": 2,"ip_address": "127.0.0.1",' - '"is_shared": false,"name": null,"online": false,"status": "offline"}]') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/runners/1", method="get") -def resp_get_runner(url, request): - headers = {'content-type': 'application/json'} - content = ('{"active": true,"description": "test-1-20150125","id": 1,' - '"is_shared": false,"ip_address": "127.0.0.1","name": null,' - '"online": true,"status": "online"}') - content = content.encode("utf-8") - return response(200, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/runners", method="post") -def resp_create_runner(url, request): - headers = {'content-type': 'application/json'} - content = ('{"active": true,"description": "test-1-20150125","id": 1,' - '"is_shared": false,"ip_address": "127.0.0.1","name": null,' - '"online": true,"status": "online"}') - content = content.encode("utf-8") - return response(201, content, headers, None, 5, request) - - -@urlmatch(scheme="http", netloc="localhost", path="/api/v4/runners/1", method="delete") -def resp_delete_runner(url, request): - headers = {'content-type': 'application/json'} - content = ('{}') - content = content.encode("utf-8") - return response(204, content, headers, None, 5, request) diff --git a/test/units/modules/source_control/gitlab/test_gitlab_deploy_key.py b/test/units/modules/source_control/gitlab/test_gitlab_deploy_key.py deleted file mode 100644 index 24578524a3..0000000000 --- a/test/units/modules/source_control/gitlab/test_gitlab_deploy_key.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import - -import pytest - -from ansible.modules.source_control.gitlab.gitlab_deploy_key import GitLabDeployKey - - -def _dummy(x): - """Dummy function. Only used as a placeholder for toplevel definitions when the test is going - to be skipped anyway""" - return x - - -pytestmark = [] -try: - from .gitlab import (GitlabModuleTestCase, - python_version_match_requirement, - resp_get_project, resp_find_project_deploy_key, - resp_create_project_deploy_key, resp_delete_project_deploy_key) - - # GitLab module requirements - if python_version_match_requirement(): - from gitlab.v4.objects import ProjectKey -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load gitlab module required for testing")) - # Need to set these to something so that we don't fail when parsing - GitlabModuleTestCase = object - resp_get_project = _dummy - resp_find_project_deploy_key = _dummy - resp_create_project_deploy_key = _dummy - resp_delete_project_deploy_key = _dummy - -# Unit tests requirements -try: - from httmock import with_httmock # noqa -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load httmock module required for testing")) - with_httmock = _dummy - - -class TestGitlabDeployKey(GitlabModuleTestCase): - def setUp(self): - super(TestGitlabDeployKey, self).setUp() - - self.moduleUtil = GitLabDeployKey(module=self.mock_module, gitlab_instance=self.gitlab_instance) - - @with_httmock(resp_get_project) - @with_httmock(resp_find_project_deploy_key) - def test_deploy_key_exist(self): - project = self.gitlab_instance.projects.get(1) - - rvalue = self.moduleUtil.existsDeployKey(project, "Public key") - - self.assertEqual(rvalue, True) - - rvalue = self.moduleUtil.existsDeployKey(project, "Private key") - - self.assertEqual(rvalue, False) - - @with_httmock(resp_get_project) - @with_httmock(resp_create_project_deploy_key) - def test_create_deploy_key(self): - project = self.gitlab_instance.projects.get(1) - - deploy_key = self.moduleUtil.createDeployKey(project, {"title": "Public key", - "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM" - "4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxc" - "KDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfD" - "zpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="}) - - self.assertEqual(type(deploy_key), ProjectKey) - self.assertEqual(deploy_key.title, "Public key") - - @with_httmock(resp_get_project) - @with_httmock(resp_find_project_deploy_key) - @with_httmock(resp_create_project_deploy_key) - def test_update_deploy_key(self): - project = self.gitlab_instance.projects.get(1) - deployKey = self.moduleUtil.findDeployKey(project, "Public key") - - changed, newDeploy_key = self.moduleUtil.updateDeployKey(deployKey, {"title": "Private key"}) - - self.assertEqual(changed, True) - self.assertEqual(type(newDeploy_key), ProjectKey) - self.assertEqual(newDeploy_key.title, "Private key") - - changed, newDeploy_key = self.moduleUtil.updateDeployKey(deployKey, {"title": "Private key"}) - - self.assertEqual(changed, False) - self.assertEqual(newDeploy_key.title, "Private key") - - @with_httmock(resp_get_project) - @with_httmock(resp_find_project_deploy_key) - @with_httmock(resp_delete_project_deploy_key) - def test_delete_deploy_key(self): - project = self.gitlab_instance.projects.get(1) - - self.moduleUtil.existsDeployKey(project, "Public key") - - rvalue = self.moduleUtil.deleteDeployKey() - - self.assertEqual(rvalue, None) diff --git a/test/units/modules/source_control/gitlab/test_gitlab_group.py b/test/units/modules/source_control/gitlab/test_gitlab_group.py deleted file mode 100644 index e43e92f162..0000000000 --- a/test/units/modules/source_control/gitlab/test_gitlab_group.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import - -import pytest - -from ansible.modules.source_control.gitlab.gitlab_group import GitLabGroup - - -def _dummy(x): - """Dummy function. Only used as a placeholder for toplevel definitions when the test is going - to be skipped anyway""" - return x - - -pytestmark = [] -try: - from .gitlab import (GitlabModuleTestCase, - python_version_match_requirement, - resp_get_group, resp_get_missing_group, resp_create_group, - resp_create_subgroup, resp_delete_group, resp_find_group_project) - - # GitLab module requirements - if python_version_match_requirement(): - from gitlab.v4.objects import Group -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load gitlab module required for testing")) - # Need to set these to something so that we don't fail when parsing - GitlabModuleTestCase = object - resp_get_group = _dummy - resp_get_missing_group = _dummy - resp_create_group = _dummy - resp_create_subgroup = _dummy - resp_delete_group = _dummy - resp_find_group_project = _dummy - -# Unit tests requirements -try: - from httmock import with_httmock # noqa -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load httmock module required for testing")) - with_httmock = _dummy - - -class TestGitlabGroup(GitlabModuleTestCase): - def setUp(self): - super(TestGitlabGroup, self).setUp() - - self.moduleUtil = GitLabGroup(module=self.mock_module, gitlab_instance=self.gitlab_instance) - - @with_httmock(resp_get_group) - def test_exist_group(self): - rvalue = self.moduleUtil.existsGroup(1) - - self.assertEqual(rvalue, True) - - @with_httmock(resp_get_missing_group) - def test_exist_group(self): - rvalue = self.moduleUtil.existsGroup(1) - - self.assertEqual(rvalue, False) - - @with_httmock(resp_create_group) - def test_create_group(self): - group = self.moduleUtil.createGroup({'name': "Foobar Group", 'path': "foo-bar"}) - - self.assertEqual(type(group), Group) - self.assertEqual(group.name, "Foobar Group") - self.assertEqual(group.path, "foo-bar") - self.assertEqual(group.id, 1) - - @with_httmock(resp_create_subgroup) - def test_create_subgroup(self): - group = self.moduleUtil.createGroup({'name': "BarFoo Group", 'path': "bar-foo", "parent_id": 1}) - - self.assertEqual(type(group), Group) - self.assertEqual(group.name, "BarFoo Group") - self.assertEqual(group.full_path, "foo-bar/bar-foo") - self.assertEqual(group.id, 2) - self.assertEqual(group.parent_id, 1) - - @with_httmock(resp_get_group) - def test_update_group(self): - group = self.gitlab_instance.groups.get(1) - changed, newGroup = self.moduleUtil.updateGroup(group, {'name': "BarFoo Group", "visibility": "private"}) - - self.assertEqual(changed, True) - self.assertEqual(newGroup.name, "BarFoo Group") - self.assertEqual(newGroup.visibility, "private") - - changed, newGroup = self.moduleUtil.updateGroup(group, {'name': "BarFoo Group"}) - - self.assertEqual(changed, False) - - @with_httmock(resp_get_group) - @with_httmock(resp_find_group_project) - @with_httmock(resp_delete_group) - def test_delete_group(self): - self.moduleUtil.existsGroup(1) - - print(self.moduleUtil.groupObject.projects) - - rvalue = self.moduleUtil.deleteGroup() - - self.assertEqual(rvalue, None) diff --git a/test/units/modules/source_control/gitlab/test_gitlab_hook.py b/test/units/modules/source_control/gitlab/test_gitlab_hook.py deleted file mode 100644 index 29401ee53c..0000000000 --- a/test/units/modules/source_control/gitlab/test_gitlab_hook.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import -import pytest - -from ansible.modules.source_control.gitlab.gitlab_hook import GitLabHook - - -def _dummy(x): - """Dummy function. Only used as a placeholder for toplevel definitions when the test is going - to be skipped anyway""" - return x - - -pytestmark = [] -try: - from .gitlab import (GitlabModuleTestCase, - python_version_match_requirement, - resp_get_project, resp_find_project_hook, - resp_create_project_hook, resp_delete_project_hook) - - # GitLab module requirements - if python_version_match_requirement(): - from gitlab.v4.objects import ProjectHook -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load gitlab module required for testing")) - # Need to set these to something so that we don't fail when parsing - GitlabModuleTestCase = object - resp_get_project = _dummy - resp_find_project_hook = _dummy - resp_create_project_hook = _dummy - resp_delete_project_hook = _dummy - -# Unit tests requirements -try: - from httmock import with_httmock # noqa -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load httmock module required for testing")) - with_httmock = _dummy - - -class TestGitlabHook(GitlabModuleTestCase): - def setUp(self): - super(TestGitlabHook, self).setUp() - - self.moduleUtil = GitLabHook(module=self.mock_module, gitlab_instance=self.gitlab_instance) - - @with_httmock(resp_get_project) - @with_httmock(resp_find_project_hook) - def test_hook_exist(self): - project = self.gitlab_instance.projects.get(1) - - rvalue = self.moduleUtil.existsHook(project, "http://example.com/hook") - - self.assertEqual(rvalue, True) - - rvalue = self.moduleUtil.existsHook(project, "http://gitlab.com/hook") - - self.assertEqual(rvalue, False) - - @with_httmock(resp_get_project) - @with_httmock(resp_create_project_hook) - def test_create_hook(self): - project = self.gitlab_instance.projects.get(1) - - hook = self.moduleUtil.createHook(project, {"url": "http://example.com/hook"}) - - self.assertEqual(type(hook), ProjectHook) - self.assertEqual(hook.url, "http://example.com/hook") - - @with_httmock(resp_get_project) - @with_httmock(resp_find_project_hook) - def test_update_hook(self): - project = self.gitlab_instance.projects.get(1) - hook = self.moduleUtil.findHook(project, "http://example.com/hook") - - changed, newHook = self.moduleUtil.updateHook(hook, {"url": "http://gitlab.com/hook"}) - - self.assertEqual(changed, True) - self.assertEqual(type(newHook), ProjectHook) - self.assertEqual(newHook.url, "http://gitlab.com/hook") - - changed, newHook = self.moduleUtil.updateHook(hook, {"url": "http://gitlab.com/hook"}) - - self.assertEqual(changed, False) - self.assertEqual(newHook.url, "http://gitlab.com/hook") - - @with_httmock(resp_get_project) - @with_httmock(resp_find_project_hook) - @with_httmock(resp_delete_project_hook) - def test_delete_hook(self): - project = self.gitlab_instance.projects.get(1) - - self.moduleUtil.existsHook(project, "http://example.com/hook") - - rvalue = self.moduleUtil.deleteHook() - - self.assertEqual(rvalue, None) diff --git a/test/units/modules/source_control/gitlab/test_gitlab_project.py b/test/units/modules/source_control/gitlab/test_gitlab_project.py deleted file mode 100644 index 31b773f9cb..0000000000 --- a/test/units/modules/source_control/gitlab/test_gitlab_project.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import - -import pytest - -from ansible.modules.source_control.gitlab.gitlab_project import GitLabProject - - -def _dummy(x): - """Dummy function. Only used as a placeholder for toplevel definitions when the test is going - to be skipped anyway""" - return x - - -pytestmark = [] -try: - from .gitlab import (GitlabModuleTestCase, - python_version_match_requirement, - resp_get_group, resp_get_project_by_name, resp_create_project, - resp_get_project, resp_delete_project, resp_get_user) - - # GitLab module requirements - if python_version_match_requirement(): - from gitlab.v4.objects import Project -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load gitlab module required for testing")) - # Need to set these to something so that we don't fail when parsing - GitlabModuleTestCase = object - resp_get_group = _dummy - resp_get_project_by_name = _dummy - resp_create_project = _dummy - resp_get_project = _dummy - resp_delete_project = _dummy - resp_get_user = _dummy - -# Unit tests requirements -try: - from httmock import with_httmock # noqa -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load httmock module required for testing")) - with_httmock = _dummy - - -class TestGitlabProject(GitlabModuleTestCase): - @with_httmock(resp_get_user) - def setUp(self): - super(TestGitlabProject, self).setUp() - - self.gitlab_instance.user = self.gitlab_instance.users.get(1) - self.moduleUtil = GitLabProject(module=self.mock_module, gitlab_instance=self.gitlab_instance) - - @with_httmock(resp_get_group) - @with_httmock(resp_get_project_by_name) - def test_project_exist(self): - group = self.gitlab_instance.groups.get(1) - - rvalue = self.moduleUtil.existsProject(group, "diaspora-client") - - self.assertEqual(rvalue, True) - - rvalue = self.moduleUtil.existsProject(group, "missing-project") - - self.assertEqual(rvalue, False) - - @with_httmock(resp_get_group) - @with_httmock(resp_create_project) - def test_create_project(self): - group = self.gitlab_instance.groups.get(1) - project = self.moduleUtil.createProject(group, {"name": "Diaspora Client", "path": "diaspora-client", "namespace_id": group.id}) - - self.assertEqual(type(project), Project) - self.assertEqual(project.name, "Diaspora Client") - - @with_httmock(resp_get_project) - def test_update_project(self): - project = self.gitlab_instance.projects.get(1) - - changed, newProject = self.moduleUtil.updateProject(project, {"name": "New Name"}) - - self.assertEqual(changed, True) - self.assertEqual(type(newProject), Project) - self.assertEqual(newProject.name, "New Name") - - changed, newProject = self.moduleUtil.updateProject(project, {"name": "New Name"}) - - self.assertEqual(changed, False) - self.assertEqual(newProject.name, "New Name") - - @with_httmock(resp_get_group) - @with_httmock(resp_get_project_by_name) - @with_httmock(resp_delete_project) - def test_delete_project(self): - group = self.gitlab_instance.groups.get(1) - - self.moduleUtil.existsProject(group, "diaspora-client") - - rvalue = self.moduleUtil.deleteProject() - - self.assertEqual(rvalue, None) diff --git a/test/units/modules/source_control/gitlab/test_gitlab_runner.py b/test/units/modules/source_control/gitlab/test_gitlab_runner.py deleted file mode 100644 index 57f3f2411f..0000000000 --- a/test/units/modules/source_control/gitlab/test_gitlab_runner.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import - -import pytest - -from ansible.modules.source_control.gitlab.gitlab_runner import GitLabRunner - - -def _dummy(x): - """Dummy function. Only used as a placeholder for toplevel definitions when the test is going - to be skipped anyway""" - return x - - -pytestmark = [] -try: - from .gitlab import (GitlabModuleTestCase, - python_version_match_requirement, - resp_find_runners_list, resp_get_runner, - resp_create_runner, resp_delete_runner) - - # GitLab module requirements - if python_version_match_requirement(): - from gitlab.v4.objects import Runner -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load gitlab module required for testing")) - # Need to set these to something so that we don't fail when parsing - GitlabModuleTestCase = object - resp_find_runners_list = _dummy - resp_get_runner = _dummy - resp_create_runner = _dummy - resp_delete_runner = _dummy - -# Unit tests requirements -try: - from httmock import with_httmock # noqa -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load httmock module required for testing")) - with_httmock = _dummy - - -class TestGitlabRunner(GitlabModuleTestCase): - def setUp(self): - super(TestGitlabRunner, self).setUp() - - self.moduleUtil = GitLabRunner(module=self.mock_module, gitlab_instance=self.gitlab_instance) - - @with_httmock(resp_find_runners_list) - @with_httmock(resp_get_runner) - def test_runner_exist(self): - rvalue = self.moduleUtil.existsRunner("test-1-20150125") - - self.assertEqual(rvalue, True) - - rvalue = self.moduleUtil.existsRunner("test-3-00000000") - - self.assertEqual(rvalue, False) - - @with_httmock(resp_create_runner) - def test_create_runner(self): - runner = self.moduleUtil.createRunner({"token": "token", "description": "test-1-20150125"}) - - self.assertEqual(type(runner), Runner) - self.assertEqual(runner.description, "test-1-20150125") - - @with_httmock(resp_find_runners_list) - @with_httmock(resp_get_runner) - def test_update_runner(self): - runner = self.moduleUtil.findRunner("test-1-20150125") - - changed, newRunner = self.moduleUtil.updateRunner(runner, {"description": "Runner description"}) - - self.assertEqual(changed, True) - self.assertEqual(type(newRunner), Runner) - self.assertEqual(newRunner.description, "Runner description") - - changed, newRunner = self.moduleUtil.updateRunner(runner, {"description": "Runner description"}) - - self.assertEqual(changed, False) - self.assertEqual(newRunner.description, "Runner description") - - @with_httmock(resp_find_runners_list) - @with_httmock(resp_get_runner) - @with_httmock(resp_delete_runner) - def test_delete_runner(self): - self.moduleUtil.existsRunner("test-1-20150125") - - rvalue = self.moduleUtil.deleteRunner() - - self.assertEqual(rvalue, None) diff --git a/test/units/modules/source_control/gitlab/test_gitlab_user.py b/test/units/modules/source_control/gitlab/test_gitlab_user.py deleted file mode 100644 index e7ac926ed8..0000000000 --- a/test/units/modules/source_control/gitlab/test_gitlab_user.py +++ /dev/null @@ -1,163 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright: (c) 2019, Guillaume Martinez (lunik@tiwabbit.fr) -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import - -import pytest - -from ansible.modules.source_control.gitlab.gitlab_user import GitLabUser - - -def _dummy(x): - """Dummy function. Only used as a placeholder for toplevel definitions when the test is going - to be skipped anyway""" - return x - - -pytestmark = [] -try: - from .gitlab import (GitlabModuleTestCase, - python_version_match_requirement, - resp_find_user, resp_get_user, resp_get_user_keys, - resp_create_user_keys, resp_create_user, resp_delete_user, - resp_get_member, resp_get_group, resp_add_member, - resp_update_member, resp_get_member) - - # GitLab module requirements - if python_version_match_requirement(): - from gitlab.v4.objects import User -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load gitlab module required for testing")) - # Need to set these to something so that we don't fail when parsing - GitlabModuleTestCase = object - resp_find_user = _dummy - resp_get_user = _dummy - resp_get_user_keys = _dummy - resp_create_user_keys = _dummy - resp_create_user = _dummy - resp_delete_user = _dummy - resp_get_member = _dummy - resp_get_group = _dummy - resp_add_member = _dummy - resp_update_member = _dummy - resp_get_member = _dummy - -# Unit tests requirements -try: - from httmock import with_httmock # noqa -except ImportError: - pytestmark.append(pytest.mark.skip("Could not load httmock module required for testing")) - with_httmock = _dummy - - -class TestGitlabUser(GitlabModuleTestCase): - def setUp(self): - super(TestGitlabUser, self).setUp() - - self.moduleUtil = GitLabUser(module=self.mock_module, gitlab_instance=self.gitlab_instance) - - @with_httmock(resp_find_user) - def test_exist_user(self): - rvalue = self.moduleUtil.existsUser("john_smith") - - self.assertEqual(rvalue, True) - - rvalue = self.moduleUtil.existsUser("paul_smith") - - self.assertEqual(rvalue, False) - - @with_httmock(resp_find_user) - def test_find_user(self): - user = self.moduleUtil.findUser("john_smith") - - self.assertEqual(type(user), User) - self.assertEqual(user.name, "John Smith") - self.assertEqual(user.id, 1) - - @with_httmock(resp_create_user) - def test_create_user(self): - user = self.moduleUtil.createUser({'email': 'john@example.com', 'password': 's3cur3s3cr3T', - 'username': 'john_smith', 'name': 'John Smith'}) - self.assertEqual(type(user), User) - self.assertEqual(user.name, "John Smith") - self.assertEqual(user.id, 1) - - @with_httmock(resp_get_user) - def test_update_user(self): - user = self.gitlab_instance.users.get(1) - changed, newUser = self.moduleUtil.updateUser(user, {'name': "Jack Smith", "is_admin": "true"}) - - self.assertEqual(changed, True) - self.assertEqual(newUser.name, "Jack Smith") - self.assertEqual(newUser.is_admin, "true") - - changed, newUser = self.moduleUtil.updateUser(user, {'name': "Jack Smith"}) - - self.assertEqual(changed, False) - - @with_httmock(resp_find_user) - @with_httmock(resp_delete_user) - def test_delete_user(self): - self.moduleUtil.existsUser("john_smith") - rvalue = self.moduleUtil.deleteUser() - - self.assertEqual(rvalue, None) - - @with_httmock(resp_get_user) - @with_httmock(resp_get_user_keys) - def test_sshkey_exist(self): - user = self.gitlab_instance.users.get(1) - - exist = self.moduleUtil.sshKeyExists(user, "Public key") - self.assertEqual(exist, True) - - notExist = self.moduleUtil.sshKeyExists(user, "Private key") - self.assertEqual(notExist, False) - - @with_httmock(resp_get_user) - @with_httmock(resp_create_user_keys) - @with_httmock(resp_get_user_keys) - def test_create_sshkey(self): - user = self.gitlab_instance.users.get(1) - - rvalue = self.moduleUtil.addSshKeyToUser(user, { - 'name': "Public key", - 'file': "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJe" - "jgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4" - "soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="}) - self.assertEqual(rvalue, False) - - rvalue = self.moduleUtil.addSshKeyToUser(user, { - 'name': "Private key", - 'file': "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDA1YotVDm2mAyk2tPt4E7AHm01sS6JZmcU" - "dRuSuA5zszUJzYPPUSRAX3BCgTqLqYx//UuVncK7YqLVSbbwjKR2Ez5lISgCnVfLVEXzwhv+" - "xawxKWmI7hJ5S0tOv6MJ+IxyTa4xcKwJTwB86z22n9fVOQeJTR2dSOH1WJrf0PvRk+KVNY2j" - "TiGHTi9AIjLnyD/jWRpOgtdfkLRc8EzAWrWlgNmH2WOKBw6za0az6XoG75obUdFVdW3qcD0x" - "c809OHLi7FDf+E7U4wiZJCFuUizMeXyuK/SkaE1aee4Qp5R4dxTR4TP9M1XAYkf+kF0W9srZ+mhF069XD/zhUPJsvwEF"}) - self.assertEqual(rvalue, True) - - @with_httmock(resp_get_group) - @with_httmock(resp_get_member) - def test_find_member(self): - group = self.gitlab_instance.groups.get(1) - - user = self.moduleUtil.findMember(group, 1) - self.assertEqual(user.username, "raymond_smith") - - @with_httmock(resp_get_user) - @with_httmock(resp_get_group) - @with_httmock(resp_get_group) - @with_httmock(resp_get_member) - @with_httmock(resp_add_member) - @with_httmock(resp_update_member) - def test_assign_user_to_group(self): - group = self.gitlab_instance.groups.get(1) - user = self.gitlab_instance.users.get(1) - - rvalue = self.moduleUtil.assignUserToGroup(user, group.id, "developer") - self.assertEqual(rvalue, False) - - rvalue = self.moduleUtil.assignUserToGroup(user, group.id, "guest") - self.assertEqual(rvalue, True) |