~ubuntu-branches/ubuntu/raring/cinder/raring-updates

« back to all changes in this revision

Viewing changes to cinder/tests/api/contrib/test_volume_image_metadata.py

Tags: upstream-2013.1~g2
ImportĀ upstreamĀ versionĀ 2013.1~g2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 
2
 
 
3
#   Copyright 2012 OpenStack LLC.
 
4
#
 
5
#   Licensed under the Apache License, Version 2.0 (the "License"); you may
 
6
#   not use this file except in compliance with the License. You may obtain
 
7
#   a copy of the License at
 
8
#
 
9
#       http://www.apache.org/licenses/LICENSE-2.0
 
10
#
 
11
#   Unless required by applicable law or agreed to in writing, software
 
12
#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
13
#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
14
#   License for the specific language governing permissions and limitations
 
15
#   under the License.
 
16
 
 
17
import datetime
 
18
import json
 
19
import uuid
 
20
from xml.dom import minidom
 
21
 
 
22
import webob
 
23
 
 
24
from cinder.api import common
 
25
from cinder.api.openstack.wsgi import MetadataXMLDeserializer
 
26
from cinder.api.openstack.wsgi import XMLDeserializer
 
27
from cinder import test
 
28
from cinder.tests.api import fakes
 
29
from cinder import volume
 
30
 
 
31
 
 
32
def fake_volume_get(*args, **kwargs):
 
33
    return {
 
34
        'id': 'fake',
 
35
        'host': 'host001',
 
36
        'status': 'available',
 
37
        'size': 5,
 
38
        'availability_zone': 'somewhere',
 
39
        'created_at': datetime.datetime.now(),
 
40
        'attach_status': None,
 
41
        'display_name': 'anothervolume',
 
42
        'display_description': 'Just another volume!',
 
43
        'volume_type_id': None,
 
44
        'snapshot_id': None,
 
45
        'project_id': 'fake',
 
46
    }
 
47
 
 
48
 
 
49
def fake_volume_get_all(*args, **kwargs):
 
50
    return [fake_volume_get()]
 
51
 
 
52
 
 
53
fake_image_metadata = {
 
54
    'image_id': 'someid',
 
55
    'image_name': 'fake',
 
56
    'kernel_id': 'somekernel',
 
57
    'ramdisk_id': 'someramdisk',
 
58
}
 
59
 
 
60
 
 
61
def fake_get_volume_image_metadata(*args, **kwargs):
 
62
    return fake_image_metadata
 
63
 
 
64
 
 
65
class VolumeImageMetadataTest(test.TestCase):
 
66
    content_type = 'application/json'
 
67
 
 
68
    def setUp(self):
 
69
        super(VolumeImageMetadataTest, self).setUp()
 
70
        self.stubs.Set(volume.API, 'get', fake_volume_get)
 
71
        self.stubs.Set(volume.API, 'get_all', fake_volume_get_all)
 
72
        self.stubs.Set(volume.API, 'get_volume_image_metadata',
 
73
                       fake_get_volume_image_metadata)
 
74
        self.UUID = uuid.uuid4()
 
75
 
 
76
    def _make_request(self, url):
 
77
        req = webob.Request.blank(url)
 
78
        req.accept = self.content_type
 
79
        res = req.get_response(fakes.wsgi_app())
 
80
        return res
 
81
 
 
82
    def _get_image_metadata(self, body):
 
83
        return json.loads(body)['volume']['volume_image_metadata']
 
84
 
 
85
    def _get_image_metadata_list(self, body):
 
86
        return [
 
87
            volume['volume_image_metadata']
 
88
            for volume in json.loads(body)['volumes']
 
89
        ]
 
90
 
 
91
    def test_get_volume(self):
 
92
        res = self._make_request('/v2/fake/volumes/%s' % self.UUID)
 
93
        self.assertEqual(res.status_int, 200)
 
94
        self.assertEqual(self._get_image_metadata(res.body),
 
95
                         fake_image_metadata)
 
96
 
 
97
    def test_list_detail_volumes(self):
 
98
        res = self._make_request('/v2/fake/volumes/detail')
 
99
        self.assertEqual(res.status_int, 200)
 
100
        self.assertEqual(self._get_image_metadata_list(res.body)[0],
 
101
                         fake_image_metadata)
 
102
 
 
103
 
 
104
class ImageMetadataXMLDeserializer(common.MetadataXMLDeserializer):
 
105
    metadata_node_name = "volume_image_metadata"
 
106
 
 
107
 
 
108
class VolumeImageMetadataXMLTest(VolumeImageMetadataTest):
 
109
    content_type = 'application/xml'
 
110
 
 
111
    def _get_image_metadata(self, body):
 
112
        deserializer = XMLDeserializer()
 
113
        volume = deserializer.find_first_child_named(
 
114
            minidom.parseString(body), 'volume')
 
115
        image_metadata = deserializer.find_first_child_named(
 
116
            volume, 'volume_image_metadata')
 
117
        return MetadataXMLDeserializer().extract_metadata(image_metadata)
 
118
 
 
119
    def _get_image_metadata_list(self, body):
 
120
        deserializer = XMLDeserializer()
 
121
        volumes = deserializer.find_first_child_named(
 
122
            minidom.parseString(body), 'volumes')
 
123
        volume_list = deserializer.find_children_named(volumes, 'volume')
 
124
        image_metadata_list = [
 
125
            deserializer.find_first_child_named(
 
126
                volume, 'volume_image_metadata'
 
127
            )
 
128
            for volume in volume_list]
 
129
        return map(MetadataXMLDeserializer().extract_metadata,
 
130
                   image_metadata_list)