Updating unittests to reflect changes in blockstorage version sync
Change-Id: I947f9a5e774bc65235127da7a4307db75e87a0b9
This commit is contained in:
parent
f5c083394a
commit
0462512f63
@ -13,121 +13,80 @@ 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 unittest
|
||||
from mock import MagicMock, Mock
|
||||
from requests import Response
|
||||
|
||||
from cloudcafe.blockstorage.volumes_api.common.behaviors import \
|
||||
VolumesAPIBehaviorException
|
||||
from cloudcafe.blockstorage.volumes_api.v1.behaviors import \
|
||||
VolumesAPI_Behaviors, VolumesAPIBehaviorException
|
||||
VolumesAPI_Behaviors
|
||||
from cloudcafe.blockstorage.volumes_api.v1.models.responses import\
|
||||
VolumeResponse, VolumeSnapshotResponse
|
||||
from cloudcafe.blockstorage.volumes_api.v1.client import VolumesClient
|
||||
from cloudcafe.blockstorage.volumes_api.v1.config import VolumesAPIConfig
|
||||
from cloudcafe.blockstorage.volumes_api.common.config import VolumesAPIConfig
|
||||
|
||||
|
||||
class wait_for_snapshot_status(unittest.TestCase):
|
||||
|
||||
class defaults:
|
||||
snapshot_name = 'mock_snapshot'
|
||||
snapshot_id = '111111'
|
||||
snapshot_name = 'mock_snapshot'
|
||||
expected_status = 'available'
|
||||
timeout = 10
|
||||
poll_rate = 2
|
||||
|
||||
def test_wait_for_snapshot_status_good_response_code(self):
|
||||
|
||||
def get_mocks(self):
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
|
||||
snapshot_model = Mock(spec=VolumeSnapshotResponse)
|
||||
snapshot_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = snapshot_model
|
||||
|
||||
client.get_snapshot_info = MagicMock(
|
||||
return_value=response)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
response.ok = True
|
||||
snapshot_model.status = self.defaults.expected_status
|
||||
response.entity = snapshot_model
|
||||
client.get_snapshot_info = MagicMock(return_value=response)
|
||||
return (client, config, snapshot_model, response)
|
||||
|
||||
def test_good_response_code_manual_poll_rate(self):
|
||||
client, config, snapshot_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
resp = behavior.wait_for_snapshot_status(
|
||||
self.defaults.snapshot_id, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
self.assertIsNone(resp)
|
||||
|
||||
def test_wait_for_snapshot_status_good_response_code_config_wait_period(
|
||||
self):
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
|
||||
snapshot_model = Mock(spec=VolumeSnapshotResponse)
|
||||
snapshot_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = snapshot_model
|
||||
|
||||
client.get_snapshot_info = MagicMock(
|
||||
return_value=response)
|
||||
def test_good_response_code_config_wait_period(self):
|
||||
client, config, snapshot_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
resp = behavior.wait_for_snapshot_status(
|
||||
self.defaults.snapshot_name, self.defaults.expected_status,
|
||||
self.defaults.timeout)
|
||||
|
||||
self.assertIsNone(resp)
|
||||
|
||||
def test_wait_for_snapshot_status_good_response_code_bad_status(self):
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
|
||||
snapshot_model = Mock(spec=VolumeSnapshotResponse)
|
||||
snapshot_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = snapshot_model
|
||||
|
||||
client.get_snapshot_info = MagicMock(
|
||||
return_value=response)
|
||||
def test_good_response_code_bad_status(self):
|
||||
client, config, snapshot_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
resp = behavior.wait_for_snapshot_status(
|
||||
self.defaults.snapshot_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
self.assertIsNone(resp)
|
||||
|
||||
def test_wait_for_snapshot_status_bad_response_code(self):
|
||||
def test_bad_response_code(self):
|
||||
client, config, snapshot_model, response = self.get_mocks()
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
|
||||
snapshot_model = Mock(spec=VolumeSnapshotResponse)
|
||||
snapshot_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = False
|
||||
response.entity = snapshot_model
|
||||
response.status_code = '401'
|
||||
|
||||
client.get_snapshot_info = MagicMock(
|
||||
return_value=response)
|
||||
|
||||
client.get_snapshot_info = MagicMock(return_value=response)
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
@ -135,24 +94,12 @@ class wait_for_snapshot_status(unittest.TestCase):
|
||||
self.defaults.snapshot_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
def test_wait_for_snapshot_status_good_response_code_empty_entity(self):
|
||||
def test_good_response_code_empty_entity(self):
|
||||
client, config, snapshot_model, response = self.get_mocks()
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
|
||||
snapshot_model = Mock(spec=VolumeSnapshotResponse)
|
||||
snapshot_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = None
|
||||
response.status_code = '200'
|
||||
|
||||
client.get_snapshot_info = MagicMock(
|
||||
return_value=response)
|
||||
|
||||
client.get_snapshot_info = MagicMock(return_value=response)
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
@ -160,31 +107,20 @@ class wait_for_snapshot_status(unittest.TestCase):
|
||||
self.defaults.snapshot_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
def test_wait_for_snapshot_status_good_response_and_entity_bad_status(
|
||||
self):
|
||||
def test_good_response_good_entity_bad_status(self):
|
||||
client, config, snapshot_model, response = self.get_mocks()
|
||||
|
||||
recieved_status = 'error'
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.snapshot_status_poll_frequency = 1
|
||||
|
||||
snapshot_model = Mock(spec=VolumeSnapshotResponse)
|
||||
poll_rate = 1
|
||||
snapshot_model.status = recieved_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = snapshot_model
|
||||
|
||||
client.get_snapshot_info = MagicMock(
|
||||
return_value=response)
|
||||
|
||||
client.get_snapshot_info = MagicMock(return_value=response)
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.wait_for_snapshot_status(
|
||||
self.defaults.snapshot_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
self.defaults.timeout, poll_rate=poll_rate)
|
||||
|
||||
|
||||
class wait_for_volume_status(unittest.TestCase):
|
||||
@ -195,24 +131,31 @@ class wait_for_volume_status(unittest.TestCase):
|
||||
expected_status = 'available'
|
||||
timeout = 10
|
||||
poll_rate = 2
|
||||
timeout = 10
|
||||
|
||||
def test_wait_for_volume_status_good_response_code(self):
|
||||
|
||||
def get_mocks(self):
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_status_poll_frequency = 1
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
|
||||
config.volume_status_poll_frequency = 1
|
||||
volume_model.status = self.defaults.expected_status
|
||||
response.ok = True
|
||||
response.entity = volume_model
|
||||
client.get_volume_info = MagicMock(return_value=response)
|
||||
|
||||
client.get_volume_info = MagicMock(
|
||||
return_value=response)
|
||||
return (client, config, volume_model, response)
|
||||
|
||||
def test_get_volume_status(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
status = behavior.get_volume_status(self.defaults.volume_id)
|
||||
self.assertEqual(status, self.defaults.expected_status)
|
||||
|
||||
def test_good_response_code(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
@ -222,134 +165,69 @@ class wait_for_volume_status(unittest.TestCase):
|
||||
|
||||
self.assertIsNone(resp)
|
||||
|
||||
def test_wait_for_volume_status_good_response_code_configured_poll_rate(
|
||||
self):
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_status_poll_frequency = 1
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = volume_model
|
||||
|
||||
client.get_volume_info = MagicMock(
|
||||
return_value=response)
|
||||
def test_good_response_code_configured_poll_period(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
resp = behavior.wait_for_volume_status(
|
||||
self.defaults.volume_name, self.defaults.expected_status,
|
||||
self.defaults.timeout)
|
||||
|
||||
self.assertIsNone(resp)
|
||||
|
||||
def test_wait_for_volume_status_good_response_code_bad_status(self):
|
||||
volume_name = 'mock_volume'
|
||||
expected_status = 'available'
|
||||
timeout = 10
|
||||
poll_rate = 2
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_status_poll_frequency = 1
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.status = expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = volume_model
|
||||
|
||||
client.get_volume_info = MagicMock(
|
||||
return_value=response)
|
||||
def test_good_response_code_bad_status(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
resp = behavior.wait_for_volume_status(
|
||||
volume_name, expected_status, timeout, poll_rate=poll_rate)
|
||||
self.defaults.volume_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
self.assertIsNone(resp)
|
||||
|
||||
def test_wait_for_volume_status_bad_response_code(self):
|
||||
def test_bad_response_code(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_status_poll_frequency = 1
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = False
|
||||
response.entity = volume_model
|
||||
response.status_code = '401'
|
||||
|
||||
client.get_volume_info = MagicMock(
|
||||
return_value=response)
|
||||
client.get_volume_info = MagicMock(return_value=response)
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.wait_for_volume_status(
|
||||
self.defaults.volume_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
def test_wait_for_volume_status_good_response_code_empty_entity(self):
|
||||
def test_good_response_code_empty_entity(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_status_poll_frequency = 1
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.status = self.defaults.expected_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = None
|
||||
response.status_code = '200'
|
||||
|
||||
client.get_volume_info = MagicMock(
|
||||
return_value=response)
|
||||
client.get_volume_info = MagicMock(return_value=response)
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.wait_for_volume_status(
|
||||
self.defaults.volume_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
|
||||
def test_wait_for_volume_status_good_response_and_entity_bad_status(self):
|
||||
def test_good_response_and_entity_bad_status(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
recieved_status = 'error'
|
||||
timeout = 2
|
||||
poll_rate = 1
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_status_poll_frequency = 1
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.status = recieved_status
|
||||
|
||||
response = Mock(spec=Response)
|
||||
response.ok = True
|
||||
response.entity = volume_model
|
||||
|
||||
client.get_volume_info = MagicMock(
|
||||
return_value=response)
|
||||
client.get_volume_info = MagicMock(return_value=response)
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.wait_for_volume_status(
|
||||
self.defaults.volume_name, self.defaults.expected_status,
|
||||
self.defaults.timeout, poll_rate=self.defaults.poll_rate)
|
||||
timeout, poll_rate=poll_rate)
|
||||
|
||||
|
||||
class create_available_volume(unittest.TestCase):
|
||||
@ -359,81 +237,48 @@ class create_available_volume(unittest.TestCase):
|
||||
volume_type = "mock_type"
|
||||
size = 1
|
||||
|
||||
def test_create_availabe_volume_happy_path(self):
|
||||
|
||||
def get_mocks(self):
|
||||
client = Mock(spec=VolumesClient)
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.id_ = "mock"
|
||||
volume_create_response = Mock(spec=Response)
|
||||
volume_model.id_ = "mock"
|
||||
volume_create_response.entity = volume_model
|
||||
volume_create_response.ok = True
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_create_timeout = 5
|
||||
config.serialize_format = "json"
|
||||
config.deserialize_format = "json"
|
||||
config.max_volume_size = 1024
|
||||
config.min_volume_size = 1
|
||||
config.volume_status_poll_frequency = 5
|
||||
config.volume_create_min_timeout = 1
|
||||
config.volume_create_max_timeout = 10
|
||||
config.volume_create_wait_per_gigabyte = 1
|
||||
config.volume_create_base_timeout = 0
|
||||
|
||||
return (client, config, volume_model, volume_create_response)
|
||||
|
||||
def test_happy_path(self):
|
||||
client, config, volume_model, volume_create_response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(return_value=None)
|
||||
behavior.get_volume_status = MagicMock(return_value='available')
|
||||
|
||||
volume_entity = behavior.create_available_volume(
|
||||
self.defaults.display_name, self.defaults.size,
|
||||
self.defaults.volume_type)
|
||||
|
||||
self.assertIsInstance(volume_entity, VolumeResponse)
|
||||
|
||||
def test_create_available_volume_failure_response_no_model(self):
|
||||
def test_timeout_failure(self):
|
||||
client, config, volume_model, volume_create_response = self.get_mocks()
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.id_ = "mock"
|
||||
volume_create_response = Mock(spec=Response)
|
||||
volume_create_response.entity = None
|
||||
volume_create_response.ok = False
|
||||
volume_create_response.status_code = 500
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_create_timeout = 5
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(return_value=None)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.create_available_volume(
|
||||
self.defaults.display_name, self.defaults.size,
|
||||
self.defaults.volume_type)
|
||||
|
||||
def test_create_available_volume_failure_response_with_model(self):
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.id_ = "mock"
|
||||
volume_create_response = Mock(spec=Response)
|
||||
volume_create_response.entity = None
|
||||
volume_create_response.ok = True
|
||||
volume_create_response.status_code = 200
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_create_timeout = 5
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(return_value=None)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.create_available_volume(
|
||||
self.defaults.display_name, self.defaults.size,
|
||||
self.defaults.volume_type)
|
||||
|
||||
def test_create_available_volume_timeout_failure(self):
|
||||
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_model.id_ = "mock"
|
||||
volume_create_response = Mock(spec=Response)
|
||||
volume_create_response.entity = None
|
||||
volume_create_response.ok = True
|
||||
volume_create_response.status_code = 200
|
||||
|
||||
client = Mock(spec=VolumesClient)
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.volume_create_timeout = 5
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(
|
||||
side_effect=VolumesAPIBehaviorException)
|
||||
|
@ -19,6 +19,7 @@ from cloudcafe.blockstorage.volumes_api.v1.models import responses
|
||||
|
||||
|
||||
class BaseTest(object):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.model = cls.model_type.deserialize(
|
||||
@ -35,13 +36,13 @@ class VolumeTypeResponseModelBaseTest(BaseTest):
|
||||
extra_specs_value = "ExtraSpecsValue"
|
||||
|
||||
def test_id(self):
|
||||
self.assertEqual(self.model.id_, self.defaults.id_)
|
||||
self.assertEquals(self.model.id_, self.defaults.id_)
|
||||
|
||||
def test_name(self):
|
||||
self.assertEqual(self.model.name, self.defaults.name)
|
||||
self.assertEquals(self.model.name, self.defaults.name)
|
||||
|
||||
def test_extra_specs(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.extra_specs,
|
||||
{self.defaults.extra_specs_key: self.defaults.extra_specs_value})
|
||||
|
||||
@ -66,7 +67,7 @@ class VolumeTypeResponseModelTest_XML(
|
||||
deserialize_type = 'xml'
|
||||
input_template = \
|
||||
"""{xml_header}<volume_type
|
||||
xmlns="http://docs.openstack.org/fake"
|
||||
xmlns="http://docs.openstack.org/fakeVolRespModelxmlns"
|
||||
id="{id_}" name="{name}">
|
||||
<extra_specs>
|
||||
<extra_spec key="{spec_key}">{spec_value}</extra_spec>
|
||||
@ -74,7 +75,76 @@ class VolumeTypeResponseModelTest_XML(
|
||||
</volume_type>"""
|
||||
|
||||
serialized_input = input_template.format(
|
||||
xml_header=xml_header, id_=defaults.id_, name=defaults.name,
|
||||
xml_header=xml_header,
|
||||
id_=defaults.id_, name=defaults.name,
|
||||
spec_key=defaults.extra_specs_key,
|
||||
spec_value=defaults.extra_specs_value)
|
||||
|
||||
|
||||
class VolumeTypeListResponseModelBaseTest(BaseTest):
|
||||
model_type = responses.VolumeTypeListResponse
|
||||
|
||||
class defaults:
|
||||
id_ = "32948732984798324"
|
||||
name1 = "fake name 1"
|
||||
name2 = "fake name 2"
|
||||
extra_specs_key = "ExtraSpecsKey"
|
||||
extra_specs_value = "ExtraSpecsValue"
|
||||
|
||||
def test_list_contains_two_items(self):
|
||||
self.assertEquals(len(self.model), 2)
|
||||
|
||||
def test_first_item_id(self):
|
||||
self.assertEquals(self.model[0].id_, self.defaults.id_)
|
||||
|
||||
def test_second_item_id(self):
|
||||
self.assertEquals(self.model[1].id_, self.defaults.id_)
|
||||
|
||||
def test_first_item_name(self):
|
||||
self.assertEquals(self.model[0].name, self.defaults.name1)
|
||||
|
||||
def test_second_item_name(self):
|
||||
self.assertEquals(self.model[1].name, self.defaults.name2)
|
||||
|
||||
def test_first_item_extra_specs(self):
|
||||
self.assertEquals(self.model[0].extra_specs, {
|
||||
self.defaults.extra_specs_key:
|
||||
self.defaults.extra_specs_value})
|
||||
|
||||
def test_second_item_extra_specs(self):
|
||||
self.assertEquals(self.model[1].extra_specs, {
|
||||
self.defaults.extra_specs_key:
|
||||
self.defaults.extra_specs_value})
|
||||
|
||||
|
||||
class VolumeTypeListResponseModelTest_XML(
|
||||
VolumeTypeListResponseModelBaseTest, unittest.TestCase):
|
||||
defaults = VolumeTypeListResponseModelBaseTest.defaults
|
||||
xml_header = """<?xml version="1.0" encoding="UTF-8"?>"""
|
||||
deserialize_type = 'xml'
|
||||
input_template = \
|
||||
"""{xml_header}<volume_types>
|
||||
<volume_type
|
||||
id="{id_}"
|
||||
name="{name1}">
|
||||
<extra_specs>
|
||||
<extra_spec key="{spec_key}">{spec_value}</extra_spec>
|
||||
</extra_specs>
|
||||
</volume_type>
|
||||
<volume_type
|
||||
id="{id_}"
|
||||
name="{name2}">
|
||||
<extra_specs>
|
||||
<extra_spec key="{spec_key}">{spec_value}</extra_spec>
|
||||
</extra_specs>
|
||||
</volume_type>
|
||||
</volume_types>
|
||||
"""
|
||||
serialized_input = input_template.format(
|
||||
xml_header=xml_header,
|
||||
id_=defaults.id_,
|
||||
name1=defaults.name1,
|
||||
name2=defaults.name2,
|
||||
spec_key=defaults.extra_specs_key,
|
||||
spec_value=defaults.extra_specs_value)
|
||||
|
||||
@ -92,40 +162,52 @@ class VolumeSnapshotResponseModelBaseTest(BaseTest):
|
||||
size = 1
|
||||
id_ = "2305iu32f9j3298f4jh32498fj"
|
||||
display_name = "FakeSnapshotName"
|
||||
os_extended_snapshot_attributes_project_id = '1111111'
|
||||
os_extended_snapshot_attributes_progress = '100%'
|
||||
|
||||
def test_id(self):
|
||||
self.assertEqual(self.model.id_, self.defaults.id_)
|
||||
self.assertEquals(self.model.id_, self.defaults.id_)
|
||||
|
||||
def test_volume_id(self):
|
||||
self.assertEqual(self.model.volume_id, self.defaults.volume_id)
|
||||
self.assertEquals(self.model.volume_id, self.defaults.volume_id)
|
||||
|
||||
def test_display_name(self):
|
||||
self.assertEqual(self.model.display_name, self.defaults.display_name)
|
||||
self.assertEquals(self.model.display_name, self.defaults.display_name)
|
||||
|
||||
def test_display_description(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.display_description, self.defaults.display_description)
|
||||
|
||||
def test_status(self):
|
||||
self.assertEqual(self.model.status, self.defaults.status)
|
||||
self.assertEquals(self.model.status, self.defaults.status)
|
||||
|
||||
def test_size_int_equivalent(self):
|
||||
self.assertEqual(int(self.model.size), self.defaults.size)
|
||||
self.assertEquals(int(self.model.size), self.defaults.size)
|
||||
|
||||
def test_size_str_compare(self):
|
||||
self.assertEqual(str(self.model.size), str(self.defaults.size))
|
||||
self.assertEquals(str(self.model.size), str(self.defaults.size))
|
||||
|
||||
def test_size_int_compare(self):
|
||||
self.assertEqual(int(self.model.size), int(self.defaults.size))
|
||||
self.assertEquals(int(self.model.size), int(self.defaults.size))
|
||||
|
||||
def test_created_at(self):
|
||||
self.assertEqual(self.model.created_at, self.defaults.created_at)
|
||||
self.assertEquals(self.model.created_at, self.defaults.created_at)
|
||||
|
||||
def test_metadata(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.metadata,
|
||||
{self.defaults.metadata_key: self.defaults.metadata_value})
|
||||
|
||||
def test_os_extended_snapshot_attributes_project_id(self):
|
||||
self.assertEquals(
|
||||
self.model.os_extended_snapshot_attributes_project_id,
|
||||
self.defaults.os_extended_snapshot_attributes_project_id)
|
||||
|
||||
def test_os_extended_snapshot_attributes_progress(self):
|
||||
self.assertEquals(
|
||||
self.model.os_extended_snapshot_attributes_progress,
|
||||
self.defaults.os_extended_snapshot_attributes_progress)
|
||||
|
||||
|
||||
class VolumeSnapshotResponseModelTests_JSON(
|
||||
VolumeSnapshotResponseModelBaseTest, unittest.TestCase):
|
||||
@ -141,7 +223,11 @@ class VolumeSnapshotResponseModelTests_JSON(
|
||||
"volume_id": defaults.volume_id,
|
||||
"size": defaults.size,
|
||||
"id": defaults.id_,
|
||||
"display_name": defaults.display_name}}
|
||||
"display_name": defaults.display_name,
|
||||
"os-extended-snapshot-attributes:project_id": defaults.
|
||||
os_extended_snapshot_attributes_project_id,
|
||||
"os-extended-snapshot-attributes:progress": defaults.
|
||||
os_extended_snapshot_attributes_progress}}
|
||||
serialized_input = json.dumps(data)
|
||||
|
||||
|
||||
@ -153,6 +239,9 @@ class VolumeSnapshotResponseModelTests_XML(
|
||||
xml_header = """<?xml version="1.0" encoding="UTF-8"?>"""
|
||||
input_template = \
|
||||
"""{xml_header}<snapshot
|
||||
xmlns:os-extended-snapshot-attributes="FAKE"
|
||||
os-extended-snapshot-attributes:project_id="{project_id}"
|
||||
os-extended-snapshot-attributes:progress="{progress}"
|
||||
status="{status}"
|
||||
display_description="{display_description}"
|
||||
created_at="{created_at}"
|
||||
@ -165,11 +254,17 @@ class VolumeSnapshotResponseModelTests_XML(
|
||||
</metadata>
|
||||
</snapshot>"""
|
||||
serialized_input = input_template.format(
|
||||
xml_header=xml_header, status=defaults.status,
|
||||
project_id=defaults.os_extended_snapshot_attributes_project_id,
|
||||
progress=defaults.os_extended_snapshot_attributes_progress,
|
||||
xml_header=xml_header,
|
||||
status=defaults.status,
|
||||
display_description=defaults.display_description,
|
||||
created_at=defaults.created_at, volume_id=defaults.volume_id,
|
||||
size=defaults.size, id_=defaults.id_,
|
||||
display_name=defaults.display_name, metadata_key=defaults.metadata_key,
|
||||
created_at=defaults.created_at,
|
||||
volume_id=defaults.volume_id,
|
||||
size=defaults.size,
|
||||
id_=defaults.id_,
|
||||
display_name=defaults.display_name,
|
||||
metadata_key=defaults.metadata_key,
|
||||
metadata_value=defaults.metadata_value)
|
||||
|
||||
|
||||
@ -198,84 +293,115 @@ class VolumeResponseModelBaseTests(BaseTest):
|
||||
size = 1
|
||||
metadata_key = "MetaKey"
|
||||
metadata_value = "MetaValue"
|
||||
os_vol_mig_status_attr_migstat = '100%'
|
||||
os_vol_mig_status_attr_name_id = '1111111'
|
||||
|
||||
def test_id(self):
|
||||
self.assertEqual(self.model.id_, self.defaults.id_)
|
||||
self.assertEquals(self.model.id_, self.defaults.id_)
|
||||
|
||||
def test_size_int_equivalent(self):
|
||||
self.assertEqual(int(self.model.size), self.defaults.size)
|
||||
self.assertEquals(int(self.model.size), self.defaults.size)
|
||||
|
||||
def test_size_str_compare(self):
|
||||
self.assertEqual(str(self.model.size), str(self.defaults.size))
|
||||
self.assertEquals(str(self.model.size), str(self.defaults.size))
|
||||
|
||||
def test_size_int_compare(self):
|
||||
self.assertEqual(int(self.model.size), int(self.defaults.size))
|
||||
self.assertEquals(int(self.model.size), int(self.defaults.size))
|
||||
|
||||
def test_display_name(self):
|
||||
self.assertEqual(self.model.display_name, self.defaults.display_name)
|
||||
self.assertEquals(self.model.display_name, self.defaults.display_name)
|
||||
|
||||
def test_volume_type(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.volume_type, self.defaults.volume_type)
|
||||
|
||||
def test_display_description(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.display_description, self.defaults.display_description)
|
||||
|
||||
def test_availability_zone(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.availability_zone,
|
||||
self.defaults.availability_zone)
|
||||
|
||||
def test_metadata(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.metadata,
|
||||
{self.defaults.metadata_key: self.defaults.metadata_value})
|
||||
|
||||
def test_snapshot_id(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.snapshot_id, self.defaults.snapshot_id)
|
||||
|
||||
def test_bootable(self):
|
||||
self.assertEquals(
|
||||
self.model.bootable, self.defaults.bootable)
|
||||
|
||||
def test_attachments_device(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.attachments[0].device,
|
||||
self.defaults.attachment_device)
|
||||
|
||||
def test_attachments_server_id(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.attachments[0].server_id,
|
||||
self.defaults.attachment_server_id)
|
||||
|
||||
def test_attachments_id(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.attachments[0].id_,
|
||||
self.defaults.attachment_id)
|
||||
|
||||
def test_attachments_volume_id(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.attachments[0].volume_id,
|
||||
self.defaults.attachment_volume_id)
|
||||
|
||||
def test_created_at(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.created_at,
|
||||
self.defaults.created_at)
|
||||
|
||||
def test_status(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.status,
|
||||
self.defaults.status)
|
||||
|
||||
def test_links_href(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.links[0].href,
|
||||
self.defaults.link_href)
|
||||
|
||||
def test_links_rel(self):
|
||||
self.assertEqual(
|
||||
self.assertEquals(
|
||||
self.model.links[0].rel,
|
||||
self.defaults.link_rel)
|
||||
|
||||
def test_source_volid(self):
|
||||
self.assertEquals(
|
||||
self.model.source_volid,
|
||||
self.defaults.source_volid)
|
||||
|
||||
def test_os_vol_host_attr_host(self):
|
||||
self.assertEquals(
|
||||
self.model.os_vol_host_attr_host,
|
||||
self.defaults.os_vol_host_attr_host)
|
||||
|
||||
def test_os_vol_tenant_attr_tenant_id(self):
|
||||
self.assertEquals(
|
||||
self.model.os_vol_tenant_attr_tenant_id,
|
||||
self.defaults.os_vol_tenant_attr_tenant_id)
|
||||
|
||||
def test_os_vol_mig_status_attr_migstat(self):
|
||||
self.assertEquals(
|
||||
self.model.os_vol_mig_status_attr_migstat,
|
||||
self.defaults.os_vol_mig_status_attr_migstat)
|
||||
|
||||
def test_os_vol_mig_status_attr_name_id(self):
|
||||
self.assertEquals(
|
||||
self.model.os_vol_mig_status_attr_name_id,
|
||||
self.defaults.os_vol_mig_status_attr_name_id)
|
||||
|
||||
|
||||
class VolumeResponseModelTests_JSON(
|
||||
VolumeResponseModelBaseTests, unittest.TestCase):
|
||||
@ -294,13 +420,22 @@ class VolumeResponseModelTests_JSON(
|
||||
"href": defaults.link_href,
|
||||
"rel": defaults.link_rel}],
|
||||
"availability_zone": defaults.availability_zone,
|
||||
"os-vol-host-attr:host": defaults.os_vol_host_attr_host,
|
||||
"source_volid": defaults.source_volid,
|
||||
"snapshot_id": defaults.snapshot_id,
|
||||
"id": defaults.id_,
|
||||
"display_description": defaults.display_description,
|
||||
"bootable": defaults.bootable,
|
||||
"display_name": defaults.display_name,
|
||||
"created_at": defaults.created_at,
|
||||
"volume_type": defaults.volume_type,
|
||||
"os-vol-tenant-attr:tenant_id":
|
||||
defaults.os_vol_tenant_attr_tenant_id,
|
||||
"size": defaults.size,
|
||||
"os-vol-mig-status-attr:migstat":
|
||||
defaults.os_vol_mig_status_attr_migstat,
|
||||
"os-vol-mig-status-attr:name_id":
|
||||
defaults.os_vol_mig_status_attr_name_id,
|
||||
"metadata": {defaults.metadata_key: defaults.metadata_value}}}
|
||||
serialized_input = json.dumps(data)
|
||||
|
||||
@ -315,19 +450,19 @@ class VolumeResponseModelTests_JSON(
|
||||
|
||||
def test_empty_attachments_response(self):
|
||||
model = self.get_modified_volume_model('attachments', list())
|
||||
self.assertEqual(model.attachments, list())
|
||||
self.assertEquals(model.attachments, list())
|
||||
self.assertIsInstance(
|
||||
model.attachments, responses._VolumeAttachmentsList)
|
||||
|
||||
def test_empty_links_response(self):
|
||||
model = self.get_modified_volume_model('links', list())
|
||||
self.assertEqual(model.links, list())
|
||||
self.assertEquals(model.links, list())
|
||||
self.assertIsInstance(
|
||||
model.attachments, responses._VolumeAttachmentsList)
|
||||
|
||||
def test_empty_metadata_response(self):
|
||||
model = self.get_modified_volume_model('metadata', dict())
|
||||
self.assertEqual(model.metadata, dict())
|
||||
self.assertEquals(model.metadata, dict())
|
||||
|
||||
|
||||
class VolumeDetailResponseModelTests_XML(
|
||||
@ -338,16 +473,26 @@ class VolumeDetailResponseModelTests_XML(
|
||||
xml_header = """<?xml version="1.0" encoding="UTF-8"?>"""
|
||||
input_template = \
|
||||
"""{xml_header}<volume
|
||||
xmlns:os-vol-image-meta="http://fake/api/v1"
|
||||
xmlns:os-vol-tenant-attr="FAKE"
|
||||
xmlns:os-vol-host-attr="FAKE"
|
||||
xmlns:os-vol-mig-status-attr="FAKE"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns="http://docs.openstack.org/volume/api/v1"
|
||||
status="{status}"
|
||||
display_name="{display_name}"
|
||||
bootable="{bootable}"
|
||||
availability_zone="{availability_zone}"
|
||||
created_at="{created_at}"
|
||||
display_description="{display_description}"
|
||||
volume_type="{volume_type}"
|
||||
snapshot_id="{snapshot_id}"
|
||||
source_volid="{source_volid}"
|
||||
id="{id_}"
|
||||
os-vol-tenant-attr:tenant_id="{os_vol_tenant_attr_tenant_id}"
|
||||
os-vol-host-attr:host="{os_vol_host_attr_host}"
|
||||
os-vol-mig-status-attr:migstat="{migstat}"
|
||||
os-vol-mig-status-attr:name_id="{name_id}"
|
||||
size="{size}">
|
||||
<attachments>
|
||||
<attachment device="{attachment_device}"
|
||||
@ -362,13 +507,22 @@ class VolumeDetailResponseModelTests_XML(
|
||||
</volume>"""
|
||||
|
||||
serialized_input = input_template.format(
|
||||
xml_header=xml_header, status=defaults.status,
|
||||
xml_header=xml_header,
|
||||
status=defaults.status,
|
||||
display_name=defaults.display_name,
|
||||
bootable=defaults.bootable,
|
||||
availability_zone=defaults.availability_zone,
|
||||
created_at=defaults.created_at,
|
||||
display_description=defaults.display_description,
|
||||
volume_type=defaults.volume_type, snapshot_id=defaults.snapshot_id,
|
||||
id_=defaults.id_, size=defaults.size,
|
||||
volume_type=defaults.volume_type,
|
||||
snapshot_id=defaults.snapshot_id,
|
||||
source_volid=defaults.source_volid,
|
||||
id_=defaults.id_,
|
||||
size=defaults.size,
|
||||
os_vol_tenant_attr_tenant_id=defaults.os_vol_tenant_attr_tenant_id,
|
||||
os_vol_host_attr_host=defaults.os_vol_host_attr_host,
|
||||
migstat=defaults.os_vol_mig_status_attr_migstat,
|
||||
name_id=defaults.os_vol_mig_status_attr_name_id,
|
||||
attachment_device=defaults.attachment_device,
|
||||
attachment_server_id=defaults.attachment_server_id,
|
||||
attachment_id=defaults.attachment_id,
|
||||
@ -383,72 +537,3 @@ class VolumeDetailResponseModelTests_XML(
|
||||
@unittest.skip("There are no XML examples of links in XML responses")
|
||||
def test_links_rel(self):
|
||||
super(VolumeDetailResponseModelTests_XML, self).test_links_href()
|
||||
|
||||
@unittest.skip("There are no XML examples of links in XML responses")
|
||||
def test_empty_links_response(self):
|
||||
pass
|
||||
|
||||
def test_empty_attachments_response(self):
|
||||
serialized_input = """{xml_header}<volume
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns="http://docs.openstack.org/volume/api/v1"
|
||||
status="{status}"
|
||||
display_name="{display_name}"
|
||||
availability_zone="{availability_zone}"
|
||||
created_at="{created_at}"
|
||||
display_description="{display_description}"
|
||||
volume_type="{volume_type}"
|
||||
snapshot_id="{snapshot_id}"
|
||||
id="{id_}"
|
||||
size="{size}">
|
||||
<metadata>
|
||||
<meta key="{metadata_key}">{metadata_value}</meta>
|
||||
</metadata>
|
||||
</volume>""".format(
|
||||
xml_header=self.xml_header,
|
||||
status=self.defaults.status,
|
||||
display_name=self.defaults.display_name,
|
||||
availability_zone=self.defaults.availability_zone,
|
||||
created_at=self.defaults.created_at,
|
||||
display_description=self.defaults.display_description,
|
||||
volume_type=self.defaults.volume_type,
|
||||
snapshot_id=self.defaults.snapshot_id,
|
||||
id_=self.defaults.id_,
|
||||
size=self.defaults.size,
|
||||
metadata_key=self.defaults.metadata_key,
|
||||
metadata_value=self.defaults.metadata_value)
|
||||
|
||||
self.model = self.model_type.deserialize(
|
||||
serialized_input, self.deserialize_type)
|
||||
self.assertEqual(self.model.attachments, [])
|
||||
self.assertIsInstance(
|
||||
self.model.attachments, responses._VolumeAttachmentsList)
|
||||
|
||||
def test_empty_metadata_response(self):
|
||||
serialized_input = """{xml_header}<volume
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns="http://docs.openstack.org/volume/api/v1"
|
||||
status="{status}"
|
||||
display_name="{display_name}"
|
||||
availability_zone="{availability_zone}"
|
||||
created_at="{created_at}"
|
||||
display_description="{display_description}"
|
||||
volume_type="{volume_type}"
|
||||
snapshot_id="{snapshot_id}"
|
||||
id="{id_}"
|
||||
size="{size}">
|
||||
</volume>""".format(
|
||||
xml_header=self.xml_header,
|
||||
status=self.defaults.status,
|
||||
display_name=self.defaults.display_name,
|
||||
availability_zone=self.defaults.availability_zone,
|
||||
created_at=self.defaults.created_at,
|
||||
display_description=self.defaults.display_description,
|
||||
volume_type=self.defaults.volume_type,
|
||||
snapshot_id=self.defaults.snapshot_id,
|
||||
id_=self.defaults.id_,
|
||||
size=self.defaults.size)
|
||||
|
||||
self.model = self.model_type.deserialize(
|
||||
serialized_input, self.deserialize_type)
|
||||
self.assertEqual(self.model.metadata, {})
|
||||
|
@ -18,8 +18,10 @@ import unittest
|
||||
from mock import MagicMock, Mock
|
||||
from requests import Response
|
||||
|
||||
from cloudcafe.blockstorage.volumes_api.common.behaviors import \
|
||||
VolumesAPIBehaviorException
|
||||
from cloudcafe.blockstorage.volumes_api.v2.behaviors import \
|
||||
VolumesAPI_Behaviors, VolumesAPIBehaviorException
|
||||
VolumesAPI_Behaviors
|
||||
from cloudcafe.blockstorage.volumes_api.v2.models.responses import\
|
||||
VolumeResponse, VolumeSnapshotResponse
|
||||
from cloudcafe.blockstorage.volumes_api.v2.client import VolumesClient
|
||||
@ -144,6 +146,14 @@ class wait_for_volume_status(unittest.TestCase):
|
||||
|
||||
return (client, config, volume_model, response)
|
||||
|
||||
def test_get_volume_status(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
|
||||
status = behavior.get_volume_status(self.defaults.volume_id)
|
||||
self.assertEqual(status, self.defaults.expected_status)
|
||||
|
||||
def test_good_response_code(self):
|
||||
client, config, volume_model, response = self.get_mocks()
|
||||
|
||||
@ -229,23 +239,31 @@ class create_available_volume(unittest.TestCase):
|
||||
|
||||
def get_mocks(self):
|
||||
client = Mock(spec=VolumesClient)
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
volume_model = Mock(spec=VolumeResponse)
|
||||
volume_create_response = Mock(spec=Response)
|
||||
|
||||
config.volume_create_timeout = 5
|
||||
volume_model.id_ = "mock"
|
||||
volume_create_response.entity = volume_model
|
||||
volume_create_response.ok = True
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
|
||||
config = Mock(spec=VolumesAPIConfig)
|
||||
config.serialize_format = "json"
|
||||
config.deserialize_format = "json"
|
||||
config.max_volume_size = 1024
|
||||
config.min_volume_size = 1
|
||||
config.volume_status_poll_frequency = 5
|
||||
config.volume_create_min_timeout = 1
|
||||
config.volume_create_max_timeout = 10
|
||||
config.volume_create_wait_per_gigabyte = 1
|
||||
config.volume_create_base_timeout = 0
|
||||
|
||||
return (client, config, volume_model, volume_create_response)
|
||||
|
||||
def test_happy_path(self):
|
||||
client, config, volume_model, volume_create_response = self.get_mocks()
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(return_value=None)
|
||||
behavior.get_volume_status = MagicMock(return_value='available')
|
||||
|
||||
volume_entity = behavior.create_available_volume(
|
||||
self.defaults.display_name, self.defaults.size,
|
||||
@ -253,39 +271,6 @@ class create_available_volume(unittest.TestCase):
|
||||
|
||||
self.assertIsInstance(volume_entity, VolumeResponse)
|
||||
|
||||
def test_failure_response_no_model(self):
|
||||
client, config, volume_model, volume_create_response = self.get_mocks()
|
||||
|
||||
volume_create_response.entity = None
|
||||
volume_create_response.ok = False
|
||||
volume_create_response.status_code = 500
|
||||
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(return_value=None)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.create_available_volume(
|
||||
self.defaults.display_name, self.defaults.size,
|
||||
self.defaults.volume_type)
|
||||
|
||||
def test_failure_response_with_model(self):
|
||||
client, config, volume_model, volume_create_response = self.get_mocks()
|
||||
|
||||
volume_create_response.entity = None
|
||||
volume_create_response.status_code = 200
|
||||
|
||||
client.create_volume = MagicMock(return_value=volume_create_response)
|
||||
|
||||
behavior = VolumesAPI_Behaviors(client, config)
|
||||
behavior.wait_for_volume_status = MagicMock(return_value=None)
|
||||
|
||||
with self.assertRaises(VolumesAPIBehaviorException):
|
||||
behavior.create_available_volume(
|
||||
self.defaults.display_name, self.defaults.size,
|
||||
self.defaults.volume_type)
|
||||
|
||||
def test_timeout_failure(self):
|
||||
client, config, volume_model, volume_create_response = self.get_mocks()
|
||||
|
||||
|
@ -162,6 +162,8 @@ class VolumeSnapshotResponseModelBaseTest(BaseTest):
|
||||
size = 1
|
||||
id_ = "2305iu32f9j3298f4jh32498fj"
|
||||
name = "FakeSnapshotName"
|
||||
os_extended_snapshot_attributes_project_id = '1111111'
|
||||
os_extended_snapshot_attributes_progress = '100%'
|
||||
|
||||
def test_id(self):
|
||||
self.assertEquals(self.model.id_, self.defaults.id_)
|
||||
@ -195,6 +197,16 @@ class VolumeSnapshotResponseModelBaseTest(BaseTest):
|
||||
self.model.metadata,
|
||||
{self.defaults.metadata_key: self.defaults.metadata_value})
|
||||
|
||||
def test_os_extended_snapshot_attributes_project_id(self):
|
||||
self.assertEquals(
|
||||
self.model.os_extended_snapshot_attributes_project_id,
|
||||
self.defaults.os_extended_snapshot_attributes_project_id)
|
||||
|
||||
def test_os_extended_snapshot_attributes_progress(self):
|
||||
self.assertEquals(
|
||||
self.model.os_extended_snapshot_attributes_progress,
|
||||
self.defaults.os_extended_snapshot_attributes_progress)
|
||||
|
||||
|
||||
class VolumeSnapshotResponseModelTests_JSON(
|
||||
VolumeSnapshotResponseModelBaseTest, unittest.TestCase):
|
||||
@ -210,7 +222,11 @@ class VolumeSnapshotResponseModelTests_JSON(
|
||||
"volume_id": defaults.volume_id,
|
||||
"size": defaults.size,
|
||||
"id": defaults.id_,
|
||||
"name": defaults.name}}
|
||||
"name": defaults.name,
|
||||
"os-extended-snapshot-attributes:project_id": defaults.
|
||||
os_extended_snapshot_attributes_project_id,
|
||||
"os-extended-snapshot-attributes:progress": defaults.
|
||||
os_extended_snapshot_attributes_progress}}
|
||||
serialized_input = json.dumps(data)
|
||||
|
||||
|
||||
@ -222,6 +238,9 @@ class VolumeSnapshotResponseModelTests_XML(
|
||||
xml_header = """<?xml version="1.0" encoding="UTF-8"?>"""
|
||||
input_template = \
|
||||
"""{xml_header}<snapshot
|
||||
xmlns:os-extended-snapshot-attributes="FAKE"
|
||||
os-extended-snapshot-attributes:project_id="{project_id}"
|
||||
os-extended-snapshot-attributes:progress="{progress}"
|
||||
status="{status}"
|
||||
description="{description}"
|
||||
created_at="{created_at}"
|
||||
@ -234,6 +253,8 @@ class VolumeSnapshotResponseModelTests_XML(
|
||||
</metadata>
|
||||
</snapshot>"""
|
||||
serialized_input = input_template.format(
|
||||
project_id=defaults.os_extended_snapshot_attributes_project_id,
|
||||
progress=defaults.os_extended_snapshot_attributes_progress,
|
||||
xml_header=xml_header,
|
||||
status=defaults.status,
|
||||
description=defaults.description,
|
||||
@ -271,6 +292,8 @@ class VolumeResponseModelBaseTests(BaseTest):
|
||||
size = 1
|
||||
metadata_key = "MetaKey"
|
||||
metadata_value = "MetaValue"
|
||||
os_vol_mig_status_attr_migstat = '100%'
|
||||
os_vol_mig_status_attr_name_id = '1111111'
|
||||
|
||||
def test_id(self):
|
||||
self.assertEquals(self.model.id_, self.defaults.id_)
|
||||
@ -368,6 +391,16 @@ class VolumeResponseModelBaseTests(BaseTest):
|
||||
self.model.os_vol_tenant_attr_tenant_id,
|
||||
self.defaults.os_vol_tenant_attr_tenant_id)
|
||||
|
||||
def test_os_vol_mig_status_attr_migstat(self):
|
||||
self.assertEquals(
|
||||
self.model.os_vol_mig_status_attr_migstat,
|
||||
self.defaults.os_vol_mig_status_attr_migstat)
|
||||
|
||||
def test_os_vol_mig_status_attr_name_id(self):
|
||||
self.assertEquals(
|
||||
self.model.os_vol_mig_status_attr_name_id,
|
||||
self.defaults.os_vol_mig_status_attr_name_id)
|
||||
|
||||
|
||||
class VolumeResponseModelTests_JSON(
|
||||
VolumeResponseModelBaseTests, unittest.TestCase):
|
||||
@ -398,6 +431,10 @@ class VolumeResponseModelTests_JSON(
|
||||
"os-vol-tenant-attr:tenant_id":
|
||||
defaults.os_vol_tenant_attr_tenant_id,
|
||||
"size": defaults.size,
|
||||
"os-vol-mig-status-attr:migstat":
|
||||
defaults.os_vol_mig_status_attr_migstat,
|
||||
"os-vol-mig-status-attr:name_id":
|
||||
defaults.os_vol_mig_status_attr_name_id,
|
||||
"metadata": {defaults.metadata_key: defaults.metadata_value}}}
|
||||
serialized_input = json.dumps(data)
|
||||
|
||||
@ -438,6 +475,7 @@ class VolumeDetailResponseModelTests_XML(
|
||||
xmlns:os-vol-image-meta="http://fake/api/v1"
|
||||
xmlns:os-vol-tenant-attr="FAKE"
|
||||
xmlns:os-vol-host-attr="FAKE"
|
||||
xmlns:os-vol-mig-status-attr="FAKE"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns="http://docs.openstack.org/volume/api/v1"
|
||||
status="{status}"
|
||||
@ -452,6 +490,8 @@ class VolumeDetailResponseModelTests_XML(
|
||||
id="{id_}"
|
||||
os-vol-tenant-attr:tenant_id="{os_vol_tenant_attr_tenant_id}"
|
||||
os-vol-host-attr:host="{os_vol_host_attr_host}"
|
||||
os-vol-mig-status-attr:migstat="{migstat}"
|
||||
os-vol-mig-status-attr:name_id="{name_id}"
|
||||
size="{size}">
|
||||
<attachments>
|
||||
<attachment device="{attachment_device}"
|
||||
@ -480,6 +520,8 @@ class VolumeDetailResponseModelTests_XML(
|
||||
size=defaults.size,
|
||||
os_vol_tenant_attr_tenant_id=defaults.os_vol_tenant_attr_tenant_id,
|
||||
os_vol_host_attr_host=defaults.os_vol_host_attr_host,
|
||||
migstat=defaults.os_vol_mig_status_attr_migstat,
|
||||
name_id=defaults.os_vol_mig_status_attr_name_id,
|
||||
attachment_device=defaults.attachment_device,
|
||||
attachment_server_id=defaults.attachment_server_id,
|
||||
attachment_id=defaults.attachment_id,
|
||||
|
Loading…
x
Reference in New Issue
Block a user