def test_cast_create_volume(self, mock_time):

        props = {}
        spec = {'volume_id': None,
                'source_volid': None,
                'snapshot_id': None,
                'image_id': None,
                'source_replicaid': None,
                'consistencygroup_id': None,
                'cgsnapshot_id': None}

        # Fake objects assert specs
        task = create_volume.VolumeCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeVolumeAPI(spec, self),
            fake_volume_api.FakeDb())

        task._cast_create_volume(self.ctxt, spec, props)

        spec = {'volume_id': 1,
                'source_volid': 2,
                'snapshot_id': 3,
                'image_id': 4,
                'source_replicaid': 5,
                'consistencygroup_id': 5,
                'cgsnapshot_id': None}

        # Fake objects assert specs
        task = create_volume.VolumeCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeVolumeAPI(spec, self),
            fake_volume_api.FakeDb())

        task._cast_create_volume(self.ctxt, spec, props)
    def test_cast_create_volume(self, consistencygroup_get_by_id, mock_time,
                                mock_extract_host, volume_get_by_id):
        mock_time.side_effect = self.time_inc
        volume = fake_volume.fake_volume_obj(self.ctxt)
        volume_get_by_id.return_value = volume
        props = {}
        cg_obj = (fake_consistencygroup.fake_consistencyobject_obj(
            self.ctxt, consistencygroup_id=1, host='host@backend#pool'))
        consistencygroup_get_by_id.return_value = cg_obj
        spec = {
            'volume_id': None,
            'volume': None,
            'source_volid': None,
            'snapshot_id': None,
            'image_id': None,
            'source_replicaid': None,
            'consistencygroup_id': None,
            'cgsnapshot_id': None,
            'group_id': None,
        }

        # Fake objects assert specs
        task = create_volume.VolumeCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeVolumeAPI(spec, self),
            fake_volume_api.FakeDb())

        task._cast_create_volume(self.ctxt, spec, props)

        spec = {
            'volume_id': volume.id,
            'volume': volume,
            'source_volid': 2,
            'snapshot_id': 3,
            'image_id': 4,
            'source_replicaid': 5,
            'consistencygroup_id': 5,
            'cgsnapshot_id': None,
            'group_id': None,
        }

        # Fake objects assert specs
        task = create_volume.VolumeCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeVolumeAPI(spec, self),
            fake_volume_api.FakeDb())

        task._cast_create_volume(self.ctxt, spec, props)
        consistencygroup_get_by_id.assert_called_once_with(self.ctxt, 5)
        mock_extract_host.assert_called_once_with('host@backend#pool')
