Merge "Remove stubs from VolumeAttachmentsSample API sample test"

This commit is contained in:
Zuul
2019-09-23 19:43:34 +00:00
committed by Gerrit Code Review
33 changed files with 120 additions and 280 deletions

View File

@@ -1,6 +1,6 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "/dev/vdd"
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"device": "/dev/sdb"
}
}

View File

@@ -1,8 +1,8 @@
{
"volumeAttachment": {
"device": "/dev/vdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "0c92f3f6-c253-4c9b-bd43-e880a8d2eb0a",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "802db873-0373-4bdd-a433-d272a539ba18",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}

View File

@@ -1,16 +1,10 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "4d8c3732-a248-40ed-bebc-539a6ffd25c0",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804"
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "fd5bb1c4-de31-4071-8472-9410bc9155ec",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f805"
"volumeId": "227cc671-f30b-4488-96fd-7d0bf13648d8"
}
}

View File

@@ -1,6 +1,6 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"tag": "foo"
}
}
}

View File

@@ -1,8 +1,8 @@
{
"volumeAttachment": {
"device": "/dev/vdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "189dc814-35bc-428b-bba4-8d5ac0d1e087",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "69d19439-fa5f-4d6e-8b78-1868e7eb93a5",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}

View File

@@ -1,16 +1,10 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "4bcb3ae6-68aa-4e89-aac3-97b3dac2f714",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "4bcb3ae6-68aa-4e89-aac3-97b3dac2f714",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804"
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "1b92ff87-0116-40f5-9087-f4b907aeeaf1",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f805"
"volumeId": "227cc671-f30b-4488-96fd-7d0bf13648d8"
}
}

View File

@@ -1,8 +1,8 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "3dc0a2a6-e1bb-4643-8b6f-c146684d676d",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "9ad0352c-48ff-4290-9db8-3385a676f035",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}

View File

@@ -1,6 +1,6 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"tag": "foo"
}
}

View File

@@ -1,9 +1,9 @@
{
"volumeAttachment": {
"device": "/dev/vdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "521b9e49-4855-4a9a-8474-759a86c1b12d",
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "70f5c62a-972d-4a8b-abcf-e1375ca7f8c0",
"tag": "foo",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}

View File

@@ -1,18 +1,11 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051",
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "297155de-f7f2-4e87-82d0-ccc7d225d491",
"tag": "foo",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051",
"tag": null,
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804"
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f805"
"volumeId": "227cc671-f30b-4488-96fd-7d0bf13648d8"
}
}

View File

@@ -1,9 +1,9 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "d989feee-002d-40f6-b47d-f0dbee48bbc1",
"tag": "foo",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}

View File

@@ -1,7 +1,7 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"tag": "foo",
"delete_on_termination": true
}
}
}

View File

@@ -1,10 +1,10 @@
{
"volumeAttachment": {
"device": "/dev/vdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "521b9e49-4855-4a9a-8474-759a86c1b12d",
"delete_on_termination": true,
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "09b3b9d1-b8c5-48e1-841d-62c3ef967a88",
"tag": "foo",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"delete_on_termination": true
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}
}

View File

@@ -1,20 +1,12 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051",
"delete_on_termination": true,
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "09b3b9d1-b8c5-48e1-841d-62c3ef967a88",
"tag": "foo",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"delete_on_termination": false
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "fb6077e6-c10d-4e81-87fa-cb0f8c103051",
"tag": null,
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"delete_on_termination": false
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
]
}
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f805"
"volumeId": "227cc671-f30b-4488-96fd-7d0bf13648d8"
}
}
}

View File

@@ -1,10 +1,10 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"delete_on_termination": true,
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "2aad99d3-7aa4-41e9-b4e6-3f960b115d68",
"tag": "foo",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"delete_on_termination": false
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}
}

View File

@@ -1,8 +1,8 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"serverId": "2390fb4d-1693-45d7-b309-e29c4af16538",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"device": "/dev/sdb",
"id": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113",
"serverId": "1ad6852e-6605-4510-b639-d0bff864b49a",
"volumeId": "a07f71dc-8151-4e7d-a0cc-cd24a3f11113"
}
}

View File

@@ -1,16 +1,10 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "%(uuid)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804"
"volumeId": "%(volume_id)s"
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "%(volume_id)s"
"volumeId": "%(new_volume_id)s"
}
}

View File

@@ -1,16 +1,10 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "%(uuid)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804"
"volumeId": "%(volume_id)s"
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "%(volume_id)s"
"volumeId": "%(new_volume_id)s"
}
}

View File

@@ -1,8 +1,8 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"volumeId": "%(volume_id)s"
}
}

View File

@@ -1,18 +1,11 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"tag": "%(tag)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "%(uuid)s",
"tag": null,
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804"
"volumeId": "%(volume_id)s"
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "%(volume_id)s"
"volumeId": "%(new_volume_id)s"
}
}

View File

@@ -1,9 +1,9 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"tag": "%(tag)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"volumeId": "%(volume_id)s"
}
}

View File

