Exemplo n.º 1
0
    def test_cinder_error_volume_unmapped(self, m_cinder_helper):
        """test creating error volume unmapped"""

        m_get_storage_pool_by_name = mock.Mock(
            side_effect=exception.PoolNotFound(name="TEST"))
        m_cinder_helper.return_value = mock.Mock(
            get_storage_pool_by_name=m_get_storage_pool_by_name)

        storage_model = self.fake_cdmc.generate_scenario_1()
        self.fake_cdmc.cluster_data_model = storage_model
        handler = cnotification.VolumeCreateEnd(self.fake_cdmc)

        message = self.load_message('scenario_1_error-volume-create.json')
        handler.info(
            ctxt=self.context,
            publisher_id=message['publisher_id'],
            event_type=message['event_type'],
            payload=message['payload'],
            metadata=self.FAKE_METADATA,
        )

        # we do not call get_storage_pool_by_name
        m_get_storage_pool_by_name.assert_not_called()
        # check that volume00 was added to the model
        volume_00_name = 'VOLUME_00'
        volume_00 = storage_model.get_volume_by_uuid(volume_00_name)
        self.assertEqual(volume_00_name, volume_00.uuid)
Exemplo n.º 2
0
 def notification_endpoints(self):
     return [
         cnotification.CapacityNotificationEndpoint(self.fake_cdmc),
         cnotification.VolumeCreateEnd(self.fake_cdmc),
         cnotification.VolumeUpdateEnd(self.fake_cdmc),
         cnotification.VolumeDeleteEnd(self.fake_cdmc),
         cnotification.VolumeAttachEnd(self.fake_cdmc),
         cnotification.VolumeDetachEnd(self.fake_cdmc),
         cnotification.VolumeResizeEnd(self.fake_cdmc),
     ]
Exemplo n.º 3
0
    def notification_endpoints(self):
        """Associated notification endpoints

        :return: Associated notification endpoints
        :rtype: List of :py:class:`~.EventsNotificationEndpoint` instances
        """
        return [
            cinder.CapacityNotificationEndpoint(self),
            cinder.VolumeCreateEnd(self),
            cinder.VolumeDeleteEnd(self),
            cinder.VolumeUpdateEnd(self),
            cinder.VolumeAttachEnd(self),
            cinder.VolumeDetachEnd(self),
            cinder.VolumeResizeEnd(self)
        ]
Exemplo n.º 4
0
    def test_cinder_bootable_volume_create(self, m_cinder_helper):
        """test creating bootable volume in existing pool and node"""

        # create storage_pool_by_name mock
        return_pool_mock = mock.Mock()
        return_pool_mock.configure_mock(name='host_0@backend_0#pool_0',
                                        total_volumes='3',
                                        total_capacity_gb='500',
                                        free_capacity_gb='380',
                                        provisioned_capacity_gb='120',
                                        allocated_capacity_gb='120')

        m_get_storage_pool_by_name = mock.Mock(
            side_effect=lambda name: return_pool_mock)

        m_cinder_helper.return_value = mock.Mock(
            get_storage_pool_by_name=m_get_storage_pool_by_name)

        storage_model = self.fake_cdmc.generate_scenario_1()
        self.fake_cdmc.cluster_data_model = storage_model
        handler = cnotification.VolumeCreateEnd(self.fake_cdmc)

        message = self.load_message('scenario_1_bootable-volume-create.json')
        handler.info(
            ctxt=self.context,
            publisher_id=message['publisher_id'],
            event_type=message['event_type'],
            payload=message['payload'],
            metadata=self.FAKE_METADATA,
        )
        # check that volume00 was added to the model
        volume_00_name = 'VOLUME_00'
        volume_00 = storage_model.get_volume_by_uuid(volume_00_name)
        self.assertEqual(volume_00_name, volume_00.uuid)
        self.assertTrue(volume_00.bootable)
        # check that capacity was updated
        pool_0_name = 'host_0@backend_0#pool_0'
        m_get_storage_pool_by_name.assert_called_once_with(pool_0_name)
        pool_0 = storage_model.get_pool_by_pool_name(pool_0_name)
        self.assertEqual(pool_0.name, pool_0_name)
        self.assertEqual(3, pool_0.total_volumes)
        self.assertEqual(380, pool_0.free_capacity_gb)
        self.assertEqual(120, pool_0.allocated_capacity_gb)
        self.assertEqual(120, pool_0.provisioned_capacity_gb)
Exemplo n.º 5
0
    def test_cinder_volume_create_pool_notfound(self, m_cinder_helper):
        """check creating volume in not existing pool and node"""

        # get_storage_pool_by_name mock
        return_pool_mock = mock.Mock()
        return_pool_mock.configure_mock(name='host_2@backend_2#pool_0',
                                        total_volumes='1',
                                        total_capacity_gb='500',
                                        free_capacity_gb='460',
                                        provisioned_capacity_gb='40',
                                        allocated_capacity_gb='40')

        m_get_storage_pool_by_name = mock.Mock(
            side_effect=lambda name: return_pool_mock)

        # create storage_node_by_name mock
        return_node_mock = mock.Mock()
        return_node_mock.configure_mock(host='host_2@backend_2',
                                        zone='nova',
                                        state='up',
                                        status='enabled')

        m_get_storage_node_by_name = mock.Mock(
            side_effect=lambda name: return_node_mock)

        m_get_volume_type_by_backendname = mock.Mock(
            side_effect=lambda name: mock.Mock('backend_2'))

        m_cinder_helper.return_value = mock.Mock(
            get_storage_pool_by_name=m_get_storage_pool_by_name,
            get_storage_node_by_name=m_get_storage_node_by_name,
            get_volume_type_by_backendname=m_get_volume_type_by_backendname)

        storage_model = self.fake_cdmc.generate_scenario_1()
        self.fake_cdmc.cluster_data_model = storage_model
        handler = cnotification.VolumeCreateEnd(self.fake_cdmc)

        message = self.load_message(
            'scenario_1_volume-create_pool_notfound.json')
        handler.info(
            ctxt=self.context,
            publisher_id=message['publisher_id'],
            event_type=message['event_type'],
            payload=message['payload'],
            metadata=self.FAKE_METADATA,
        )
        # check that volume00 was added to the model
        volume_00_name = 'VOLUME_00'
        volume_00 = storage_model.get_volume_by_uuid(volume_00_name)
        self.assertEqual(volume_00_name, volume_00.uuid)
        # check that capacity was updated
        node_2_name = 'host_2@backend_2'
        pool_0_name = node_2_name + '#pool_0'
        pool_0 = storage_model.get_pool_by_pool_name(pool_0_name)
        self.assertEqual(pool_0.name, pool_0_name)
        self.assertEqual(1, pool_0.total_volumes)
        self.assertEqual(460, pool_0.free_capacity_gb)
        self.assertEqual(40, pool_0.allocated_capacity_gb)
        self.assertEqual(40, pool_0.provisioned_capacity_gb)
        # check that node was added
        m_get_storage_node_by_name.assert_called_once_with(node_2_name)