~ubuntu-branches/ubuntu/saucy/horizon/saucy-updates

1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3
# Copyright 2013 Mirantis Inc.
4
# Copyright 2013 Rackspace Hosting.
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
from django.core.urlresolvers import reverse  # noqa
19
from django import http
20
21
from mox import IsA  # noqa
22
23
from openstack_dashboard import api
24
from openstack_dashboard.test import helpers as test
25
1.1.31 by James Page
Import upstream version 2013.2~rc1
26
if api.trove.with_trove:
27
    from troveclient import common
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
28
29
INDEX_URL = reverse('horizon:project:databases:index')
30
LAUNCH_URL = reverse('horizon:project:databases:launch')
31
DETAILS_URL = reverse('horizon:project:databases:detail', args=['id'])
32
33
34
class DatabaseTests(test.TestCase):
1.1.31 by James Page
Import upstream version 2013.2~rc1
35
    def setUp(self):
36
        if not api.trove.with_trove:
37
            self.skipTest('Skip trove related tests.')
38
        super(DatabaseTests, self).setUp()
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
39
40
    @test.create_stubs(
41
        {api.trove: ('instance_list', 'flavor_list')})
42
    def test_index(self):
43
        # Mock database instances
44
        databases = common.Paginated(self.databases.list())
45
        api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
46
            .AndReturn(databases)
47
        # Mock flavors
48
        api.trove.flavor_list(IsA(http.HttpRequest))\
49
            .AndReturn(self.flavors.list())
50
51
        self.mox.ReplayAll()
52
        res = self.client.get(INDEX_URL)
53
        self.assertTemplateUsed(res, 'project/databases/index.html')
54
55
    @test.create_stubs(
56
        {api.trove: ('instance_list', 'flavor_list')})
57
    def test_index_flavor_exception(self):
58
        # Mock database instances
59
        databases = common.Paginated(self.databases.list())
60
        api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
61
            .AndReturn(databases)
62
        # Mock flavors
63
        api.trove.flavor_list(IsA(http.HttpRequest))\
64
            .AndRaise(self.exceptions.trove)
65
66
        self.mox.ReplayAll()
67
        res = self.client.get(INDEX_URL)
68
        self.assertTemplateUsed(res, 'project/databases/index.html')
69
        self.assertMessageCount(res, error=1)
70
71
    @test.create_stubs(
72
        {api.trove: ('instance_list',)})
73
    def test_index_list_exception(self):
74
        # Mock database instances
75
        api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
76
            .AndRaise(self.exceptions.trove)
77
78
        self.mox.ReplayAll()
79
        res = self.client.get(INDEX_URL)
80
        self.assertTemplateUsed(res, 'project/databases/index.html')
81
        self.assertMessageCount(res, error=1)
82
83
    @test.create_stubs(
84
        {api.trove: ('instance_list', 'flavor_list')})
85
    def test_index_pagination(self):
86
        # Mock database instances
1.1.31 by James Page
Import upstream version 2013.2~rc1
87
        databases = common.Paginated(self.databases.list(),
88
            next_marker="foo")
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
89
        api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
90
            .AndReturn(databases)
91
        # Mock flavors
92
        api.trove.flavor_list(IsA(http.HttpRequest))\
93
            .AndReturn(self.flavors.list())
94
95
        self.mox.ReplayAll()
96
        res = self.client.get(INDEX_URL)
97
        self.assertTemplateUsed(res, 'project/databases/index.html')
98
        self.assertContains(
99
            res, 'marker=6ddc36d9-73db-4e23-b52e-368937d72719')
100
101
    @test.create_stubs(
102
        {api.trove: ('instance_list', 'flavor_list')})
103
    def test_index_flavor_list_exception(self):
104
        #Mocking instances
105
        databases = common.Paginated(self.databases.list())
106
        api.trove.instance_list(IsA(http.HttpRequest), marker=None)\
107
            .AndReturn(databases)
108
        #Mocking flavor list with raising an exception
109
        api.trove.flavor_list(IsA(http.HttpRequest))\