@@ -1,20 +1,12 @@
{
"volumeAttachments": [
{
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"tag": "%(tag)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"delete_on_termination": false
},
{
"device": "/dev/sdc",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"serverId": "%(uuid)s",
"tag": null,
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f804",
"delete_on_termination": false
"volumeId": "%(volume_id)s",
"delete_on_termination": true
}
]
}

View File

@@ -1,5 +1,5 @@
{
"volumeAttachment": {
"volumeId": "%(volume_id)s"
"volumeId": "%(new_volume_id)s"
}
}

View File

@@ -1,10 +1,10 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"tag": "%(tag)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"delete_on_termination": false
"volumeId": "%(volume_id)s",
"delete_on_termination": true
}
}

View File

@@ -1,8 +1,8 @@
{
"volumeAttachment": {
"device": "/dev/sdd",
"id": "a26887c6-c47b-4654-abb5-dfadf7d3f803",
"device": "%(device)s",
"id": "%(volume_id)s",
"serverId": "%(uuid)s",
"volumeId": "a26887c6-c47b-4654-abb5-dfadf7d3f803"
"volumeId": "%(volume_id)s"
}
}

View File

@@ -15,16 +15,10 @@
import datetime
from oslo_utils.fixture import uuidsentinel as uuids
from nova import context
from nova import objects
from nova.tests import fixtures
from nova.tests.functional.api_sample_tests import api_sample_base
from nova.tests.functional.api_sample_tests import test_servers
from nova.tests.unit.api.openstack import fakes
from nova.tests.unit import fake_block_device
from nova.tests.unit import fake_instance
class SnapshotsSampleJsonTests(api_sample_base.ApiSampleTestBaseV21):
@@ -198,155 +192,57 @@ class VolumesSampleJsonTest(test_servers.ServersSampleBase):
class VolumeAttachmentsSample(test_servers.ServersSampleBase):
sample_dir = "os-volumes"
OLD_VOLUME_ID = 'a26887c6-c47b-4654-abb5-dfadf7d3f803'
NEW_VOLUME_ID = 'a26887c6-c47b-4654-abb5-dfadf7d3f805'
OLD_VOLUME_ID = fixtures.CinderFixture.SWAP_OLD_VOL
NEW_VOLUME_ID = fixtures.CinderFixture.SWAP_NEW_VOL
def _get_tags_per_volume(self):
"""Allows subclasses to override which volumes have tags
:returns: dict, keyed by volume ID, to tag value; if a volume ID is
not found in the resulting dict it is assumed to not have a tag
"""
return {}
# TODO(mriedem): There is really no good reason we should have to stub
# so much of this DB and compute service code when we can just use the
# CinderFixture. The stubs make these tests very brittle and potentially
# false regarding how the API/compute service interaction works.
def _stub_db_bdms_get_all_by_instance(self, server_id):
def fake_bdms_get_all_by_instance(context, instance_uuid,
use_slave=False):
bdms = [
fake_block_device.FakeDbBlockDeviceDict(
{'id': 1, 'volume_id': self.OLD_VOLUME_ID,
'instance_uuid': server_id, 'source_type': 'volume',
'destination_type': 'volume', 'device_name': '/dev/sdd'}),
fake_block_device.FakeDbBlockDeviceDict(
{'id': 2, 'volume_id': 'a26887c6-c47b-4654-abb5-dfadf7d3f804',
'instance_uuid': server_id, 'source_type': 'volume',
'destination_type': 'volume', 'device_name': '/dev/sdc'})
]
tags_per_volume = self._get_tags_per_volume()
for bdm_dict in bdms:
bdm_dict['tag'] = tags_per_volume.get(bdm_dict['volume_id'])
return bdms
self.stub_out('nova.db.api.block_device_mapping_get_all_by_instance',
fake_bdms_get_all_by_instance)
def fake_bdm_get_by_volume_and_instance(
self, ctxt, volume_id, instance_uuid, expected_attrs=None):
tag = self._get_tags_per_volume().get(self.OLD_VOLUME_ID)
return objects.BlockDeviceMapping._from_db_object(
ctxt, objects.BlockDeviceMapping(),
fake_block_device.FakeDbBlockDeviceDict(
{'id': 1, 'volume_id': self.OLD_VOLUME_ID,
'instance_uuid': instance_uuid, 'source_type': 'volume',
'destination_type': 'volume', 'device_name': '/dev/sdd',
'tag': tag, 'delete_on_termination': False})
)
def _stub_compute_api_get(self):
def fake_compute_api_get(self, context, instance_id,
expected_attrs=None,
cell_down_support=False):
return fake_instance.fake_instance_obj(
context, **{'uuid': instance_id})
self.stub_out('nova.compute.api.API.get', fake_compute_api_get)
def setUp(self):
super(VolumeAttachmentsSample, self).setUp()
self.useFixture(fixtures.CinderFixture(self))
self.server_id = self._post_server()
def _get_vol_attachment_subs(self, subs):
"""Allows subclasses to override/supplement request/response subs"""
return subs
def test_attach_volume_to_server(self):
self.stub_out('nova.volume.cinder.API.get', fakes.stub_volume_get)
self.stub_out('nova.volume.cinder.API.attachment_create',
lambda *a, **k: {'id': uuids.volume})
device_name = '/dev/vdd'
bdm = objects.BlockDeviceMapping()
bdm['device_name'] = device_name
bdm['delete_on_termination'] = True
self.stub_out(
'nova.compute.manager.ComputeManager.reserve_block_device_name',
lambda *a, **k: bdm)
# 2.79+ will save the delete_on_termination value on the BDM after
# reserve_block_device_name "creates" the BDM.
self.stub_out('nova.objects.BlockDeviceMapping.save',
lambda *a, **k: None)
self.stub_out(
'nova.compute.manager.ComputeManager.attach_volume',
lambda *a, **k: None)
volume = fakes.stub_volume_get(None, context.get_admin_context(),
'a26887c6-c47b-4654-abb5-dfadf7d3f803')
subs = {
'volume_id': volume['id'],
'device': device_name
'volume_id': self.OLD_VOLUME_ID,
'device': '/dev/sdb'
}
server_id = self._post_server()
subs = self._get_vol_attachment_subs(subs)
response = self._do_post('servers/%s/os-volume_attachments'
% server_id,
% self.server_id,
'attach-volume-to-server-req', subs)
self._verify_response('attach-volume-to-server-resp', subs,
response, 200)
return subs
def test_list_volume_attachments(self):
server_id = self._post_server()
self._stub_db_bdms_get_all_by_instance(server_id)
subs = self.test_attach_volume_to_server()
response = self._do_get('servers/%s/os-volume_attachments'
% server_id)
subs = self._get_vol_attachment_subs({})
% self.server_id)
self._verify_response('list-volume-attachments-resp', subs,
response, 200)
def test_volume_attachment_detail(self):
server_id = self._post_server()
self.stub_out(
'nova.objects.BlockDeviceMapping.get_by_volume_and_instance',
self.fake_bdm_get_by_volume_and_instance)
self._stub_compute_api_get()
subs = self.test_attach_volume_to_server()
response = self._do_get('servers/%s/os-volume_attachments/%s'
% (server_id, self.OLD_VOLUME_ID))
subs = self._get_vol_attachment_subs({})
% (self.server_id, subs['volume_id']))
self._verify_response('volume-attachment-detail-resp', subs,
response, 200)
def test_volume_attachment_delete(self):
server_id = self._post_server()
self.stub_out(
'nova.objects.BlockDeviceMapping.get_by_volume_and_instance',
self.fake_bdm_get_by_volume_and_instance)
self._stub_compute_api_get()
self.stub_out('nova.volume.cinder.API.get', fakes.stub_volume_get)
self.stub_out('nova.compute.api.API.detach_volume',
lambda *a, **k: None)
subs = self.test_attach_volume_to_server()
response = self._do_delete('servers/%s/os-volume_attachments/%s'
% (server_id, self.OLD_VOLUME_ID))
% (self.server_id, subs['volume_id']))
self.assertEqual(202, response.status_code)
self.assertEqual('', response.text)
def test_volume_attachment_update(self):
self.stub_out('nova.volume.cinder.API.get', fakes.stub_volume_get)
subs = {
'volume_id': self.NEW_VOLUME_ID
}
server_id = self._post_server()
self.stub_out(
'nova.objects.BlockDeviceMapping.get_by_volume_and_instance',
self.fake_bdm_get_by_volume_and_instance)
self._stub_compute_api_get()
self.stub_out('nova.volume.cinder.API.get', fakes.stub_volume_get)
self.stub_out('nova.compute.api.API.swap_volume',
lambda *a, **k: None)
subs = self.test_attach_volume_to_server()
subs['new_volume_id'] = self.NEW_VOLUME_ID
response = self._do_put('servers/%s/os-volume_attachments/%s'
% (server_id, self.OLD_VOLUME_ID),
% (self.server_id, subs['volume_id']),
'update-volume-req',
subs)
self.assertEqual(202, response.status_code)
@@ -360,7 +256,11 @@ class VolumeAttachmentsSampleV249(VolumeAttachmentsSample):
def setUp(self):
super(VolumeAttachmentsSampleV249, self).setUp()
self.useFixture(fixtures.CinderFixture(self))
# Stub out ComputeManager._delete_disk_metadata since the fake virt
# driver does not actually update the instance.device_metadata.devices
# list with the tagged bdm disk device metadata.
self.stub_out('nova.compute.manager.ComputeManager.'
'_delete_disk_metadata', lambda *a, **kw: None)
def _get_vol_attachment_subs(self, subs):
return dict(subs, tag='foo')
@@ -371,12 +271,6 @@ class VolumeAttachmentsSampleV270(VolumeAttachmentsSampleV249):
microversion = '2.70'
scenarios = [('v2_70', {'api_major_version': 'v2.1'})]
def _get_tags_per_volume(self):
return {
self.OLD_VOLUME_ID: 'foo',
self.NEW_VOLUME_ID: None
}
class VolumeAttachmentsSampleV279(VolumeAttachmentsSampleV270):
"""Microversion 2.79 adds the "delete_on_termination" parameter to the