Example #1
0
 def test_attach_in_used_volume_by_instance(self):
     """Test that attaching to an in-use volume fails."""
     # admin context
     ctx = context.RequestContext('admin', 'fake', True)
     # current status is available
     volume = db.volume_create(ctx, {'status': 'available', 'host': 'test',
                                     'provider_location': '', 'size': 1})
     connector = {'initiator': 'iqn.2012-07.org.fake:01'}
     # start service to handle rpc messages for attach requests
     svc = self.start_service('volume', host='test')
     self.volume_api.reserve_volume(ctx, volume)
     conn_info = self.volume_api.initialize_connection(ctx,
                                                       volume, connector)
     self.volume_api.attach(ctx, volume, fakes.get_fake_uuid(), None,
                            '/dev/vbd0', 'rw')
     self.assertEqual('rw', conn_info['data']['access_mode'])
     self.assertRaises(exception.InvalidVolume,
                       self.volume_api.attach,
                       ctx,
                       volume,
                       fakes.get_fake_uuid(),
                       None,
                       '/dev/vdb1',
                       'ro')
     # cleanup
     svc.stop()
Example #2
0
 def test_attach_attaching_volume_with_different_mode(self):
     """Test that attaching volume reserved for another mode fails."""
     # admin context
     ctx = context.RequestContext('admin', 'fake', True)
     # current status is available
     volume = db.volume_create(ctx, {'status': 'available', 'host': 'test',
                                     'provider_location': '', 'size': 1})
     # start service to handle rpc messages for attach requests
     svc = self.start_service('volume', host='test')
     values = {'status': 'attaching',
               'instance_uuid': fakes.get_fake_uuid()}
     db.volume_update(ctx, volume['id'], values)
     db.volume_admin_metadata_update(ctx, volume['id'],
                                     {"attached_mode": 'rw'}, False)
     mountpoint = '/dev/vbd'
     self.assertRaises(exception.InvalidVolume,
                       self.volume_api.attach,
                       ctx,
                       volume,
                       values['instance_uuid'],
                       None,
                       mountpoint,
                       'ro')
     # cleanup
     svc.stop()
Example #3
0
 def test_migrate_volume_generic_attached_volume(self, volume_get,
                                                 migrate_volume_completion,
                                                 nova_api):
     attached_host = 'some-host'
     fake_volume_id = fake.VOLUME_ID
     fake_db_new_volume = {'status': 'available', 'id': fake_volume_id}
     fake_new_volume = fake_volume.fake_db_volume(**fake_db_new_volume)
     host_obj = {'host': 'newhost', 'capabilities': {}}
     fake_uuid = fakes.get_fake_uuid()
     update_server_volume = nova_api.return_value.update_server_volume
     volume_get.return_value = fake_new_volume
     volume = tests_utils.create_volume(self.context,
                                        size=1,
                                        host=CONF.host)
     volume_attach = tests_utils.attach_volume(self.context, volume['id'],
                                               fake_uuid, attached_host,
                                               '/dev/vda')
     self.assertIsNotNone(volume_attach['volume_attachment'][0]['id'])
     self.assertEqual(
         fake_uuid, volume_attach['volume_attachment'][0]['instance_uuid'])
     self.assertEqual('in-use', volume_attach['status'])
     self.volume._migrate_volume_generic(self.context, volume, host_obj,
                                         None)
     self.assertFalse(migrate_volume_completion.called)
     update_server_volume.assert_called_with(self.context, fake_uuid,
                                             volume['id'], fake_volume_id)
