~yolanda.robla/glance/precise-security

« back to all changes in this revision

Viewing changes to tests/unit/test_registry_api.py

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2011-04-12 09:52:06 UTC
  • mto: (50.1.2 precise-proposed)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20110412095206-8ynvol4gw0phuu30
Tags: upstream-2011.2~bzr108
ImportĀ upstreamĀ versionĀ 2011.2~bzr108

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
 
 
3
 
# Copyright 2010 OpenStack, LLC
4
 
# All Rights Reserved.
5
 
#
6
 
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
7
 
#    not use this file except in compliance with the License. You may obtain
8
 
#    a copy of the License at
9
 
#
10
 
#         http://www.apache.org/licenses/LICENSE-2.0
11
 
#
12
 
#    Unless required by applicable law or agreed to in writing, software
13
 
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
 
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
 
#    License for the specific language governing permissions and limitations
16
 
#    under the License.
17
 
 
18
 
import json
19
 
import stubout
20
 
import unittest
21
 
import webob
22
 
 
23
 
from glance.common import exception
24
 
from glance.registry import server
25
 
from tests import stubs
26
 
 
27
 
 
28
 
class TestImageController(unittest.TestCase):
29
 
    def setUp(self):
30
 
        """Establish a clean test environment"""
31
 
        self.stubs = stubout.StubOutForTesting()
32
 
        stubs.stub_out_registry_db_image_api(self.stubs)
33
 
 
34
 
    def tearDown(self):
35
 
        """Clear the test environment"""
36
 
        self.stubs.UnsetAll()
37
 
 
38
 
    def test_get_root(self):
39
 
        """Tests that the root registry API returns "index",
40
 
        which is a list of public images
41
 
 
42
 
        """
43
 
        fixture = {'id': 2,
44
 
                   'name': 'fake image #2'}
45
 
        req = webob.Request.blank('/')
46
 
        res = req.get_response(server.API())
47
 
        res_dict = json.loads(res.body)
48
 
        self.assertEquals(res.status_int, 200)
49
 
 
50
 
        images = res_dict['images']
51
 
        self.assertEquals(len(images), 1)
52
 
 
53
 
        for k, v in fixture.iteritems():
54
 
            self.assertEquals(v, images[0][k])
55
 
 
56
 
    def test_get_index(self):
57
 
        """Tests that the /images registry API returns list of
58
 
        public images
59
 
 
60
 
        """
61
 
        fixture = {'id': 2,
62
 
                   'name': 'fake image #2'}
63
 
        req = webob.Request.blank('/images')
64
 
        res = req.get_response(server.API())
65
 
        res_dict = json.loads(res.body)
66
 
        self.assertEquals(res.status_int, 200)
67
 
 
68
 
        images = res_dict['images']
69
 
        self.assertEquals(len(images), 1)
70
 
 
71
 
        for k, v in fixture.iteritems():
72
 
            self.assertEquals(v, images[0][k])
73
 
 
74
 
    def test_get_details(self):
75
 
        """Tests that the /images/detail registry API returns
76
 
        a mapping containing a list of detailed image information
77
 
 
78
 
        """
79
 
        fixture = {'id': 2,
80
 
                   'name': 'fake image #2',
81
 
                   'is_public': True,
82
 
                   'type': 'kernel',
83
 
                   'status': 'active'
84
 
                  }
85
 
        req = webob.Request.blank('/images/detail')
86
 
        res = req.get_response(server.API())
87
 
        res_dict = json.loads(res.body)
88
 
        self.assertEquals(res.status_int, 200)
89
 
 
90
 
        images = res_dict['images']
91
 
        self.assertEquals(len(images), 1)
92
 
 
93
 
        for k, v in fixture.iteritems():
94
 
            self.assertEquals(v, images[0][k])
95
 
 
96
 
    def test_create_image(self):
97
 
        """Tests that the /images POST registry API creates the image"""
98
 
        fixture = {'name': 'fake public image',
99
 
                   'is_public': True,
100
 
                   'type': 'kernel'
101
 
                  }
102
 
 
103
 
        req = webob.Request.blank('/images')
104
 
 
105
 
        req.method = 'POST'
106
 
        req.body = json.dumps(dict(image=fixture))
107
 
 
108
 
        res = req.get_response(server.API())
109
 
 
110
 
        self.assertEquals(res.status_int, 200)
111
 
 
112
 
        res_dict = json.loads(res.body)
113
 
 
114
 
        for k, v in fixture.iteritems():
115
 
            self.assertEquals(v, res_dict['image'][k])
