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)
Esempio n. 6
0
    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()
Esempio n. 12
0
    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)