Example #4
0
 def test_attach_in_used_volume_by_instance(self):
     """Test that attaching to an in-use volume fails."""
     # admin context
     ctx = context.RequestContext("admin", "fake", True)
     # current status is available
     volume = self._create_volume(ctx, {"provider_location": "", "size": 1})
     connector = {"initiator": "iqn.2012-07.org.fake:01"}
     # start service to handle rpc messages for attach requests
     svc = self.start_service("volume", host="test")
     self.addCleanup(svc.stop)
     self.volume_api.reserve_volume(ctx, volume)
     conn_info = self.volume_api.initialize_connection(ctx, volume, connector)
     self.volume_api.attach(ctx, volume, fakes.get_fake_uuid(), None, "/dev/vbd0", "rw")
     self.assertEqual("rw", conn_info["data"]["access_mode"])
     self.assertRaises(
         exception.InvalidVolume, self.volume_api.attach, ctx, volume, fakes.get_fake_uuid(), None, "/dev/vdb1", "ro"
     )
Example #5
0
 def test_attach_in_used_volume_by_instance(self):
     """Test that attaching to an in-use volume fails."""
     # current status is available
     volume = self._create_volume(self.ctx, {
         'provider_location': '',
         'size': 1
     })
     connector = {'initiator': 'iqn.2012-07.org.fake:01'}
     self.volume_api.reserve_volume(self.ctx, volume)
     conn_info = self.volume_api.initialize_connection(
         self.ctx, volume, connector)
     self.volume_api.attach(self.ctx, volume, fakes.get_fake_uuid(), None,
                            '/dev/vbd0', 'rw')
     self.assertEqual('rw', conn_info['data']['access_mode'])
     self.assertRaises(exception.InvalidVolume,
                       self.volume_api.attach, self.ctx, volume,
                       fakes.get_fake_uuid(), None, '/dev/vdb1', 'ro')
 def test_attach_in_used_volume_by_instance(self):
     """Test that attaching to an in-use volume fails."""
     # current status is available
     volume = self._create_volume(self.ctx, {'provider_location': '',
                                             'size': 1})
     connector = {'initiator': 'iqn.2012-07.org.fake:01'}
     self.volume_api.reserve_volume(self.ctx, volume)
     conn_info = self.volume_api.initialize_connection(self.ctx,
                                                       volume, connector)
     self.volume_api.attach(self.ctx, volume, fakes.get_fake_uuid(), None,
                            '/dev/vbd0', 'rw')
     self.assertEqual('rw', conn_info['data']['access_mode'])
     self.assertRaises(exception.InvalidVolume,
                       self.volume_api.attach,
                       self.ctx,
                       volume,
                       fakes.get_fake_uuid(),
                       None,
                       '/dev/vdb1',
                       'ro')
Example #7
0
    def test_init_host_clears_uploads_in_use_volume(self, init_host_mock):
        """init_host will clean an in-use volume stuck in uploading."""
        volume = tests_utils.create_volume(self.context, status='uploading',
                                           size=0, host=CONF.host)

        db.worker_create(self.context, resource_type='Volume',
                         resource_id=volume.id, status=volume.status,
                         service_id=self.service_id)

        fake_uuid = fakes.get_fake_uuid()
        tests_utils.attach_volume(self.context, volume.id, fake_uuid,
                                  'fake_host', '/dev/vda')
        self.volume.init_host(service_id=mock.sentinel.service_id)
        init_host_mock.assert_called_once_with(
            service_id=mock.sentinel.service_id, added_to_cluster=None)
        volume.refresh()
        self.assertEqual("in-use", volume.status)
        self._assert_workers_are_removed()
Example #8
0
    def test_init_host_clears_uploads_in_use_volume(self, init_host_mock):
        """init_host will clean an in-use volume stuck in uploading."""
        volume = tests_utils.create_volume(self.context, status='uploading',
                                           size=0, host=CONF.host)

        db.worker_create(self.context, resource_type='Volume',
                         resource_id=volume.id, status=volume.status,
                         service_id=self.service_id)

        fake_uuid = fakes.get_fake_uuid()
        tests_utils.attach_volume(self.context, volume.id, fake_uuid,
                                  'fake_host', '/dev/vda')
        self.volume.init_host(service_id=mock.sentinel.service_id)
        init_host_mock.assert_called_once_with(
            service_id=mock.sentinel.service_id, added_to_cluster=None)
        volume.refresh()
        self.assertEqual("in-use", volume.status)
        self._assert_workers_are_removed()
