def test_get_servers_from_clc_api(self, mock_clc_sdk): mock_clc_sdk.v2.Servers.side_effect = CLCException("Server Not Found") under_test = ClcPublicIp(self.module) under_test._get_servers_from_clc(['TESTSVR1', 'TESTSVR2'], 'FAILED TO OBTAIN LIST') self.module.fail_json.assert_called_once_with( msg='FAILED TO OBTAIN LIST: Server Not Found')
def test_wait_for_requests_no_wait(self): mock_request = mock.MagicMock() mock_request.WaitUntilComplete.return_value = True self.module.params = {'wait': False} under_test = ClcPublicIp(self.module) under_test._wait_for_requests_to_complete([mock_request]) self.assertFalse(self.module.fail_json.called)
def test_ensure_server_publicip_present_w_mock_server( self, mock_get_servers): server_ids = ['TESTSVR1'] mock_get_servers.return_value = [mock.MagicMock()] protocol = 'TCP' ports = [80] self.module.check_mode = False under_test = ClcPublicIp(self.module) under_test.ensure_public_ip_present(server_ids, protocol, ports) self.assertFalse(self.module.fail_json.called)
def test_set_clc_credentials_w_creds(self): with patch.dict('os.environ', { 'CLC_V2_API_USERNAME': '******', 'CLC_V2_API_PASSWD': 'falcon' }): with patch.object(ClcPublicIp, 'clc') as mock_clc_sdk: under_test = ClcPublicIp(self.module) under_test._set_clc_credentials_from_env() mock_clc_sdk.v2.SetCredentials.assert_called_once_with( api_username='******', api_passwd='falcon')
def test_wait_for_requests_w_mock_request(self): mock_r1 = mock.MagicMock() mock_r1.WaitUntilComplete.return_value = True mock_r2 = mock.MagicMock() mock_r2.WaitUntilComplete.return_value = True requests = [mock_r1, mock_r2] self.module.wait = True under_test = ClcPublicIp(self.module) under_test._wait_for_requests_to_complete(requests) self.assertFalse(self.module.fail_json.called)
def test_set_clc_credentials_w_token(self): with patch.dict('os.environ', { 'CLC_V2_API_TOKEN': 'Token12345', 'CLC_ACCT_ALIAS': 'TEST' }): with patch.object(ClcPublicIp, 'clc') as mock_clc_sdk: under_test = ClcPublicIp(self.module) under_test._set_clc_credentials_from_env() self.assertEqual(mock_clc_sdk._LOGIN_TOKEN_V2, 'Token12345') self.assertFalse(mock_clc_sdk.v2.SetCredentials.called) self.assertEqual(self.module.fail_json.called, False)
def test_wait_for_requests_w_mock_request_fail(self): mock_request = mock.MagicMock() mock_request.WaitUntilComplete.return_value = True mock_response = mock.MagicMock() mock_response.Status.return_value = 'Failed' mock_request.requests = [mock_response] requests = [mock_request] self.module.wait = True under_test = ClcPublicIp(self.module) under_test._wait_for_requests_to_complete(requests) self.assertTrue(self.module.fail_json.called)
def test_ensure_server_publicip_present_w_mock_server_restrictions( self, mock_get_servers): server_ids = ['TESTSVR1'] mock_get_servers.return_value = [mock.MagicMock()] protocol = 'TCP' ports = [80] restrictions = ['1.1.1.1/24', '2.2.2.0/36'] self.module.check_mode = False under_test = ClcPublicIp(self.module) under_test.ensure_public_ip_present(server_ids=server_ids, protocol=protocol, ports=ports, source_restrictions=restrictions) self.assertFalse(self.module.fail_json.called)
def test_clc_module_not_found(self): # Setup Mock Import Function real_import = __import__ def mock_import(name, *args): if name == 'clc': raise ImportError return real_import(name, *args) # Under Test with mock.patch('__builtin__.__import__', side_effect=mock_import): reload(clc_publicip) ClcPublicIp(self.module) # Assert Expected Behavior self.module.fail_json.assert_called_with( msg='clc-python-sdk required for this module') reload(clc_publicip)
def test_remove_publicip_from_server_exception(self, mock_clc_sdk): error = CLCException("Failed") error.response_text = 'Mock failure message' mock_server = mock.MagicMock() mock_server.id = 'TESTSVR1' ip = mock.MagicMock() ip.ipAddresses = [{'internal': '1.2.3.4'}] ip.Delete.side_effect = error mock_server.data = {'details': ip} mock_server.PublicIPs().public_ips = [ip] under_test = ClcPublicIp(self.module) under_test._remove_publicip_from_server(mock_server) self.module.fail_json.assert_called_once_with( msg= 'Failed to remove public ip from the server : TESTSVR1. Mock failure message' )
def test_process_request_state_invalid(self, mock_set_clc_creds, mock_public_ip): test_params = { 'server_ids': ['TESTSVR1', 'TESTSVR2'], 'protocol': 'TCP', 'ports': [80, 90], 'wait': True, 'state': 'INVALID' } self.module.params = test_params under_test = ClcPublicIp(self.module) under_test.process_request() self.assertFalse(mock_public_ip.called) self.module.fail_json.assert_called_once_with( msg='Unknown State: INVALID') self.assertFalse(self.module.exit_json.called)
def test_requests_invalid_version(self): # Setup Mock Import Function real_import = __import__ def mock_import(name, *args): if name == 'requests': args[0]['requests'].__version__ = '2.4.0' return real_import(name, *args) # Under Test with mock.patch('__builtin__.__import__', side_effect=mock_import): reload(clc_publicip) ClcPublicIp(self.module) # Assert Expected Behavior self.module.fail_json.assert_called_with( msg='requests library version should be >= 2.5.0') reload(clc_publicip)
def test_requests_module_not_found(self): # Setup Mock Import Function real_import = __import__ def mock_import(name, *args): if name == 'requests': args[0]['requests'].__version__ = '2.7.0' raise ImportError return real_import(name, *args) # Under Test with mock.patch('__builtin__.__import__', side_effect=mock_import): reload(clc_publicip) ClcPublicIp(self.module) # Assert Expected Behavior self.module.fail_json.assert_called_with( msg='requests library is required for this module') reload(clc_publicip)
def test_ensure_server_absent_absent_w_mock_server(self, mock_get_servers): server_ids = ['TESTSVR1'] mock_server1 = mock.MagicMock() mock_server1.id = 'TESTSVR1' public_ips_obj = mock.MagicMock() ip = mock.MagicMock() ip.Delete.return_value = 'success' public_ips_obj.public_ips = [ip] mock_server1.PublicIPs.return_value = public_ips_obj mock_get_servers.return_value = [mock_server1] self.module.check_mode = False under_test = ClcPublicIp(self.module) changed, servers_modified, requests = under_test.ensure_public_ip_absent( server_ids) self.assertFalse(self.module.fail_json.called) self.assertEqual(changed, True) self.assertEqual(servers_modified, ['TESTSVR1'])
def test_add_publicip_to_server_exception(self, mock_clc_sdk): error = CLCException("Failed") error.response_text = 'Mock failure message' mock_server = mock.MagicMock() mock_server.id = 'TESTSVR1' mock_server.data = { 'details': { 'ipAddresses': [{ 'internal': '1.2.3.4' }] } } mock_server.PublicIPs().Add.side_effect = error under_test = ClcPublicIp(self.module) under_test._add_publicip_to_server(mock_server, 'ports') self.module.fail_json.assert_called_once_with( msg= 'Failed to add public ip to the server : TESTSVR1. Mock failure message' )
def test_process_request_state_present(self, mock_set_clc_creds, mock_public_ip): test_params = { 'server_ids': ['TESTSVR1', 'TESTSVR2'], 'protocol': 'TCP', 'ports': [80, 90], 'wait': True, 'state': 'present' } mock_public_ip.return_value = True, ['TESTSVR1'], mock.MagicMock() self.module.params = test_params self.module.check_mode = False under_test = ClcPublicIp(self.module) under_test.process_request() self.module.exit_json.assert_called_once_with(changed=True, server_ids=['TESTSVR1']) self.assertFalse(self.module.fail_json.called)
def test_set_clc_credentials_w_api_url(self, mock_clc_sdk): with patch.dict('os.environ', {'CLC_V2_API_URL': 'dummyapiurl'}): under_test = ClcPublicIp(self.module) under_test._set_clc_credentials_from_env() self.assertEqual(under_test.clc.defaults.ENDPOINT_URL_V2, 'dummyapiurl')
def test_set_clc_credentials_w_no_creds(self): with patch.dict('os.environ', {}, clear=True): under_test = ClcPublicIp(self.module) under_test._set_clc_credentials_from_env() self.assertEqual(self.module.fail_json.called, True)
def test_wait_for_requests_to_complete_req_failed(self): mock_request_list = self.build_mock_publicip_add_request_list( status='failed') under_test = ClcPublicIp(self.module)._wait_for_requests_to_complete under_test(mock_request_list) self.assertTrue(self.module.fail_json.called)