1from __future__ import absolute_import, division, print_function 2__metaclass__ = type 3 4import sys 5 6import pytest 7 8from ansible_collections.sensu.sensu_go.plugins.module_utils import ( 9 errors, utils, 10) 11from ansible_collections.sensu.sensu_go.plugins.modules import cluster_role_binding 12 13from .common.utils import ( 14 AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args, 15) 16 17pytestmark = pytest.mark.skipif( 18 sys.version_info < (2, 7), reason="requires python2.7 or higher" 19) 20 21 22class TestClusterRoleBinding(ModuleTestCase): 23 def test_minimal_cluster_role_binding_parameters_users(self, mocker): 24 sync_mock = mocker.patch.object(utils, 'sync') 25 sync_mock.return_value = True, {} 26 set_module_args( 27 name='test_cluster_role_binding', 28 cluster_role='test_cluster_role', 29 users=['test_user'], 30 ) 31 32 with pytest.raises(AnsibleExitJson): 33 cluster_role_binding.main() 34 35 state, _client, path, payload, check_mode, _compare = sync_mock.call_args[0] 36 assert state == 'present' 37 assert path == '/api/core/v2/clusterrolebindings/test_cluster_role_binding' 38 assert payload == dict( 39 role_ref=dict( 40 name='test_cluster_role', 41 type='ClusterRole', 42 ), 43 subjects=[ 44 dict( 45 name='test_user', 46 type='User', 47 ), 48 ], 49 metadata=dict( 50 name='test_cluster_role_binding', 51 ), 52 ) 53 assert check_mode is False 54 55 def test_minimal_cluster_role_binding_parameters_groups(self, mocker): 56 sync_mock = mocker.patch.object(utils, 'sync') 57 sync_mock.return_value = True, {} 58 set_module_args( 59 name='test_cluster_role_binding', 60 cluster_role='test_cluster_role', 61 groups=['test_group'], 62 ) 63 64 with pytest.raises(AnsibleExitJson): 65 cluster_role_binding.main() 66 67 state, _client, path, payload, check_mode, _compare = sync_mock.call_args[0] 68 assert state == 'present' 69 assert path == '/api/core/v2/clusterrolebindings/test_cluster_role_binding' 70 assert payload == dict( 71 role_ref=dict( 72 name='test_cluster_role', 73 type='ClusterRole', 74 ), 75 subjects=[ 76 dict( 77 name='test_group', 78 type='Group', 79 ), 80 ], 81 metadata=dict( 82 name='test_cluster_role_binding', 83 ), 84 ) 85 assert check_mode is False 86 87 def test_all_cluster_role_binding_parameters(self, mocker): 88 sync_mock = mocker.patch.object(utils, 'sync') 89 sync_mock.return_value = True, {} 90 set_module_args( 91 name='test_cluster_role_binding', 92 cluster_role='test_cluster_role', 93 users=['user_1', 'user_2'], 94 groups=['group_1', 'group_2'], 95 ) 96 97 with pytest.raises(AnsibleExitJson): 98 cluster_role_binding.main() 99 100 state, _client, path, payload, check_mode, _compare = sync_mock.call_args[0] 101 assert state == 'present' 102 assert path == '/api/core/v2/clusterrolebindings/test_cluster_role_binding' 103 assert payload == dict( 104 metadata=dict( 105 name='test_cluster_role_binding', 106 ), 107 role_ref=dict( 108 name='test_cluster_role', 109 type='ClusterRole', 110 ), 111 subjects=[ 112 dict( 113 name='group_1', 114 type='Group', 115 ), 116 dict( 117 name='group_2', 118 type='Group', 119 ), 120 dict( 121 name='user_1', 122 type='User', 123 ), 124 dict( 125 name='user_2', 126 type='User', 127 ), 128 ] 129 ) 130 assert check_mode is False 131 132 def test_failure(self, mocker): 133 sync_mock = mocker.patch.object(utils, 'sync') 134 sync_mock.side_effect = errors.Error('Bad error') 135 set_module_args( 136 name='test_cluster_role_binding', 137 cluster_role='test_cluster_role', 138 users=['test_user'], 139 ) 140 with pytest.raises(AnsibleFailJson): 141 cluster_role_binding.main() 142 143 def test_failure_missing_groups_or_users(self, mocker): 144 sync_mock = mocker.patch.object(utils, 'sync') 145 sync_mock.side_effect = Exception("Validation should fail but didn't") 146 set_module_args( 147 name='test_cluster_role_binding', 148 cluster_role='test_cluster_role', 149 ) 150 151 with pytest.raises(AnsibleFailJson): 152 cluster_role_binding.main() 153