110
            .AndRaise(self.exceptions.trove)
111
112
        self.mox.ReplayAll()
113
114
        res = self.client.get(INDEX_URL)
115
116
        self.assertTemplateUsed(res, 'project/databases/index.html')
117
        self.assertMessageCount(res, error=1)
118
119
    @test.create_stubs({
1.1.31 by James Page
Import upstream version 2013.2~rc1
120
        api.trove: ('flavor_list', 'backup_list',)})
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
121
    def test_launch_instance(self):
1.1.31 by James Page
Import upstream version 2013.2~rc1
122
        api.trove.flavor_list(IsA(http.HttpRequest))\
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
123
            .AndReturn(self.flavors.list())
124
        api.trove.backup_list(IsA(http.HttpRequest))\
125
            .AndReturn(self.database_backups.list())
126
127
        self.mox.ReplayAll()
128
        res = self.client.get(LAUNCH_URL)
129
        self.assertTemplateUsed(res, 'project/databases/launch.html')
130
131
    @test.create_stubs({
1.1.31 by James Page
Import upstream version 2013.2~rc1
132
        api.trove: ('flavor_list', 'backup_list', 'instance_create',)})
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
133
    def test_create_simple_instance(self):
1.1.31 by James Page
Import upstream version 2013.2~rc1
134
        api.trove.flavor_list(IsA(http.HttpRequest))\
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
135
            .AndReturn(self.flavors.list())
136
        api.trove.backup_list(IsA(http.HttpRequest))\
137
            .AndReturn(self.database_backups.list())
138
139
        # Actual create database call
140
        api.trove.instance_create(
141
            IsA(http.HttpRequest),
142
            IsA(unicode),
143
            IsA(int),
144
            IsA(unicode),
145
            databases=None,
146
            restore_point=None,
147
            users=None).AndReturn(self.databases.first())
148
149
        self.mox.ReplayAll()
150
        post = {
151
            'name': "MyDB",
152
            'volume': '1',
153
            'flavor': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
154
        }
155
156
        res = self.client.post(LAUNCH_URL, post)
157
        self.assertRedirectsNoFollow(res, INDEX_URL)
158
159
    @test.create_stubs({
1.1.31 by James Page
Import upstream version 2013.2~rc1
160
        api.trove: ('flavor_list', 'backup_list', 'instance_create',)})
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
161
    def test_create_simple_instance_exception(self):
162
        trove_exception = self.exceptions.nova
1.1.31 by James Page
Import upstream version 2013.2~rc1
163
        api.trove.flavor_list(IsA(http.HttpRequest))\
1.1.30 by Adam Gandelman
Import upstream version 2013.2~b3
164
            .AndReturn(self.flavors.list())
165
        api.trove.backup_list(IsA(http.HttpRequest))\
166
            .AndReturn(self.database_backups.list())
167
168
        # Actual create database call
169
        api.trove.instance_create(
170
            IsA(http.HttpRequest),
171
            IsA(unicode),
172
            IsA(int),
173
            IsA(unicode),
174
            databases=None,
175
            restore_point=None,
176
            users=None).AndRaise(trove_exception)
177
178
        self.mox.ReplayAll()
179
        post = {
180
            'name': "MyDB",
181
            'volume': '1',
182
            'flavor': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
183
        }
184
185
        res = self.client.post(LAUNCH_URL, post)
186
        self.assertRedirectsNoFollow(res, INDEX_URL)
187
188
    @test.create_stubs(
189
        {api.trove: ('instance_get', 'flavor_get',)})
190
    def test_details(self):
191
        api.trove.instance_get(IsA(http.HttpRequest), IsA(unicode))\
192
            .AndReturn(self.databases.first())
193
        api.trove.flavor_get(IsA(http.HttpRequest), IsA(str))\
194
            .AndReturn(self.flavors.first())
195
196
        self.mox.ReplayAll()
197
        res = self.client.get(DETAILS_URL)
198
        self.assertTemplateUsed(res, 'project/databases/detail.html')