1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2011 United States Government as represented by the
4
# Administrator of the National Aeronautics and Space Administration.
7
# Copyright 2011 Nebula, Inc.
8
# Copyright 2011 OpenStack LLC
10
# Licensed under the Apache License, Version 2.0 (the "License"); you may
11
# not use this file except in compliance with the License. You may obtain
12
# a copy of the License at
14
# http://www.apache.org/licenses/LICENSE-2.0
16
# Unless required by applicable law or agreed to in writing, software
17
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
18
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
19
# License for the specific language governing permissions and limitations
22
from django import http
23
from django.contrib import messages
24
from django.core.urlresolvers import reverse
25
from glance.common import exception as glance_exception
28
from horizon import api
29
from horizon import test
32
INDEX_URL = reverse('horizon:nova:images_and_snapshots:index')
35
class ImagesAndSnapshotsTests(test.BaseViewTests):
37
super(ImagesAndSnapshotsTests, self).setUp()
38
snapshot_dict = {'name': 'snapshot',
39
'container_format': 'ami',
41
snapshot = api.Image(snapshot_dict)
42
self.snapshots = [snapshot, ]
44
image_dict = {'name': 'visibleImage',
45
'container_format': 'novaImage'}
46
self.visibleImage = api.Image(image_dict)
47
self.visibleImage.id = '1'
49
image_dict = {'name': 'invisibleImage',
50
'container_format': 'aki'}
51
self.invisibleImage = api.Image(image_dict)
52
self.invisibleImage.id = '2'
54
flavor = api.Flavor(None)
56
flavor.name = 'm1.massive'
60
self.flavors = (flavor,)
62
self.images = (self.visibleImage, self.invisibleImage)
64
keypair = api.KeyPair(None)
65
keypair.name = 'keyName'
66
self.keypairs = (keypair,)
68
security_group = api.SecurityGroup(None)
69
security_group.name = 'default'
70
self.security_groups = (security_group,)
73
self.mox.StubOutWithMock(api, 'image_list_detailed')
74
api.image_list_detailed(IsA(http.HttpRequest)).AndReturn(self.images)
76
self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
77
api.snapshot_list_detailed(IsA(http.HttpRequest)).AndReturn(
80
self.mox.StubOutWithMock(api, 'flavor_list')
81
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
82
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
84
self.mox.StubOutWithMock(api, 'security_group_list')
85
api.security_group_list(IsA(http.HttpRequest)).\
86
AndReturn(self.security_groups)
87
api.security_group_list(IsA(http.HttpRequest)).\
88
AndReturn(self.security_groups)
90
self.mox.StubOutWithMock(api, 'keypair_list')
91
api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)
93
self.mox.StubOutWithMock(api, 'tenant_quota_get')
94
api.tenant_quota_get(IsA(http.HttpRequest),
95
self.TEST_TENANT).AndReturn({})
99
res = self.client.get(INDEX_URL)
101
self.assertTemplateUsed(res,
102
'nova/images_and_snapshots/index.html')
104
self.assertIn('images', res.context)
105
images = res.context['images']
106
self.assertEqual(len(images), 1)
107
self.assertEqual(images[0].name, 'visibleImage')
109
def test_index_no_images(self):
110
self.mox.StubOutWithMock(api, 'snapshot_list_detailed')
111
api.snapshot_list_detailed(IsA(http.HttpRequest)).\
112
AndReturn(self.snapshots)
114
self.mox.StubOutWithMock(api, 'flavor_list')
115
api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors)
117
self.mox.StubOutWithMock(api, 'security_group_list')
118
api.security_group_list(IsA(http.HttpRequest)).\
119
AndReturn(self.security_groups)
121
self.mox.StubOutWithMock(api, 'keypair_list')
122
api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs)
124
self.mox.StubOutWithMock(api, 'image_list_detailed')
125
api.image_list_detailed(IsA(http.HttpRequest)).AndReturn([])
127
self.mox.StubOutWithMock(api, 'tenant_quota_get')
128
api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
131
self.mox.StubOutWithMock(messages, 'info')
132
messages.info(IsA(http.HttpRequest), IsA(basestring))
136
res = self.client.get(INDEX_URL)
138
self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')
140
def test_index_client_conn_error(self):
142
self.mox.StubOutWithMock(api, 'image_list_detailed')
143
exception = glance_exception.ClientConnectionError('clientConnError')
144
api.image_list_detailed(IsA(http.HttpRequest)).AndRaise(exception)
146
self.mox.StubOutWithMock(api, 'tenant_quota_get')
147
api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT) \
150
self.mox.StubOutWithMock(messages, 'error')
151
messages.error(IsA(http.HttpRequest), IsA(basestring))
155
res = self.client.get(INDEX_URL)
157
self.assertTemplateUsed(res, 'nova/images_and_snapshots/index.html')