Example #9
0
    def test_attach_attaching_volume_with_different_mode(self):
        """Test that attaching volume reserved for another mode fails."""
        # current status is available
        volume = self._create_volume(self.ctx, {
            'provider_location': '',
            'size': 1
        })

        values = {
            'status': 'attaching',
            'instance_uuid': fakes.get_fake_uuid()
        }
        db.volume_update(self.ctx, volume['id'], values)
        db.volume_admin_metadata_update(self.ctx, volume['id'],
                                        {"attached_mode": 'rw'}, False)
        mountpoint = '/dev/vbd'
        self.assertRaises(exception.InvalidVolume, self.volume_api.attach,
                          self.ctx, volume, values['instance_uuid'], None,
                          mountpoint, 'ro')
Example #10
0
    def test_attach_attaching_volume_with_different_mode(self):
        """Test that attaching volume reserved for another mode fails."""
        # current status is available
        volume = self._create_volume(self.ctx, {'provider_location': '',
                                                'size': 1})

        values = {'status': 'attaching',
                  'instance_uuid': fakes.get_fake_uuid()}
        db.volume_update(self.ctx, volume['id'], values)
        db.volume_admin_metadata_update(self.ctx, volume['id'],
                                        {"attached_mode": 'rw'}, False)
        mountpoint = '/dev/vbd'
        self.assertRaises(exception.InvalidVolume,
                          self.volume_api.attach,
                          self.ctx,
                          volume,
                          values['instance_uuid'],
                          None,
                          mountpoint,
                          'ro')
Example #11
0
 def test_attach_attaching_volume_with_different_mode(self):
     """Test that attaching volume reserved for another mode fails."""
     # admin context
     ctx = context.RequestContext("admin", "fake", True)
     # current status is available
     volume = self._create_volume(ctx, {"provider_location": "", "size": 1})
     # start service to handle rpc messages for attach requests
     svc = self.start_service("volume", host="test")
     self.addCleanup(svc.stop)
     values = {"status": "attaching", "instance_uuid": fakes.get_fake_uuid()}
     db.volume_update(ctx, volume["id"], values)
     db.volume_admin_metadata_update(ctx, volume["id"], {"attached_mode": "rw"}, False)
     mountpoint = "/dev/vbd"
     self.assertRaises(
         exception.InvalidVolume,
         self.volume_api.attach,
         ctx,
         volume,
         values["instance_uuid"],
         None,
         mountpoint,
         "ro",
     )
 def test_migrate_volume_generic_attached_volume(self, volume_get,
                                                 migrate_volume_completion,
                                                 nova_api):
     attached_host = 'some-host'
     fake_volume_id = fake.VOLUME_ID
     fake_db_new_volume = {'status': 'available', 'id': fake_volume_id}
     fake_new_volume = fake_volume.fake_db_volume(**fake_db_new_volume)
     host_obj = {'host': 'newhost', 'capabilities': {}}
     fake_uuid = fakes.get_fake_uuid()
     update_server_volume = nova_api.return_value.update_server_volume
     volume_get.return_value = fake_new_volume
     volume = tests_utils.create_volume(self.context, size=1,
                                        host=CONF.host)
     volume_attach = tests_utils.attach_volume(
         self.context, volume['id'], fake_uuid, attached_host, '/dev/vda')
     self.assertIsNotNone(volume_attach['volume_attachment'][0]['id'])
     self.assertEqual(
         fake_uuid, volume_attach['volume_attachment'][0]['instance_uuid'])
     self.assertEqual('in-use', volume_attach['status'])
     self.volume._migrate_volume_generic(self.context, volume,
                                         host_obj, None)
     self.assertFalse(migrate_volume_completion.called)
     update_server_volume.assert_called_with(self.context, fake_uuid,
                                             volume['id'], fake_volume_id)