def test_nova_instance_lock(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '73b09e16-35b7-4922-804e-e8f5d9b740fc' instance0 = compute_model.get_instance_by_uuid(instance0_uuid) message = self.load_message('instance-lock.json') self.assertFalse(instance0.locked) handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) self.assertTrue(instance0.locked) message = self.load_message('instance-unlock.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) self.assertFalse(instance0.locked)
def test_nova_instance_shelve(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '73b09e16-35b7-4922-804e-e8f5d9b740fc' instance0 = compute_model.get_instance_by_uuid(instance0_uuid) message = self.load_message('instance-shelve-end.json') self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state) handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) self.assertEqual(element.InstanceState.SHELVED.value, instance0.state) message = self.load_message('instance-unshelve-end.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state)
def test_nova_instance_create(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = 'c03c0bf9-f46e-4e4f-93f1-817568567ee2' self.assertRaises(exception.InstanceNotFound, compute_model.get_instance_by_uuid, instance0_uuid) message = self.load_message('instance-create-end.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) instance0 = compute_model.get_instance_by_uuid(instance0_uuid) self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state) self.assertEqual(1, instance0.vcpus) self.assertEqual(1, instance0.disk_capacity) self.assertEqual(512, instance0.memory)
def test_instance_update_node_notfound_set_unmapped( self, m_nova_helper_cls): m_get_compute_node_by_hostname = mock.Mock( side_effect=exception.ComputeNodeNotFound(name="TEST")) m_nova_helper_cls.return_value = mock.Mock( get_compute_node_by_hostname=m_get_compute_node_by_hostname, name='m_nova_helper') compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '9966d6bd-a45c-4e1c-9d57-3054899a3ec7' message = self.load_message('scenario3_notfound_instance-update.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) instance0 = compute_model.get_instance_by_uuid(instance0_uuid) self.assertEqual(element.InstanceState.PAUSED.value, instance0.state) self.assertEqual(1, instance0.vcpus) self.assertEqual(1, instance0.disk) self.assertEqual(512, instance0.memory) m_get_compute_node_by_hostname.assert_any_call('Node_2') self.assertRaises(exception.ComputeNodeNotFound, compute_model.get_node_by_uuid, 'Node_2')
def test_nova_instance_update_notfound_still_creates( self, m_nova_helper_cls, m_placement_helper): mock_placement = mock.Mock(name="placement_helper") mock_placement.get_inventories.return_value = dict() mock_placement.get_usages_for_resource_provider.return_value = { orc.DISK_GB: 10, orc.MEMORY_MB: 100, orc.VCPU: 0 } m_placement_helper.return_value = mock_placement m_get_compute_node_by_hostname = mock.Mock( side_effect=lambda uuid: mock.Mock( name='m_get_compute_node_by_hostname', id='669966bd-a45c-4e1c-9d57-3054899a3ec7', hypervisor_hostname="Node_2", state='up', status='enabled', memory_mb=7777, vcpus=42, free_disk_gb=974, local_gb=1337, service={ 'id': 123, 'host': 'Node_2', 'disabled_reason': '' }, )) m_nova_helper_cls.return_value = mock.Mock( get_compute_node_by_hostname=m_get_compute_node_by_hostname, name='m_nova_helper') compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '9966d6bd-a45c-4e1c-9d57-3054899a3ec7' message = self.load_message('scenario3_notfound_instance-update.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) instance0 = compute_model.get_instance_by_uuid(instance0_uuid) self.assertEqual(element.InstanceState.PAUSED.value, instance0.state) self.assertEqual(1, instance0.vcpus) self.assertEqual(1, instance0.disk) self.assertEqual(512, instance0.memory) m_get_compute_node_by_hostname.assert_called_once_with('Node_2') node_2 = compute_model.get_node_by_name('Node_2') self.assertEqual(7777, node_2.memory) self.assertEqual(42, node_2.vcpus) self.assertEqual(1337, node_2.disk)
def notification_endpoints(self): """Associated notification endpoints :return: Associated notification endpoints :rtype: List of :py:class:`~.EventsNotificationEndpoint` instances """ return [ nova.VersionedNotification(self), ]
def test_nova_service_create(self, m_nova_helper_cls, m_placement_helper): mock_placement = mock.Mock(name="placement_helper") mock_placement.get_inventories.return_value = dict() mock_placement.get_usages_for_resource_provider.return_value = { orc.DISK_GB: 10, orc.MEMORY_MB: 100, orc.VCPU: 0 } m_placement_helper.return_value = mock_placement m_get_compute_node_by_hostname = mock.Mock( side_effect=lambda uuid: mock.Mock( name='m_get_compute_node_by_uuid', id="fafac544-906b-4a6a-a9c6-c1f7a8078c73", hypervisor_hostname="host2", state='up', status='enabled', memory_mb=7777, vcpus=42, free_disk_gb=974, local_gb=1337, service={ 'id': 123, 'host': 'host2', 'disabled_reason': '' }, )) m_nova_helper_cls.return_value = mock.Mock( get_compute_node_by_hostname=m_get_compute_node_by_hostname, name='m_nova_helper') compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) new_node_name = "host2" self.assertRaises(exception.ComputeNodeNotFound, compute_model.get_node_by_name, new_node_name) message = self.load_message('service-create.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) new_node = compute_model.get_node_by_name(new_node_name) self.assertEqual('host2', new_node.hostname) self.assertEqual(element.ServiceState.ONLINE.value, new_node.state) self.assertEqual(element.ServiceState.ENABLED.value, new_node.status)
def test_fake_instance_create(self): self.fake_cdmc.cluster_data_model = mock.Mock() handler = novanotification.VersionedNotification(self.fake_cdmc) message = self.load_message('instance-create-end.json') # get_instance_by_uuid should not be called when creating instance with mock.patch.object(self.fake_cdmc.cluster_data_model, 'get_instance_by_uuid') as mock_get: handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) mock_get.assert_not_called()
def test_nova_instance_update_notfound_still_creates( self, m_nova_helper_cls): m_get_compute_node_by_hostname = mock.Mock( side_effect=lambda uuid: mock.Mock( name='m_get_compute_node_by_hostname', id=3, hypervisor_hostname="Node_2", state='up', status='enabled', uuid=uuid, memory_mb=7777, vcpus=42, free_disk_gb=974, local_gb=1337)) m_nova_helper_cls.return_value = mock.Mock( get_compute_node_by_hostname=m_get_compute_node_by_hostname, name='m_nova_helper') compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '9966d6bd-a45c-4e1c-9d57-3054899a3ec7' message = self.load_message('scenario3_notfound_instance-update.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) instance0 = compute_model.get_instance_by_uuid(instance0_uuid) self.assertEqual(element.InstanceState.PAUSED.value, instance0.state) self.assertEqual(1, instance0.vcpus) self.assertEqual(1, instance0.disk_capacity) self.assertEqual(512, instance0.memory) m_get_compute_node_by_hostname.assert_called_once_with('Node_2') node_2 = compute_model.get_node_by_uuid('Node_2') self.assertEqual(7777, node_2.memory) self.assertEqual(42, node_2.vcpus) self.assertEqual(974, node_2.disk) self.assertEqual(1337, node_2.disk_capacity)
def test_instance_resize_confirm_end(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '73b09e16-35b7-4922-804e-e8f5d9b740fc' instance0 = compute_model.get_instance_by_uuid(instance0_uuid) node = compute_model.get_node_by_instance_uuid(instance0_uuid) self.assertEqual('fa69c544-906b-4a6a-a9c6-c1f7a8078c73', node.uuid) message = self.load_message('instance-resize_confirm-end.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) node = compute_model.get_node_by_instance_uuid(instance0_uuid) self.assertEqual('fa69c544-906b-4a6a-a9c6-c1f7a8078c73', node.uuid) self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state)
def test_info_no_cdm(self): # Tests that a notification is received before an audit has been # performed which would create the nova CDM. mock_collector = mock.Mock(cluster_data_model=None) handler = novanotification.VersionedNotification(mock_collector) payload = { 'nova_object.data': { 'uuid': '9966d6bd-a45c-4e1c-9d57-3054899a3ec7', 'host': None } } with mock.patch.object(handler, 'update_instance') as update_instance: handler.info(mock.sentinel.ctxt, 'publisher_id', 'instance.update', payload, metadata={}) # update_instance should not be called since we did not add an # Instance object to the CDM since the CDM does not exist yet. update_instance.assert_not_called()
def test_nova_service_create(self, m_nova_helper_cls): m_get_compute_node_by_hostname = mock.Mock( side_effect=lambda uuid: mock.Mock( name='m_get_compute_node_by_hostname', id=3, hypervisor_hostname="host2", state='up', status='enabled', uuid=uuid, memory_mb=7777, vcpus=42, free_disk_gb=974, local_gb=1337)) m_nova_helper_cls.return_value = mock.Mock( get_compute_node_by_hostname=m_get_compute_node_by_hostname, name='m_nova_helper') compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) new_node_uuid = 'host2' self.assertRaises(exception.ComputeNodeNotFound, compute_model.get_node_by_uuid, new_node_uuid) message = self.load_message('service-create.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) new_node = compute_model.get_node_by_uuid(new_node_uuid) self.assertEqual('host2', new_node.hostname) self.assertEqual(element.ServiceState.ONLINE.value, new_node.state) self.assertEqual(element.ServiceState.ENABLED.value, new_node.status)
def test_nova_service_update(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) node0_name = "hostname_0" node0 = compute_model.get_node_by_name(node0_name) message = self.load_message('scenario3_service-update-disabled.json') self.assertEqual('hostname_0', node0.hostname) self.assertEqual(element.ServiceState.ONLINE.value, node0.state) self.assertEqual(element.ServiceState.ENABLED.value, node0.status) handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) self.assertEqual("hostname_0", node0.hostname) self.assertEqual(element.ServiceState.OFFLINE.value, node0.state) self.assertEqual(element.ServiceState.DISABLED.value, node0.status) message = self.load_message('scenario3_service-update-enabled.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) self.assertEqual("hostname_0", node0.hostname) self.assertEqual(element.ServiceState.ONLINE.value, node0.state) self.assertEqual(element.ServiceState.ENABLED.value, node0.status)
def test_nova_instance_soft_delete_end(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '73b09e16-35b7-4922-804e-e8f5d9b740fc' # Before self.assertTrue(compute_model.get_instance_by_uuid(instance0_uuid)) message = self.load_message('instance-soft_delete-end.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) # After self.assertRaises(exception.InstanceNotFound, compute_model.get_instance_by_uuid, instance0_uuid)
def test_nova_service_delete(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) node0_name = "hostname_0" # Before self.assertTrue(compute_model.get_node_by_name(node0_name)) message = self.load_message('service-delete.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) # After self.assertRaises(exception.ComputeNodeNotFound, compute_model.get_node_by_name, node0_name)
def test_nova_instance_state_building(self): compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = '73b09e16-35b7-4922-804e-e8f5d9b740fc' instance0 = compute_model.get_instance_by_uuid(instance0_uuid) self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state) message = self.load_message('instance-update.json') message['payload']['nova_object.data']['state'] = 'building' handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) # Assert that the instance state in the model is unchanged # since the 'building' state is ignored. self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state)
def test_nova_instance_create(self, m_nova_helper_cls, m_placement_helper): mock_placement = mock.Mock(name="placement_helper") mock_placement.get_inventories.return_value = dict() mock_placement.get_usages_for_resource_provider.return_value = { orc.DISK_GB: 10, orc.MEMORY_MB: 100, orc.VCPU: 0 } m_placement_helper.return_value = mock_placement m_get_compute_node_by_hostname = mock.Mock( side_effect=lambda uuid: mock.Mock( name='m_get_compute_node_by_hostname', id=3, hypervisor_hostname="compute", state='up', status='enabled', uuid=uuid, memory_mb=7777, vcpus=42, free_disk_gb=974, local_gb=1337, service={ 'id': 123, 'host': 'compute', 'disabled_reason': '' }, )) m_nova_helper_cls.return_value = mock.Mock( get_compute_node_by_hostname=m_get_compute_node_by_hostname, name='m_nova_helper') compute_model = self.fake_cdmc.generate_scenario_3_with_2_nodes() self.fake_cdmc.cluster_data_model = compute_model handler = novanotification.VersionedNotification(self.fake_cdmc) instance0_uuid = 'c03c0bf9-f46e-4e4f-93f1-817568567ee2' self.assertRaises(exception.InstanceNotFound, compute_model.get_instance_by_uuid, instance0_uuid) message = self.load_message('instance-create-end.json') handler.info( ctxt=self.context, publisher_id=message['publisher_id'], event_type=message['event_type'], payload=message['payload'], metadata=self.FAKE_METADATA, ) hostname = message['payload']['nova_object.data']['host'] node = self.fake_cdmc.cluster_data_model.get_node_by_instance_uuid( instance0_uuid) self.assertEqual(hostname, node.hostname) m_get_compute_node_by_hostname.assert_called_once_with(hostname) instance0 = self.fake_cdmc.cluster_data_model.get_instance_by_uuid( instance0_uuid) self.assertEqual(element.InstanceState.ACTIVE.value, instance0.state) self.assertEqual(1, instance0.vcpus) self.assertEqual(1, instance0.disk) self.assertEqual(512, instance0.memory)