def test_restore_backup_to_undersized_volume(self): backup_size = 10 backup_id = self._create_backup(status='available', size=backup_size) # need to create the volume referenced below first volume_size = 5 volume_id = self._create_volume(status='available', size=volume_size) body = {"restore": {"volume_id": volume_id, }} req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict['badRequest']['code'], 400) self.assertEqual(res_dict['badRequest']['message'], 'Invalid volume: volume size %d is too ' 'small to restore backup of size %d.' % (volume_size, backup_size)) db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def test_show_backup(self): volume_id = self._create_volume(size=5) backup_id = self._create_backup(volume_id) LOG.debug('Created backup with id %s' % backup_id) req = webob.Request.blank('/v2/fake/backups/%s' % backup_id) req.method = 'GET' req.headers['Content-Type'] = 'application/json' res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 200) self.assertEqual(res_dict['backup']['availability_zone'], 'az1') self.assertEqual(res_dict['backup']['container'], 'volumebackups') self.assertEqual(res_dict['backup']['description'], 'this is a test backup') self.assertEqual(res_dict['backup']['name'], 'test_backup') self.assertEqual(res_dict['backup']['id'], backup_id) self.assertEqual(res_dict['backup']['object_count'], 0) self.assertEqual(res_dict['backup']['size'], 0) self.assertEqual(res_dict['backup']['status'], 'creating') self.assertEqual(res_dict['backup']['volume_id'], volume_id) db.backup_destroy(context.get_admin_context(), backup_id) db.volume_destroy(context.get_admin_context(), volume_id)
def _force_delete_backup_util(self, test_status, mock_check_support, mock_service_get_all): mock_service_get_all.return_value = [{ 'availability_zone': "az1", 'host': 'testhost', 'disabled': 0, 'updated_at': timeutils.utcnow() }] # admin context mock_check_support.return_value = True # current status is dependent on argument: test_status. id = test_backups.BackupsAPITestCase._create_backup(status=test_status) req = webob.Request.blank( '/v2/%s/backups/%s/action' % (fake.PROJECT_ID, id)) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = jsonutils.dump_as_bytes({'os-force_delete': {}}) req.environ['cinder.context'] = self.ctx res = req.get_response(app()) self.assertEqual(202, res.status_int) self.assertEqual( 'deleting', test_backups.BackupsAPITestCase._get_backup_attrib(id, 'status')) db.backup_destroy(self.ctx, id)
def test_delete_backup_error(self): backup_id = self._create_backup(status="error") req = webob.Request.blank("/v2/fake/backups/%s" % backup_id) req.method = "DELETE" req.headers["Content-Type"] = "application/json" res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 202) self.assertEqual(self._get_backup_attrib(backup_id, "status"), "deleting") db.backup_destroy(context.get_admin_context(), backup_id)
def test_delete_backup_error(self): backup_id = self._create_backup(status='error') req = webob.Request.blank('/v2/fake/backups/%s' % backup_id) req.method = 'DELETE' req.headers['Content-Type'] = 'application/json' res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 202) self.assertEqual(self._get_backup_attrib(backup_id, 'status'), 'deleting') db.backup_destroy(context.get_admin_context(), backup_id)
def test_delete_backup_with_InvalidBackup(self): backup_id = self._create_backup() req = webob.Request.blank("/v2/fake/backups/%s" % backup_id) req.method = "DELETE" req.headers["Content-Type"] = "application/json" res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict["badRequest"]["code"], 400) self.assertEqual( res_dict["badRequest"]["message"], "Invalid backup: Backup status must be " "available or error" ) db.backup_destroy(context.get_admin_context(), backup_id)
def test_delete_backup_with_InvalidBackup(self): backup_id = self._create_backup() req = webob.Request.blank('/v2/fake/backups/%s' % backup_id) req.method = 'DELETE' req.headers['Content-Type'] = 'application/json' res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict['badRequest']['code'], 400) self.assertEqual(res_dict['badRequest']['message'], 'Invalid backup: Backup status must be ' 'available or error') db.backup_destroy(context.get_admin_context(), backup_id)
def _force_delete_backup_util(self, test_status, mock_check_support): # admin context ctx = context.RequestContext("admin", "fake", True) mock_check_support.return_value = True # current status is dependent on argument: test_status. id = test_backups.BackupsAPITestCase._create_backup(status=test_status) req = webob.Request.blank("/v2/fake/backups/%s/action" % id) req.method = "POST" req.headers["Content-Type"] = "application/json" req.body = jsonutils.dump_as_bytes({"os-force_delete": {}}) req.environ["cinder.context"] = ctx res = req.get_response(app()) self.assertEqual(202, res.status_int) self.assertEqual("deleting", test_backups.BackupsAPITestCase._get_backup_attrib(id, "status")) db.backup_destroy(context.get_admin_context(), id)
def test_restore_backup_with_VolumeNotFound(self): backup_id = self._create_backup(status="available") body = {"restore": {"volume_id": "9999"}} req = webob.Request.blank("/v2/fake/backups/%s/restore" % backup_id) req.method = "POST" req.headers["Content-Type"] = "application/json" req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 404) self.assertEqual(res_dict["itemNotFound"]["code"], 404) self.assertEqual(res_dict["itemNotFound"]["message"], "Volume 9999 could not be found.") db.backup_destroy(context.get_admin_context(), backup_id)
def test_backup_get_all_by_host_with_deleted(self): """Test deleted backups don't show up in backup_get_all_by_project. Unless context.read_deleted is 'yes'""" backups = db.backup_get_all_by_host(self.ctxt, 'testhost') self.assertEqual(len(backups), 0) backup_id_keep = self._create_backup_db_entry() backup_id = self._create_backup_db_entry() db.backup_destroy(self.ctxt, backup_id) backups = db.backup_get_all_by_host(self.ctxt, 'testhost') self.assertEqual(len(backups), 1) self.assertEqual(backups[0].id, backup_id_keep) ctxt_read_deleted = context.get_admin_context('yes') backups = db.backup_get_all_by_host(ctxt_read_deleted, 'testhost') self.assertEqual(len(backups), 2)
def test_show_backup_xml_content_type(self): volume_id = self._create_volume(size=5) backup_id = self._create_backup(volume_id) req = webob.Request.blank('/v2/fake/backups/%s' % backup_id) req.method = 'GET' req.headers['Content-Type'] = 'application/xml' req.headers['Accept'] = 'application/xml' res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 200) dom = minidom.parseString(res.body) backup = dom.getElementsByTagName('backup') name = backup.item(0).getAttribute('name') container_name = backup.item(0).getAttribute('container') self.assertEquals(container_name.strip(), "volumebackups") self.assertEquals(name.strip(), "test_backup") db.backup_destroy(context.get_admin_context(), backup_id) db.volume_destroy(context.get_admin_context(), volume_id)
def test_show_backup_xml_content_type(self): volume_id = utils.create_volume(self.context, size=5, status="creating")["id"] backup_id = self._create_backup(volume_id) req = webob.Request.blank("/v2/fake/backups/%s" % backup_id) req.method = "GET" req.headers["Content-Type"] = "application/xml" req.headers["Accept"] = "application/xml" res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 200) dom = minidom.parseString(res.body) backup = dom.getElementsByTagName("backup") name = backup.item(0).getAttribute("name") container_name = backup.item(0).getAttribute("container") self.assertEqual(container_name.strip(), "volumebackups") self.assertEqual(name.strip(), "test_backup") db.backup_destroy(context.get_admin_context(), backup_id) db.volume_destroy(context.get_admin_context(), volume_id)
def test_backup_get_all_by_project_with_deleted(self): """Test deleted backups don't show up in backup_get_all_by_project. Unless context.read_deleted is 'yes'. """ backups = db.backup_get_all_by_project(self.ctxt, 'fake') self.assertEqual(0, len(backups)) backup_id_keep = self._create_backup_db_entry() backup_id = self._create_backup_db_entry() db.backup_destroy(self.ctxt, backup_id) backups = db.backup_get_all_by_project(self.ctxt, 'fake') self.assertEqual(1, len(backups)) self.assertEqual(backup_id_keep, backups[0].id) ctxt_read_deleted = context.get_admin_context('yes') backups = db.backup_get_all_by_project(ctxt_read_deleted, 'fake') self.assertEqual(2, len(backups))
def _force_delete_backup_util(self, test_status, mock_check_support): # admin context ctx = context.RequestContext('admin', 'fake', True) mock_check_support.return_value = True # current status is dependent on argument: test_status. id = test_backups.BackupsAPITestCase._create_backup(status=test_status) req = webob.Request.blank('/v2/fake/backups/%s/action' % id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = jsonutils.dumps({'os-force_delete': {}}) req.environ['cinder.context'] = ctx res = req.get_response(app()) self.assertEqual(202, res.status_int) self.assertEqual('deleting', test_backups.BackupsAPITestCase. _get_backup_attrib(id, 'status')) db.backup_destroy(context.get_admin_context(), id)
def test_restore_backup_with_VolumeNotFound(self): backup_id = self._create_backup(status='available') body = {"restore": {"volume_id": "9999", }} req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 404) self.assertEqual(res_dict['itemNotFound']['code'], 404) self.assertEqual(res_dict['itemNotFound']['message'], 'Volume 9999 could not be found.') db.backup_destroy(context.get_admin_context(), backup_id)
def test_backup_get_all_by_project_with_deleted(self): """Test deleted backups don't show up in backup_get_all_by_project. Unless context.read_deleted is 'yes'. """ backups = db.backup_get_all_by_project(self.ctxt, "fake") self.assertEqual(len(backups), 0) backup_keep = self._create_backup_db_entry() backup = self._create_backup_db_entry() db.backup_destroy(self.ctxt, backup.id) backups = db.backup_get_all_by_project(self.ctxt, "fake") self.assertEqual(len(backups), 1) self.assertEqual(backups[0].id, backup_keep.id) ctxt_read_deleted = context.get_admin_context("yes") backups = db.backup_get_all_by_project(ctxt_read_deleted, "fake") self.assertEqual(len(backups), 2)
def _force_delete_backup_util(self, test_status, mock_check_support, mock_service_get_all): mock_service_get_all.return_value = [ {"availability_zone": "az1", "host": "testhost", "disabled": 0, "updated_at": timeutils.utcnow()} ] # admin context mock_check_support.return_value = True # current status is dependent on argument: test_status. id = test_backups.BackupsAPITestCase._create_backup(status=test_status) req = webob.Request.blank("/v2/%s/backups/%s/action" % (fake.PROJECT_ID, id)) req.method = "POST" req.headers["Content-Type"] = "application/json" req.body = jsonutils.dump_as_bytes({"os-force_delete": {}}) req.environ["cinder.context"] = self.ctx res = req.get_response(app()) self.assertEqual(202, res.status_int) self.assertEqual("deleting", test_backups.BackupsAPITestCase._get_backup_attrib(id, "status")) db.backup_destroy(self.ctx, id)
def test_restore_backup_volume_id_specified_xml(self): backup_id = self._create_backup(status="available") volume_id = utils.create_volume(self.context, size=2)["id"] req = webob.Request.blank("/v2/fake/backups/%s/restore" % backup_id) req.body = '<restore volume_id="%s"/>' % volume_id req.method = "POST" req.headers["Content-Type"] = "application/xml" req.headers["Accept"] = "application/xml" res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 202) dom = minidom.parseString(res.body) restore = dom.getElementsByTagName("restore") self.assertEqual(restore.item(0).getAttribute("backup_id"), backup_id) self.assertEqual(restore.item(0).getAttribute("volume_id"), volume_id) db.backup_destroy(context.get_admin_context(), backup_id) db.volume_destroy(context.get_admin_context(), volume_id)
def test_restore_backup_with_no_body(self): # omit body from the request backup_id = self._create_backup(status='available') req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.body = json.dumps(None) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.headers['Accept'] = 'application/json' res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 422) self.assertEqual(res_dict['computeFault']['code'], 422) self.assertEqual(res_dict['computeFault']['message'], 'Unable to process the contained instructions') db.backup_destroy(context.get_admin_context(), backup_id)
def test_restore_backup_with_InvalidBackup(self): backup_id = self._create_backup(status="restoring") # need to create the volume referenced below first volume_id = utils.create_volume(self.context, size=5)["id"] body = {"restore": {"volume_id": volume_id}} req = webob.Request.blank("/v2/fake/backups/%s/restore" % backup_id) req.method = "POST" req.headers["Content-Type"] = "application/json" req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict["badRequest"]["code"], 400) self.assertEqual(res_dict["badRequest"]["message"], "Invalid backup: Backup status must be available") db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def test_restore_backup_to_oversized_volume(self): backup_id = self._create_backup(status="available", size=10) # need to create the volume referenced below first volume_id = utils.create_volume(self.context, size=15)["id"] body = {"restore": {"volume_id": volume_id}} req = webob.Request.blank("/v2/fake/backups/%s/restore" % backup_id) req.method = "POST" req.headers["Content-Type"] = "application/json" req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 202) self.assertEqual(res_dict["restore"]["backup_id"], backup_id) self.assertEqual(res_dict["restore"]["volume_id"], volume_id) db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def test_restore_backup_with_no_body(self): # omit body from the request backup_id = self._create_backup(status="available") req = webob.Request.blank("/v2/fake/backups/%s/restore" % backup_id) req.body = json.dumps(None) req.method = "POST" req.headers["Content-Type"] = "application/json" req.headers["Accept"] = "application/json" res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict["badRequest"]["code"], 400) self.assertEqual( res_dict["badRequest"]["message"], "The server could not comply with the request since" " it is either malformed or otherwise incorrect.", ) db.backup_destroy(context.get_admin_context(), backup_id)
def test_restore_backup_volume_id_specified_xml(self): backup_id = self._create_backup(status='available') volume_id = utils.create_volume(self.context, size=2)['id'] req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.body = '<restore volume_id="%s"/>' % volume_id req.method = 'POST' req.headers['Content-Type'] = 'application/xml' req.headers['Accept'] = 'application/xml' res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 202) dom = minidom.parseString(res.body) restore = dom.getElementsByTagName('restore') self.assertEqual(restore.item(0).getAttribute('backup_id'), backup_id) self.assertEqual(restore.item(0).getAttribute('volume_id'), volume_id) db.backup_destroy(context.get_admin_context(), backup_id) db.volume_destroy(context.get_admin_context(), volume_id)
def test_restore_backup_with_no_body(self): # omit body from the request backup_id = self._create_backup(status='available') req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.body = json.dumps(None) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.headers['Accept'] = 'application/json' res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict['badRequest']['code'], 400) self.assertEqual(res_dict['badRequest']['message'], 'The server could not comply with the request since' ' it is either malformed or otherwise incorrect.') db.backup_destroy(context.get_admin_context(), backup_id)
def test_restore_backup_with_InvalidBackup(self): backup_id = self._create_backup(status='restoring') # need to create the volume referenced below first volume_id = utils.create_volume(self.context, size=5)['id'] body = {"restore": {"volume_id": volume_id, }} req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict['badRequest']['code'], 400) self.assertEqual(res_dict['badRequest']['message'], 'Invalid backup: Backup status must be available') db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def test_restore_backup_to_oversized_volume(self): backup_id = self._create_backup(status='available', size=10) # need to create the volume referenced below first volume_size = 15 volume_id = self._create_volume(status='available', size=volume_size) body = {"restore": {"volume_id": volume_id, }} req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 202) self.assertEqual(res_dict['restore']['backup_id'], backup_id) self.assertEqual(res_dict['restore']['volume_id'], volume_id) db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def test_list_backups_xml(self): backup_id1 = self._create_backup() backup_id2 = self._create_backup() backup_id3 = self._create_backup() req = webob.Request.blank('/v2/fake/backups') req.method = 'GET' req.headers['Content-Type'] = 'application/xml' req.headers['Accept'] = 'application/xml' res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 200) dom = minidom.parseString(res.body) backup_list = dom.getElementsByTagName('backup') self.assertEqual(backup_list.item(0).attributes.length, 2) self.assertEqual(backup_list.item(0).getAttribute('id'), backup_id1) self.assertEqual(backup_list.item(1).attributes.length, 2) self.assertEqual(backup_list.item(1).getAttribute('id'), backup_id2) self.assertEqual(backup_list.item(2).attributes.length, 2) self.assertEqual(backup_list.item(2).getAttribute('id'), backup_id3) db.backup_destroy(context.get_admin_context(), backup_id3) db.backup_destroy(context.get_admin_context(), backup_id2) db.backup_destroy(context.get_admin_context(), backup_id1)
def test_list_backups_json(self): backup_id1 = self._create_backup() backup_id2 = self._create_backup() backup_id3 = self._create_backup() req = webob.Request.blank('/v2/fake/backups') req.method = 'GET' req.headers['Content-Type'] = 'application/json' res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 200) self.assertEqual(len(res_dict['backups'][0]), 3) self.assertEqual(res_dict['backups'][0]['id'], backup_id1) self.assertEqual(res_dict['backups'][0]['name'], 'test_backup') self.assertEqual(len(res_dict['backups'][1]), 3) self.assertEqual(res_dict['backups'][1]['id'], backup_id2) self.assertEqual(res_dict['backups'][1]['name'], 'test_backup') self.assertEqual(len(res_dict['backups'][2]), 3) self.assertEqual(res_dict['backups'][2]['id'], backup_id3) self.assertEqual(res_dict['backups'][2]['name'], 'test_backup') db.backup_destroy(context.get_admin_context(), backup_id3) db.backup_destroy(context.get_admin_context(), backup_id2) db.backup_destroy(context.get_admin_context(), backup_id1)
def test_list_backups_json(self): backup_id1 = self._create_backup() backup_id2 = self._create_backup() backup_id3 = self._create_backup() req = webob.Request.blank("/v2/fake/backups") req.method = "GET" req.headers["Content-Type"] = "application/json" res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 200) self.assertEqual(len(res_dict["backups"][0]), 3) self.assertEqual(res_dict["backups"][0]["id"], backup_id1) self.assertEqual(res_dict["backups"][0]["name"], "test_backup") self.assertEqual(len(res_dict["backups"][1]), 3) self.assertEqual(res_dict["backups"][1]["id"], backup_id2) self.assertEqual(res_dict["backups"][1]["name"], "test_backup") self.assertEqual(len(res_dict["backups"][2]), 3) self.assertEqual(res_dict["backups"][2]["id"], backup_id3) self.assertEqual(res_dict["backups"][2]["name"], "test_backup") db.backup_destroy(context.get_admin_context(), backup_id3) db.backup_destroy(context.get_admin_context(), backup_id2) db.backup_destroy(context.get_admin_context(), backup_id1)
def test_restore_backup_with_InvalidBackup(self): backup_id = self._create_backup(status='restoring') # need to create the volume referenced below first volume_size = 5 volume_id = self._create_volume(status='available', size=volume_size) body = {"restore": {"volume_id": volume_id, }} req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 400) self.assertEqual(res_dict['badRequest']['code'], 400) self.assertEqual(res_dict['badRequest']['message'], 'Invalid backup: Backup status must be available') db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def _force_delete_backup_util(self, test_status, mock_check_support, mock_service_get_all): mock_service_get_all.return_value = [ {'availability_zone': "az1", 'host': 'testhost', 'disabled': 0, 'updated_at': timeutils.utcnow()}] # admin context mock_check_support.return_value = True # current status is dependent on argument: test_status. id = test_backups.BackupsAPITestCase._create_backup(status=test_status) req = webob.Request.blank('/v2/%s/backups/%s/action' % ( fake.PROJECT_ID, id)) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = jsonutils.dump_as_bytes({'os-force_delete': {}}) req.environ['cinder.context'] = self.ctx res = req.get_response(app()) self.assertEqual(202, res.status_int) self.assertEqual( 'deleting', test_backups.BackupsAPITestCase._get_backup_attrib(id, 'status')) db.backup_destroy(self.ctx, id)
def test_list_backups_detail_json(self): backup_id1 = self._create_backup() backup_id2 = self._create_backup() backup_id3 = self._create_backup() req = webob.Request.blank('/v2/fake/backups/detail') req.method = 'GET' req.headers['Content-Type'] = 'application/json' req.headers['Accept'] = 'application/json' res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 200) self.assertEqual(len(res_dict['backups'][0]), 12) self.assertEqual(res_dict['backups'][0]['availability_zone'], 'az1') self.assertEqual(res_dict['backups'][0]['container'], 'volumebackups') self.assertEqual(res_dict['backups'][0]['description'], 'this is a test backup') self.assertEqual(res_dict['backups'][0]['name'], 'test_backup') self.assertEqual(res_dict['backups'][0]['id'], backup_id1) self.assertEqual(res_dict['backups'][0]['object_count'], 0) self.assertEqual(res_dict['backups'][0]['size'], 0) self.assertEqual(res_dict['backups'][0]['status'], 'creating') self.assertEqual(res_dict['backups'][0]['volume_id'], '1') self.assertEqual(len(res_dict['backups'][1]), 12) self.assertEqual(res_dict['backups'][1]['availability_zone'], 'az1') self.assertEqual(res_dict['backups'][1]['container'], 'volumebackups') self.assertEqual(res_dict['backups'][1]['description'], 'this is a test backup') self.assertEqual(res_dict['backups'][1]['name'], 'test_backup') self.assertEqual(res_dict['backups'][1]['id'], backup_id2) self.assertEqual(res_dict['backups'][1]['object_count'], 0) self.assertEqual(res_dict['backups'][1]['size'], 0) self.assertEqual(res_dict['backups'][1]['status'], 'creating') self.assertEqual(res_dict['backups'][1]['volume_id'], '1') self.assertEqual(len(res_dict['backups'][2]), 12) self.assertEqual(res_dict['backups'][2]['availability_zone'], 'az1') self.assertEqual(res_dict['backups'][2]['container'], 'volumebackups') self.assertEqual(res_dict['backups'][2]['description'], 'this is a test backup') self.assertEqual(res_dict['backups'][2]['name'], 'test_backup') self.assertEqual(res_dict['backups'][2]['id'], backup_id3) self.assertEqual(res_dict['backups'][2]['object_count'], 0) self.assertEqual(res_dict['backups'][2]['size'], 0) self.assertEqual(res_dict['backups'][2]['status'], 'creating') self.assertEqual(res_dict['backups'][2]['volume_id'], '1') db.backup_destroy(context.get_admin_context(), backup_id3) db.backup_destroy(context.get_admin_context(), backup_id2) db.backup_destroy(context.get_admin_context(), backup_id1)
def test_restore_backup_to_oversized_volume(self): backup_id = self._create_backup(status='available', size=10) # need to create the volume referenced below first volume_id = utils.create_volume(self.context, size=15)['id'] body = { "restore": { "volume_id": volume_id, } } req = webob.Request.blank('/v2/fake/backups/%s/restore' % backup_id) req.method = 'POST' req.headers['Content-Type'] = 'application/json' req.body = json.dumps(body) res = req.get_response(fakes.wsgi_app()) res_dict = json.loads(res.body) self.assertEqual(res.status_int, 202) self.assertEqual(res_dict['restore']['backup_id'], backup_id) self.assertEqual(res_dict['restore']['volume_id'], volume_id) db.volume_destroy(context.get_admin_context(), volume_id) db.backup_destroy(context.get_admin_context(), backup_id)
def destroy(self): with self.obj_as_admin(): db.backup_destroy(self._context, self.id)
def destroy(self): with self.obj_as_admin(): updated_values = db.backup_destroy(self._context, self.id) self.update(updated_values) self.obj_reset_changes(updated_values.keys())
def test_backup_destroy(self): for backup in self.created: db.backup_destroy(self.ctxt, backup['id']) self.assertFalse(db.backup_get_all(self.ctxt))
def test_list_backups_detail_xml(self): backup_id1 = self._create_backup() backup_id2 = self._create_backup() backup_id3 = self._create_backup() req = webob.Request.blank('/v2/fake/backups/detail') req.method = 'GET' req.headers['Content-Type'] = 'application/xml' req.headers['Accept'] = 'application/xml' res = req.get_response(fakes.wsgi_app()) self.assertEqual(res.status_int, 200) dom = minidom.parseString(res.body) backup_detail = dom.getElementsByTagName('backup') self.assertEqual(backup_detail.item(0).attributes.length, 11) self.assertEqual( backup_detail.item(0).getAttribute('availability_zone'), 'az1') self.assertEqual( backup_detail.item(0).getAttribute('container'), 'volumebackups') self.assertEqual( backup_detail.item(0).getAttribute('description'), 'this is a test backup') self.assertEqual( backup_detail.item(0).getAttribute('name'), 'test_backup') self.assertEqual(backup_detail.item(0).getAttribute('id'), backup_id1) self.assertEqual( int(backup_detail.item(0).getAttribute('object_count')), 0) self.assertEqual(int(backup_detail.item(0).getAttribute('size')), 0) self.assertEqual( backup_detail.item(0).getAttribute('status'), 'creating') self.assertEqual(int(backup_detail.item(0).getAttribute('volume_id')), 1) self.assertEqual(backup_detail.item(1).attributes.length, 11) self.assertEqual( backup_detail.item(1).getAttribute('availability_zone'), 'az1') self.assertEqual( backup_detail.item(1).getAttribute('container'), 'volumebackups') self.assertEqual( backup_detail.item(1).getAttribute('description'), 'this is a test backup') self.assertEqual( backup_detail.item(1).getAttribute('name'), 'test_backup') self.assertEqual(backup_detail.item(1).getAttribute('id'), backup_id2) self.assertEqual( int(backup_detail.item(1).getAttribute('object_count')), 0) self.assertEqual(int(backup_detail.item(1).getAttribute('size')), 0) self.assertEqual( backup_detail.item(1).getAttribute('status'), 'creating') self.assertEqual(int(backup_detail.item(1).getAttribute('volume_id')), 1) self.assertEqual(backup_detail.item(2).attributes.length, 11) self.assertEqual( backup_detail.item(2).getAttribute('availability_zone'), 'az1') self.assertEqual( backup_detail.item(2).getAttribute('container'), 'volumebackups') self.assertEqual( backup_detail.item(2).getAttribute('description'), 'this is a test backup') self.assertEqual( backup_detail.item(2).getAttribute('name'), 'test_backup') self.assertEqual(backup_detail.item(2).getAttribute('id'), backup_id3) self.assertEqual( int(backup_detail.item(2).getAttribute('object_count')), 0) self.assertEqual(int(backup_detail.item(2).getAttribute('size')), 0) self.assertEqual( backup_detail.item(2).getAttribute('status'), 'creating') self.assertEqual(int(backup_detail.item(2).getAttribute('volume_id')), 1) db.backup_destroy(context.get_admin_context(), backup_id3) db.backup_destroy(context.get_admin_context(), backup_id2) db.backup_destroy(context.get_admin_context(), backup_id1)