116
 
 
117
 
        # Test ID auto-assigned properly
118
 
        self.assertEquals(3, res_dict['image']['id'])
119
 
 
120
 
        # Test status was updated properly
121
 
        self.assertEquals('active', res_dict['image']['status'])
122
 
 
123
 
    def test_create_image_with_bad_status(self):
124
 
        """Tests proper exception is raised if a bad status is set"""
125
 
        fixture = {'id': 3,
126
 
                   'name': 'fake public image',
127
 
                   'is_public': True,
128
 
                   'type': 'kernel',
129
 
                   'status': 'bad status'
130
 
                  }
131
 
 
132
 
        req = webob.Request.blank('/images')
133
 
 
134
 
        req.method = 'POST'
135
 
        req.body = json.dumps(dict(image=fixture))
136
 
 
137
 
        # TODO(jaypipes): Port Nova's Fault infrastructure
138
 
        # over to Glance to support exception catching into
139
 
        # standard HTTP errors.
140
 
        res = req.get_response(server.API())
141
 
        self.assertEquals(res.status_int, webob.exc.HTTPBadRequest.code)
142
 
 
143
 
    def test_update_image(self):
144
 
        """Tests that the /images PUT registry API updates the image"""
145
 
        fixture = {'name': 'fake public image #2',
146
 
                   'type': 'ramdisk'
147
 
                  }
148
 
 
149
 
        req = webob.Request.blank('/images/2')
150
 
 
151
 
        req.method = 'PUT'
152
 
        req.body = json.dumps(dict(image=fixture))
153
 
 
154
 
        res = req.get_response(server.API())
155
 
 
156
 
        self.assertEquals(res.status_int, 200)
157
 
 
158
 
        res_dict = json.loads(res.body)
159
 
 
160
 
        for k, v in fixture.iteritems():
161
 
            self.assertEquals(v, res_dict['image'][k])
162
 
 
163
 
    def test_update_image_not_existing(self):
164
 
        """Tests proper exception is raised if attempt to update non-existing
165
 
        image"""
166
 
        fixture = {'id': 3,
167
 
                   'name': 'fake public image',
168
 
                   'is_public': True,
169
 
                   'type': 'kernel',
170
 
                   'status': 'bad status'
171
 
                  }
172
 
 
173
 
        req = webob.Request.blank('/images/3')
174
 
 
175
 
        req.method = 'PUT'
176
 
        req.body = json.dumps(dict(image=fixture))
177
 
 
178
 
        # TODO(jaypipes): Port Nova's Fault infrastructure
179
 
        # over to Glance to support exception catching into
180
 
        # standard HTTP errors.
181
 
        res = req.get_response(server.API())
182
 
        self.assertEquals(res.status_int,
183
 
                          webob.exc.HTTPNotFound.code)
184
 
 
185
 
    def test_delete_image(self):
186
 
        """Tests that the /images DELETE registry API deletes the image"""
187
 
 
188
 
        # Grab the original number of images
189
 
        req = webob.Request.blank('/images')
190
 
        res = req.get_response(server.API())
191
 
        res_dict = json.loads(res.body)
192
 
        self.assertEquals(res.status_int, 200)
193
 
 
194
 
        orig_num_images = len(res_dict['images'])
195
 
 
196
 
        # Delete image #2
197
 
        req = webob.Request.blank('/images/2')
198
 
 
199
 
        req.method = 'DELETE'
200
 
 
201
 
        res = req.get_response(server.API())
202
 
 
203
 
        self.assertEquals(res.status_int, 200)
204
 
 
205
 
        # Verify one less image
206
 
        req = webob.Request.blank('/images')
207
 
        res = req.get_response(server.API())
208
 
        res_dict = json.loads(res.body)
209
 
        self.assertEquals(res.status_int, 200)
210
 
 
211
 
        new_num_images = len(res_dict['images'])
212
 
        self.assertEquals(new_num_images, orig_num_images - 1)
213
 
 
214
 
    def test_delete_image_not_existing(self):
215
 
        """Tests proper exception is raised if attempt to delete non-existing
216
 
        image"""
217
 
 
218
 
        req = webob.Request.blank('/images/3')
219
 
 
220
 
        req.method = 'DELETE'
221
 
 
222
 
        # TODO(jaypipes): Port Nova's Fault infrastructure
223
 
        # over to Glance to support exception catching into
224
 
        # standard HTTP errors.
225
 
        res = req.get_response(server.API())
226
 
        self.assertEquals(res.status_int,
227
 
                          webob.exc.HTTPNotFound.code)