Files
gce-api/gceapi/tests/unit/api/fake_cinder_client.py
Andrey Pavlov 75905790e5 update gce api to current OpenStack
- add devstack plugin
- update openstack common
- move unit tests to unit folder
- update infrastructural files

Change-Id: Id72006f70110dbd1762f42b582470ac5f3439f2a
2015-09-03 17:16:30 +03:00

308 lines
9.8 KiB
Python

# Copyright 2014
# The Cloudscaling Group, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import copy
from cinderclient import exceptions as exc
from gceapi.tests.unit.api import fake_request
from gceapi.tests.unit.api import utils
FAKE_DISKS = [utils.FakeObject({
"status": "available",
"volume_type": None,
"display_name": "fake-disk-1",
"availability_zone": "nova",
"created_at": "2013-08-14T12:35:22.000000",
"display_description": "fake disk from snapshot",
"metadata": {},
"snapshot_id": "991cda9c-28bd-420f-8432-f5159def85d6",
"id": "e922ebbb-2938-4a12-869f-cbc4e26c6600",
"size": 2,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
}), utils.FakeObject({
"status": "available",
"volume_type": None,
"bootable": u"true",
"volume_image_metadata": {
"image_id": "60ff30c2-64b6-4a97-9c17-322eebc8bd60",
"image_name": "fake-image-1"
},
"display_name": "fake-disk-2",
"availability_zone": "nova",
"created_at": "2013-08-14T12:19:35.000000",
"display_description": "",
"metadata": {},
"snapshot_id": None,
"id": "64ebe1d9-757f-4074-88d0-2ac790be909d",
"size": 1,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
}), utils.FakeObject({
"status": "available",
"volume_type": None,
"display_name": "fake-disk-3",
"availability_zone": "nova",
"created_at": "2013-08-14T11:57:44.000000",
"display_description": "full description of disk",
"metadata": {},
"snapshot_id": None,
"id": "fc0d5c01-dc3b-450d-aaed-de028bb832b1",
"size": 3,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
}), utils.FakeObject({
"status": "available",
"volume_type": None,
"display_name": "disk-to-delete",
"availability_zone": "nova",
"created_at": "2013-08-14T12:10:02.000000",
"display_description": "full description of disk",
"metadata": {},
"snapshot_id": None,
"id": "a0786ec1-d838-4ad6-a497-87ec0b79161b",
"size": 3,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
}), utils.FakeObject({
"status": "in-use",
"instance_uuid": "6472359b-d46b-4629-83a9-d2ec8d99468c",
"bootable": u"true",
"volume_image_metadata": {
"image_id": "60ff30c2-64b6-4a97-9c17-322eebc8bd60",
"image_name": "fake-image-1"},
"display_name": "i1",
"availability_zone": "nova",
"created_at": "2013-08-14T18:55:57.000000",
"display_description": "Persistent boot disk created from "
"http://127.0.0.1:8787/compute/v1beta15/projects/admin"
"/global/images/fake-image-1.",
"volume_type": "None",
"metadata": {},
"snapshot_id": None,
"id": "ab8829ad-eec1-44a2-8068-d7f00c53ee90",
"size": 1,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [{
"device": "vdc",
"server_id": "6472359b-d46b-4629-83a9-d2ec8d99468c",
"volume_id": "ab8829ad-eec1-44a2-8068-d7f00c53ee90",
"host_name": None,
"id": "7f862e44-5f41-4a1f-b2f8-dbd2f6bef86f"
}],
})]
FAKE_SNAPSHOTS = [utils.FakeObject({
"status": "available",
"display_name": "fake-snapshot",
"created_at": "2013-08-14T12:32:28.000000",
"display_description": "full description of snapshot 1",
"volume_size": 2,
"volume_id": "fc0d5c01-dc3b-450d-aaed-de028bb832b1",
"progress": "100%",
"project_id": "f0dcd67240544bc6903766a025c6e2b9",
"id": "991cda9c-28bd-420f-8432-f5159def85d6",
"size": 2,
})]
FAKE_NEW_DISKS = {
"new-disk": {
"status": "available",
"volume_type": None,
"availability_zone": "nova",
"created_at": "2013-08-14T15:00:22.000000",
"display_description": "",
"metadata": {},
"snapshot_id": None,
"id": "8af36778-84db-475e-b3c9-da2cc260df4a",
"size": 1,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
},
"new-image-disk": {
"status": "available",
"volume_type": None,
"bootable": u"true",
"volume_image_metadata": {
"image_id": "a2459075-d96c-40d5-893e-577ff92e721c",
"image_name": "fake-image-2"
},
"availability_zone": "nova",
"created_at": "2013-08-14T15:56:00.000000",
"display_description": "disk created with image",
"metadata": {},
"snapshot_id": None,
"id": "f35151b8-7b81-4e76-b2ab-ecdc14f949d2",
"size": 1,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
},
"new-sn-disk": {
"status": "creating",
"volume_type": "None",
"availability_zone": "nova",
"created_at": "2013-08-14T16:43:59.000000",
"display_description": "disk created from snapshot",
"metadata": {},
"snapshot_id": "991cda9c-28bd-420f-8432-f5159def85d6",
"id": "ae2de9eb-32f2-4db7-8ef0-23f0fd0ebf63",
"size": 1,
"os-vol-tenant-attr:tenant_id": fake_request.PROJECT_ID,
"os-vol-mig-status-attr:name_id": None,
"os-vol-mig-status-attr:migstat": None,
"os-vol-host-attr:host": "grizzly",
"attachments": [],
},
}
FAKE_QUOTAS = utils.FakeObject({
"gigabytes": {
"limit": 1000,
"reserved": 0,
"in_use": 2
},
"snapshots": {
"limit": 10,
"reserved": 0,
"in_use": 1
},
"human_id": None,
"volumes": {
"limit": 10,
"reserved": 0,
"in_use": 1
},
"HUMAN_ID": False
})
class FakeVolumes(object):
def list(self, detailed=True, search_opts=None):
result = FAKE_DISKS
if search_opts:
if "display_name" in search_opts:
result = [d for d in result
if d.display_name == search_opts["display_name"]]
return result
def get(self, disk):
disk_id = utils.get_id(disk)
for disk in FAKE_DISKS:
if disk.id == disk_id:
return disk
raise exc.NotFound(exc.NotFound.http_status)
def delete(self, volume):
global FAKE_DISKS
volume_id = utils.get_id(volume)
FAKE_DISKS = [v for v in FAKE_DISKS if v.id != volume_id]
def create(self, size, snapshot_id=None, source_volid=None,
display_name=None, display_description=None,
volume_type=None, user_id=None,
project_id=None, availability_zone=None,
metadata=None, imageRef=None):
volume = copy.deepcopy(FAKE_NEW_DISKS[display_name])
volume["display_name"] = display_name
volume["availability_zone"] = availability_zone
volume["display_description"] = display_description
volume["size"] = size
if project_id:
volume["os-vol-tenant-attr:tenant_id"] = project_id
if snapshot_id is not None:
volume["snapshot_id"] = snapshot_id
if imageRef is not None:
volume["volume_image_metadata"] = {
"image_id": imageRef,
"image_name": "fake-image-2"
}
FAKE_DISKS.append(utils.FakeObject(volume))
return utils.FakeObject(volume)
class FakeVolumeSnapshots(object):
def get(self, snapshot):
snapshot_id = utils.get_id(snapshot)
for snapshot in FAKE_SNAPSHOTS:
if snapshot.id == snapshot_id:
return snapshot
raise exc.NotFound(exc.NotFound.http_status)
def list(self, detailed=True, search_opts=None):
result = FAKE_SNAPSHOTS
if search_opts:
if "display_name" in search_opts:
result = [d for d in result
if d.display_name == search_opts["display_name"]]
return result
def delete(self, snapshot):
pass
def create(self, volume_id, force=False,
display_name=None, display_description=None):
return FAKE_SNAPSHOTS[0]
class FakeQuotas(object):
def get(self, tenant_id, **kwargs):
if "usage" not in kwargs:
raise exc.BadRequest("There is no arg 'usage' in request")
return FAKE_QUOTAS
class FakeCinderClient(object):
def __init__(self, version, *args, **kwargs):
pass
@property
def client(self):
return self
@property
def volumes(self):
return FakeVolumes()
@property
def volume_snapshots(self):
return FakeVolumeSnapshots()
@property
def quotas(self):
return FakeQuotas()