def test_format_invalid_vm_power_state_update(self): self._mock_rabbitmq_client() cloudstack_mock = self._mock_cloudstack_service( open_json('tests/json/vm.json')['virtualmachine'][0], open_json('tests/json/project.json')['project'][0], open_json('tests/json/zone.json')['zone'][0] ) update = self._create_driver()._create_updates({ 'status': 'preStateTransitionEvent' }) self.assertEqual([], update) self.assertFalse(cloudstack_mock.get_virtual_machine.called) self.assertFalse(cloudstack_mock.get_project.called)
def test_format_unmapped_update(self): self._mock_rabbitmq_client() cloudstack_mock = self._mock_cloudstack_service( open_json('tests/json/vm.json')['virtualmachine'][0], open_json('tests/json/project.json')['project'][0], open_json('tests/json/zone.json')['zone'][0] ) update = self._create_driver()._create_updates({ 'status': 'Completed', 'event': 'VM.START' }) self.assertEqual([], update) self.assertFalse(cloudstack_mock.get_virtual_machine.called) self.assertFalse(cloudstack_mock.get_project.called)
def test_get_project_given_project_not_found(self): mock = self._mock_list_projects(open_json('tests/json/empty_project.json')) service = CloudstackService(mock) project = service.get_project('unique_id') self.assertEqual(dict(), project) self.assertTrue(mock.listProjects.called)
def test_get_project_given_project_not_found(self): mock = self._mock_list_projects(open_json(TEST_JSON + 'empty_project.json')) service = CloudstackService(mock) project = service.get_project(UNIQUE_ID) self.assertEqual(dict(), project) self.assertTrue(mock.listProjects.called)
def test_get_virtual_machine_given_vm_not_found(self): mock = self._mock_list_vm(open_json('tests/json/empty_vm.json')) service = CloudstackService(mock) vm = service.get_virtual_machine('unique_id') self.assertIsNone(vm) self.assertTrue(mock.listVirtualMachines.called)
def test_get_virtual_machine_given_vm_not_found(self): mock = self._mock_list_vm(open_json(TEST_JSON + 'empty_vm.json')) service = CloudstackService(mock) vm = service.get_virtual_machine(UNIQUE_ID) self.assertIsNone(vm) self.assertTrue(mock.listVirtualMachines.called)
def test_data_spec_comp_unit(self): """Test method comp_unit of DataSpec""" comp_unit = open_json('tests/json/data_spec/comp_unit.json') data = DataSpec().comp_unit(comp_unit) expected = { 'id': 'eqpt1', 'name': '', 'provider': 'globomap', 'properties': [ { 'key': 'maintenance', 'value': False, 'description': 'Maintenance' }, { 'key': 'equipment_type', 'value': 'Server', 'description': 'Equipment Type' }, { 'key': 'ips', 'value': [ '10.0.0.1', 'bebe:bebe:bebe:0000:0000:0000:0000:0001' ], 'description': 'IPs' }, ] } self.assertDictEqual(data, expected)
def test_get_project(self): mock = self._mock_list_projects(open_json(TEST_JSON + 'project.json')) service = CloudstackService(mock) project = service.get_project(UNIQUE_ID) self.assertIsNotNone(project) self.assertTrue(mock.listProjects.called)
def test_data_spec_vip(self): """Test method vip of DataSpec""" vip = open_json('tests/json/data_spec/vip.json') data = DataSpec().vip(vip) expected = { 'id': '1', 'name': 'vip_teste', 'provider': 'napi', 'properties': [ { 'key': 'created', 'value': False, 'description': 'Created id Load Balancer' }, { 'key': 'ip', 'value': '10.10.0.2', 'description': 'IP' }, { 'key': 'environmentvip', 'value': 'FIN_VIP-ClientTxt-VIP-EnvP44Txt-VIP', 'description': 'Environment of VIP' } ] } self.assertDictEqual(data, expected)
def test_data_spec_vlan(self): """Test method vlan of DataSpec""" vlan = open_json('tests/json/data_spec/vlan.json') data = DataSpec().vlan(vlan) expected = { 'id': '1', 'name': 'Vlan1', 'provider': 'napi', 'properties': [{ 'key': 'num_vlan', 'value': 2, 'description': 'Number of VLAN' }, { 'key': 'description', 'value': 'Vlan Description', 'description': 'Description' }, { 'value': False, 'key': 'active', 'description': 'Status' }] } self.assertDictEqual(data, expected)
def test_data_spec_port(self): """Test method port of DataSpec""" port = open_json('tests/json/data_spec/port.json') data = DataSpec().port(port, 1) expected = { 'from': 'vip/napi_1', 'to': 'pool/napi_1', 'id': '1', 'name': '8080:Default VIP', 'provider': 'napi', 'properties': { 'l4_protocol': 'TCP', 'l7_protocol': 'HTTP', 'l7_rule': 'Default VIP', 'port': 8080 }, 'properties_metadata': { 'l4_protocol': { 'description': 'L4 Protocol' }, 'l7_protocol': { 'description': 'L7 Protocol' }, 'l7_rule': { 'description': 'L7 Rule' }, 'port': { 'description': 'Port' } } } self.assertDictEqual(data, expected)
def test_data_spec_vlan(self): """Test method vlan of DataSpec""" vlan = open_json('tests/json/data_spec/vlan.json') data = DataSpec().vlan(vlan) expected = { 'id': '1', 'name': 'Vlan1', 'provider': 'napi', 'properties': { 'num_vlan': 2, 'description': 'Vlan Description', 'active': False }, 'properties_metadata': { 'num_vlan': { 'description': 'Number of VLAN' }, 'description': { 'description': 'Description' }, 'active': { 'description': 'Active Vlan' } } } self.assertDictEqual(data, expected)
def test_data_spec_comp_unit(self): """Test method comp_unit of DataSpec""" comp_unit = open_json('tests/json/data_spec/comp_unit.json') data = DataSpec().comp_unit(comp_unit) expected = { 'id': 'eqpt1', 'name': '', 'provider': 'globomap', 'properties': [ { 'key': 'maintenance', 'value': False, 'description': 'Maintenance' }, { 'key': 'equipment_type', 'value': 'Server', 'description': 'Equipment Type' }, { 'key': 'ips', 'value': ['10.0.0.1', 'bebe:bebe:bebe:0000:0000:0000:0000:0001'], 'description': 'IPs' }, ] } self.assertDictEqual(data, expected)
def test_data_spec_vlan(self): """Test method vlan of DataSpec""" vlan = open_json('tests/json/data_spec/vlan.json') data = DataSpec().vlan(vlan) expected = { 'id': '1', 'name': 'Vlan1', 'provider': 'napi', 'properties': [ { 'key': 'num_vlan', 'value': 2, 'description': 'Number of VLAN' }, { 'key': 'description', 'value': 'Vlan Description', 'description': 'Description' }, { 'value': False, 'key': 'active', 'description': 'Status' } ] } self.assertDictEqual(data, expected)
def test_data_spec_vip(self): """Test method vip of DataSpec""" vip = open_json('tests/json/data_spec/vip.json') data = DataSpec().vip(vip) expected = { 'id': '1', 'name': 'vip_teste', 'provider': 'napi', 'properties': [{ 'key': 'created', 'value': False, 'description': 'Created id Load Balancer' }, { 'key': 'ip', 'value': '10.10.0.2', 'description': 'IP' }, { 'key': 'environmentvip', 'value': 'FIN_VIP-ClientTxt-VIP-EnvP44Txt-VIP', 'description': 'Environment of VIP' }] } self.assertDictEqual(data, expected)
def test_get_project(self): mock = self._mock_list_projects(open_json('tests/json/project.json')) service = CloudstackService(mock) project = service.get_project('unique_id') self.assertIsNotNone(project) self.assertTrue(mock.listProjects.called)
def test_data_spec_comp_unit_acs(self): """Test method comp_unit of DataSpec""" comp_unit = open_json('tests/json/data_spec/comp_unit_acs.json') data = DataSpec().comp_unit(comp_unit) expected = { 'id': '8f1d34c1-ab89-4ef7-9d9d-0d57c2b6547b', 'provider': 'globomap', 'properties': { 'maintenance': False, 'equipment_type': 'Server', 'ips': [ '10.0.0.1', 'bebe:bebe:bebe:0000:0000:0000:0000:0001' ], }, 'properties_metadata': { 'maintenance': { 'description': 'Maintenance' }, 'equipment_type': { 'description': 'Equipment Type' }, 'ips': { 'description': 'IPs' }, } } self.assertDictEqual(data, expected)
def test_get_updates_returning_list_of_updates(self): updates = [open_json('tests/json/globomap/vip.json')] self._mock_rabbitmq_client((updates, 1)) def callback(updates): self.assertIsNotNone(updates) GenericDriver().process_updates(callback)
def test_format_create_vm_update(self): self._mock_rabbitmq_client() cloudstack_mock = self._mock_cloudstack_service( open_json('tests/json/vm.json')['virtualmachine'][0], open_json('tests/json/project.json')['project'][0], open_json('tests/json/zone.json')['zone'][0] ) update = self._create_driver()._create_updates( open_json('tests/json/vm_create_event.json'))[0] self.assertEqual('PATCH', update['action']) self.assertEqual('comp_unit', update['collection']) self.assertEqual('collections', update['type']) self.assertEqual( 'globomap_3018bdf1-4843-43b3-bdcf-ba1beb63c930', update['key']) self.assertTrue(cloudstack_mock.get_virtual_machine.called) self.assertTrue(cloudstack_mock.get_project.called)
def test_sync_updates(self): update = open_json('tests/json/driver/driver_output_create.json') globomap_client_mock = MagicMock() DriverWorker(globomap_client_mock, Mock(), None)._process_update(update) globomap_client_mock.update_element_state.assert_called_once_with( 'CREATE', 'collections', 'vip', update['element'], None)
def test_send_updates_expected_status_500(self): rabbit_mock = self._mock_rabbitmq_client(Exception()) updates = [open_json('tests/json/driver/driver_output_create.json')] response = self.app.post('/v2/updates/', data=json.dumps(updates), headers={'Content-Type': 'application/json'}) self.assertEqual(500, response.status_code) self.assertEqual(1, rabbit_mock.post_message.call_count)
def test_format_update_wrong_event(self): self._mock_rabbitmq_client() cloudstack_mock = self._mock_cloudstack_service(None, None, None) update = self._create_driver()._create_updates( open_json('tests/json/vm_create_wrong_event.json')) self.assertEqual([], update) self.assertFalse(cloudstack_mock.get_virtual_machine.called) self.assertFalse(cloudstack_mock.get_project.called)
def test_get_updates_given_exception(self): rabbit_client_mock = self._mock_rabbitmq_client( open_json('tests/json/vm_create_event.json')) cloudstack_mock = self._mock_cloudstack_service( open_json('tests/json/vm.json')['virtualmachine'][0], open_json('tests/json/project.json')['project'][0], open_json('tests/json/zone.json')['zone'][0] ) def callback(update): raise Exception() with self.assertRaises(Exception): self._create_driver().process_updates(callback) self.assertTrue(cloudstack_mock.get_virtual_machine.called) self.assertTrue(cloudstack_mock.get_project.called) self.assertEqual(0, rabbit_client_mock.ack_message.call_count) self.assertEqual(1, rabbit_client_mock.nack_message.call_count)
def test_data_spec_pool_comp_unit_acs(self): """Test method pool_comp_unit of DataSpec""" pool_comp_unit = open_json( 'tests/json/data_spec/pool_comp_unit_acs.json') data = DataSpec().pool_comp_unit(pool_comp_unit, 1) expected = { 'from': 'pool/napi_1', 'to': 'comp_unit/globomap_8f1d34c1-ab89-4ef7-9d9d-0d57c2b6547b', 'id': '1', 'name': '10.0.0.2', 'provider': 'napi', 'properties': { 'ip': u'10.0.0.2', 'priority': 0, 'weight': 1, 'limit': 1000, 'port_real': 8080, 'status_last_update': None, 'status_monitor': 'Up', 'status_session': 'Up', 'status_healthcheck': 'Up' }, 'properties_metadata': { 'ip': { 'description': 'IP' }, 'priority': { 'description': 'Priority' }, 'weight': { 'description': 'Weight' }, 'limit': { 'description': 'Limit' }, 'port_real': { 'description': 'Port' }, 'status_last_update': { 'description': 'Last Update of Status' }, 'status_monitor': { 'description': 'User Up/Down (Forced)' }, 'status_session': { 'description': 'Enabled/Disabled' }, 'status_healthcheck': { 'description': 'Up/Down (Healthcheck)' } } } self.assertDictEqual(data, expected)
def test_process_updates_given_vm_without_project(self): rabbit_client_mock = self._mock_rabbitmq_client( open_json('tests/json/vm_create_event.json')) cloudstack_mock = self._mock_cloudstack_service( open_json('tests/json/vm.json')['virtualmachine'][0], dict(), open_json('tests/json/zone.json')['zone'][0] ) def callback(update): if update['action'] == PATCH: self.assertIsNone( update['element']['properties'].get('project')) self._create_driver().process_updates(callback) self.assertTrue(cloudstack_mock.get_virtual_machine.called) self.assertTrue(cloudstack_mock.get_project.called) self.assertEqual(1, rabbit_client_mock.ack_message.call_count) self.assertEqual(0, rabbit_client_mock.nack_message.call_count)
def test_format_comp_unit(self): self._mock_cloudstack_service(None, None, None) self._mock_rabbitmq_client() vm = open_json('tests/json/vm.json')['virtualmachine'][0] project = open_json('tests/json/project.json')['project'][0] comp_unit = self._create_vm_update_handler()._create_comp_unit_document(project, vm) self.assertIsNotNone(comp_unit) self.assertEqual( '3018bdf1-4843-43b3-bdcf-ba1beb63c930', comp_unit['id']) self.assertEqual('vm_name', comp_unit['name']) self.assertEqual('globomap', comp_unit['provider']) self.assertIsNotNone(comp_unit['timestamp']) self.assertEqual(14, len(comp_unit['properties'].keys())) for property_key in comp_unit['properties'].keys(): property_meta = comp_unit['properties_metadata'][property_key] self.assertIsNotNone(comp_unit['properties'][property_key]) self.assertIsNotNone(property_meta) self.assertIsNotNone(property_meta['description'])
def test_send_updates_invalid_provider(self): rabbit_mock = self._mock_rabbitmq_client(True) updates = [open_json('tests/json/driver/driver_output_create.json')] updates[0]["element"]["provider"] = "globo.map" response = self.app.post('/v2/updates/', data=json.dumps(updates), headers={'Content-Type': 'application/json'}) response_json = json.loads(response.data) self.assertEqual(400, response.status_code) self.assertEqual('Input payload validation failed', response_json['message'])
def test_send_updates(self): rabbit_mock = self._mock_rabbitmq_client(True) updates = [open_json('tests/json/driver/driver_output_create.json')] response = self.app.post('/v2/updates/', data=json.dumps(updates), headers={'Content-Type': 'application/json'}) response_json = json.loads(response.data) self.assertEqual(202, response.status_code) self.assertEqual('Updates published successfully', response_json['message']) self.assertEqual(1, rabbit_mock.post_message.call_count)
def test_data_spec_network_v6_comp_unit(self): """Test method network_comp_unit(v6) of DataSpec""" network = open_json('tests/json/data_spec/network_v6_comp_unit.json') data = DataSpec().network_comp_unit(network, 'EQPT1', 6) expected = { 'from': 'network/napi_v6_2', 'to': 'comp_unit/globomap_eqpt1', 'id': 'v6_6', 'provider': 'napi', } self.assertDictEqual(data, expected)
def test_data_spec_vlan_network_v6(self): """Test method vlan_network(v6) of DataSpec""" network = open_json('tests/json/data_spec/network_v6.json') data = DataSpec().vlan_network(network) expected = { 'from': 'vlan/napi_3', 'to': 'network/napi_v6_1', 'id': 'v6_1', 'name': '31 - bebe:bebe:bebe:0000:0000:0000:0000:0000/64', 'provider': 'napi', } self.assertDictEqual(data, expected)
def test_data_spec_port(self): """Test method port of DataSpec""" vip = open_json('tests/json/data_spec/port.json') data = DataSpec().port(vip, 1) expected = { 'from': 'vip/napi_1', 'to': 'pool/napi_1', 'id': '1', 'name': '8080', 'provider': 'napi' } self.assertDictEqual(data, expected)
def test_data_spec_network_v6_comp_unit(self): """Test method network_comp_unit(v6) of DataSpec""" network = open_json('tests/json/data_spec/network_v6_comp_unit.json') data = DataSpec().network_comp_unit(network, 'EQPT1', 6) expected = { 'from': 'network/napi_v6_2', 'to': 'comp_unit/globomap_eqpt1', 'id': 'v6_6', 'name': 'fdbe:bebe:bebe:bebe:0000:0000:0000:0001 - eqpt1', 'provider': 'napi', } self.assertDictEqual(data, expected)
def test_data_spec_network_v4_comp_unit(self): """Test method network_comp_unit(v4) of DataSpec""" network = open_json('tests/json/data_spec/network_v4_comp_unit.json') data = DataSpec().network_comp_unit(network, 'EQPT1', 8) expected = { 'from': 'network/napi_v4_3', 'to': 'comp_unit/globomap_eqpt1', 'id': 'v4_8', 'name': '10.0.0.5 - eqpt1', 'provider': 'napi', } self.assertDictEqual(data, expected)
def test_data_spec_network_v6_comp_unit_acs(self): """Test method network_comp_unit(v6) of DataSpec""" network = open_json('tests/json/data_spec/network_v6_comp_unit.json') data = DataSpec().network_comp_unit( network, 'vm-8f1d34c1-ab89-4ef7-9d9d-0d57c2b6547b', 6) expected = { 'from': 'network/napi_v6_2', 'to': 'comp_unit/globomap_8f1d34c1-ab89-4ef7-9d9d-0d57c2b6547b', 'id': 'v6_6', 'provider': 'napi', } self.assertDictEqual(data, expected)
def test_data_spec_vlan_network_v4(self): """Test method vlan_network(v4) of DataSpec""" network = open_json('tests/json/data_spec/network_v4.json') data = DataSpec().vlan_network(network) expected = { 'from': 'vlan/napi_3', 'to': 'network/napi_v4_1', 'id': 'v4_1', 'name': '31 - 10.0.0.0/24', 'provider': 'napi', } self.assertDictEqual(data, expected) self.assertDictEqual(data, expected)
def test_data_spec_father_environment(self): """Test method father_environment of DataSpec""" environment = open_json('tests/json/data_spec/environment.json') data = DataSpec().father_environment(environment) name = 'DIVISAO_DC_SPACE_2 - AMBIENTE_LOGICO_SPACE_2 - GRUPO_L3_SPACE_2 / ' \ 'DIVISAO_DC_YELLOW - AMBIENTE_LOGICO_YELLOW - GRUPO_L3_YELLOW' expected = { 'from': 'environment/napi_7', 'to': 'environment/napi_1', 'id': '1', 'name': name, 'provider': 'napi' } self.assertDictEqual(data, expected)
def test_data_spec_pool(self): """Test method pool of DataSpec""" pool = open_json('tests/json/data_spec/pool.json') data = DataSpec().pool(pool) expected = { 'id': '1', 'name': 'Pool_1', 'provider': 'napi', 'properties': [ { 'key': 'default_port', 'value': 8080, 'description': 'Default Port of Pool' }, { 'key': 'environment', 'value': 'DIVISAO_DC_POOL - AMBIENTE_LOGICO_POOL - GRUPO_L3_POOL', 'description': 'Environment of Pool' }, { 'key': 'servicedownaction', 'value': 'none', 'description': 'Action On Service Down' }, { 'key': 'healthcheck', 'value': 'TCP', 'description': 'Healthcheck Type' }, { 'key': 'lb_method', 'value': 'least-conn', 'description': 'Method of Load Balancing' }, { 'key': 'default_limit', 'value': 100, 'description': 'Limit of Connections' }, { 'key': 'pool_created', 'value': True, 'description': 'Created in Load Balancer' } ] } self.assertDictEqual(data, expected)
def test_data_spec_environment_vlan(self): """Test method environment_vlan of DataSpec""" vlan = open_json('tests/json/data_spec/vlan.json') data = DataSpec().environment_vlan(vlan) name = 'DIVISAO_DC_SPACE_2 - AMBIENTE_LOGICO_SPACE_2 - ' \ 'GRUPO_L3_SPACE_2 / 2' expected = { 'from': 'environment/napi_3', 'to': 'vlan/napi_1', 'id': '1', 'name': name, 'provider': 'napi', } self.assertDictEqual(data, expected)
def test_data_spec_environment(self): """Test method environment of DataSpec""" environment = open_json('tests/json/data_spec/environment.json') data = DataSpec().environment(environment) expected = { 'id': '1', 'name': 'DIVISAO_DC_SPACE_2 - AMBIENTE_LOGICO_SPACE_2 - GRUPO_L3_SPACE_2', 'provider': 'napi', 'properties': [ { 'key': 'default_vrf', 'value': 'default', 'description': 'Default VRF' } ] } self.assertDictEqual(data, expected)
def test_data_spec_pool_comp_unit(self): """Test method pool_comp_unit of DataSpec""" pool_comp_unit = open_json('tests/json/data_spec/pool_comp_unit.json') data = DataSpec().pool_comp_unit(pool_comp_unit, 1) expected = { 'from': 'pool/napi_1', 'to': 'comp_unit/globomap_serverspace1', 'id': '1', 'name': '10.0.0.2', 'provider': 'napi', 'properties': [ { 'key': 'ip', 'value': u'10.0.0.2', 'description': 'IP' }, { 'key': 'priority', 'value': 0, 'description': 'Priority' }, { 'key': 'weight', 'value': 1, 'description': 'Weight' }, { 'key': 'limit', 'value': 1000, 'description': 'Limit' }, { 'key': 'port_real', 'value': 8080, 'description': 'Port' } ] } self.assertDictEqual(data, expected)
def test_data_spec_network_v6(self): """Test method network(v6) of DataSpec""" network = open_json('tests/json/data_spec/network_v6.json') data = DataSpec().network(network) expected = { 'id': 'v6_1', 'name': 'bebe:bebe:bebe:0000:0000:0000:0000:0000/64', 'provider': 'napi', 'properties': [ { 'key': 'active', 'value': False, 'description': 'Network Status' }, { 'key': 'network_type', 'value': 'Point-to-Point', 'description': 'Network Type' } ] } self.assertDictEqual(data, expected)
def _mock_networkv6(self): napi_mock = patch( 'globomap_driver_napi.driver.NetworkAPI.get_network_ipv6_id').start() data = open_json('tests/json/messages/networkapi/get_networkv6.json') napi_mock.return_value = data['networks'][0]
def _mock_vip(self): napi_mock = patch( 'globomap_driver_napi.driver.NetworkAPI.get_vip').start() data = open_json('tests/json/driver/get_vip.json') napi_mock.return_value = data['vips'][0]
def _mock_pool_member_id(self): napi_mock = patch( 'globomap_driver_napi.driver.NetworkAPI.get_pool_by_member_id').start() data = open_json('tests/json/driver/get_pool.json') napi_mock.return_value = data['server_pools'][0]
def _open_message(self): data = open_json('tests/json/driver/queue_messages.json') return data
def _mock_equipment(self): napi_mock = patch( 'globomap_driver_napi.driver.NetworkAPI.get_equipment').start() data = open_json('tests/json/messages/networkapi/get_equipment.json') napi_mock.return_value = data['equipments'][0]
def _mock_vip_by_portpool_id(self): napi_mock = patch( 'globomap_driver_napi.driver.NetworkAPI.get_vip_by_portpool_id').start() data = open_json('tests/json/messages/networkapi/get_vip.json') napi_mock.return_value = data['vips'][0]
def _mock_pool(self): napi_mock = patch( 'globomap_driver_napi.driver.NetworkAPI.get_pool').start() data = open_json('tests/json/messages/networkapi/get_pool.json') napi_mock.return_value = data['server_pools'][0]
def _update_message(self, file_name): data = open_json(file_name) return data