Example #3
0
    def test_cast_create_volume(self, consistencygroup_get_by_id, mock_time,
                                volume_get_by_id):
        volume = fake_volume.fake_volume_obj(self.ctxt)
        volume_get_by_id.return_value = volume

        props = {}
        consistencygroup_obj = \
            fake_consistencygroup.fake_consistencyobject_obj(
                self.ctxt, consistencygroup_id=1, host=None)
        consistencygroup_get_by_id.return_value = consistencygroup_obj
        spec = {
            'volume_id': None,
            'source_volid': None,
            'snapshot_id': None,
            'image_id': None,
            'source_replicaid': None,
            'consistencygroup_id': None,
            'cgsnapshot_id': None
        }

        # Fake objects assert specs
        task = create_volume.VolumeCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeVolumeAPI(spec, self),
            fake_volume_api.FakeDb())

        task._cast_create_volume(self.ctxt, spec, props)

        spec = {
            'volume_id': 1,
            'source_volid': 2,
            'snapshot_id': 3,
            'image_id': 4,
            'source_replicaid': 5,
            'consistencygroup_id': 5,
            'cgsnapshot_id': None
        }

        # Fake objects assert specs
        task = create_volume.VolumeCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeVolumeAPI(spec, self),
            fake_volume_api.FakeDb())

        task._cast_create_volume(self.ctxt, spec, props)
        consistencygroup_get_by_id.assert_called_once_with(self.ctxt, 5)
    def test_cast_manage_existing(self):

        volume = mock.MagicMock(return_value=None)
        spec = {
            'name': 'name',
            'description': 'description',
            'host': 'host',
            'ref': 'ref',
            'volume_type': 'volume_type',
            'metadata': 'metadata',
            'availability_zone': 'availability_zone',
            'bootable': 'bootable'
        }

        # Fake objects assert specs
        task = manage_existing.ManageCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeDb())

        create_what = spec.copy()
        create_what.update({'volume': volume})
        task.execute(self.ctxt, **create_what)

        volume = mock.MagicMock(return_value={'id': 1})

        spec = {
            'name': 'name',
            'description': 'description',
            'host': 'host',
            'ref': 'ref',
            'volume_type': 'volume_type',
            'metadata': 'metadata',
            'availability_zone': 'availability_zone',
            'bootable': 'bootable'
        }

        # Fake objects assert specs
        task = manage_existing.ManageCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeDb())

        create_what = spec.copy()
        create_what.update({'volume': volume})
        task.execute(self.ctxt, **create_what)
    def test_revert_manage_existing_with_ft_failure(self):
        fake_db = fake_volume_api.FakeDb()
        fake_db.volume_destroy = mock.MagicMock()

        mock_failure = mock.Mock(spec=ft.Failure)
        task = manage_existing.EntryCreateTask(fake_db)
        task.revert(self.ctxt, mock_failure)

        # Check DB entry task is not destroyed
        fake_db.volume_destroy.assert_not_called()
    def test_revert_manage_existing(self):
        fake_db = fake_volume_api.FakeDb()
        fake_db.volume_destroy = mock.MagicMock()

        self.ctxt.elevated = mock.Mock()

        task = manage_existing.EntryCreateTask(fake_db)
        task.revert(self.ctxt, {'volume_id': fakes.VOLUME_ID})

        # Check DB entry task is destroyed
        fake_db.volume_destroy.assert_called_once_with(
            self.ctxt.elevated.return_value, fakes.VOLUME_ID)
    def test_cast_manage_existing_revert(self):
        volume = fake_volume.fake_volume_obj(self.ctxt)
        volume.save = mock.MagicMock()

        # Fake objects assert specs
        task = manage_existing.ManageCastTask(
            fake_volume_api.FakeSchedulerRpcAPI({}, self),
            fake_volume_api.FakeDb())
        flow_failures = [mock.MagicMock()]
        task.revert(self.ctxt, {}, flow_failures, volume)

        # Check that volume status is updated and saved
        self.assertEqual('error_managing', volume.status)
        volume.save.assert_called_once()
    def test_create_db_entry_task_with_multiattach(self):

        fake_volume_type = fake_volume.fake_volume_type_obj(
            self.ctxt, extra_specs={'multiattach': '<is> True'})

        spec = {
            'name': 'name',
            'description': 'description',
            'host': 'host',
            'ref': 'ref',
            'volume_type': fake_volume_type,
            'metadata': {},
            'availability_zone': 'availability_zone',
            'bootable': 'bootable',
            'volume_type_id': fake_volume_type.id,
            'cluster_name': 'fake_cluster'
        }
        task = manage_existing.EntryCreateTask(fake_volume_api.FakeDb())

        result = task.execute(self.ctxt, **spec)
        self.assertTrue(result['volume_properties']['multiattach'])
    def test_cast_manage_existing(self):
        volume = fake_volume.fake_volume_obj(self.ctxt)

        spec = {
            'name': 'name',
            'description': 'description',
            'host': 'host',
            'ref': 'ref',
            'volume_type': 'volume_type',
            'metadata': 'metadata',
            'availability_zone': 'availability_zone',
            'bootable': 'bootable',
            'volume_id': volume.id,
        }

        # Fake objects assert specs
        task = manage_existing.ManageCastTask(
            fake_volume_api.FakeSchedulerRpcAPI(spec, self),
            fake_volume_api.FakeDb())

        create_what = spec.copy()
        create_what.update({'volume': volume})
        create_what.pop('volume_id')
        task.execute(self.ctxt, **create_what)