~lutostag/ubuntu/trusty/maas/1.5.4+keystone

« back to all changes in this revision

Viewing changes to src/maasserver/tests/test_views_settings.py

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez
  • Date: 2013-03-04 11:49:44 UTC
  • mto: This revision was merged to the branch mainline in revision 25.
  • Revision ID: package-import@ubuntu.com-20130304114944-azcvu9anlf8mizpa
Tags: upstream-1.3+bzr1452+dfsg
ImportĀ upstreamĀ versionĀ 1.3+bzr1452+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    )
26
26
from maasserver.models import (
27
27
    Config,
 
28
    nodegroup as nodegroup_module,
28
29
    UserProfile,
29
30
    )
30
31
from maasserver.testing import (
 
32
    extract_redirect,
31
33
    get_prefixed_form_data,
32
34
    reload_object,
33
35
    )
34
36
from maasserver.testing.factory import factory
35
 
from maasserver.testing.testcase import AdminLoggedInTestCase
 
37
from maasserver.testing.testcase import (
 
38
    AdminLoggedInTestCase,
 
39
    LoggedInTestCase,
 
40
    )
 
41
from mock import (
 
42
    ANY,
 
43
    call,
 
44
    )
36
45
 
37
46
 
38
47
class SettingsTest(AdminLoggedInTestCase):
43
52
        # logged-in user is not display.
44
53
        [factory.make_user() for i in range(3)]
45
54
        users = UserProfile.objects.all_users()
46
 
        response = self.client.get('/settings/')
 
55
        response = self.client.get(reverse('settings'))
47
56
        doc = fromstring(response.content)
48
57
        tab = doc.cssselect('#users')[0]
49
58
        all_links = [elem.get('href') for elem in tab.cssselect('a')]
107
116
        new_check_compatibility = factory.getRandomBoolean()
108
117
        new_commissioning_distro_series = factory.getRandomEnum(DISTRO_SERIES)
109
118
        response = self.client.post(
110
 
            '/settings/',
 
119
            reverse('settings'),
111
120
            get_prefixed_form_data(
112
121
                prefix='commissioning',
113
122
                data={
131
140
            ))
132
141
 
133
142
    def test_settings_ubuntu_POST(self):
134
 
        new_fallback_master_archive = factory.getRandomBoolean()
135
 
        new_keep_mirror_list_uptodate = factory.getRandomBoolean()
136
 
        new_fetch_new_releases = factory.getRandomBoolean()
137
 
        choices = Config.objects.get_config('update_from_choice')
138
 
        new_update_from = factory.getRandomChoice(choices)
 
143
        new_main_archive = 'http://test.example.com/archive'
 
144
        new_ports_archive = 'http://test2.example.com/archive'
 
145
        new_cloud_images_archive = 'http://test3.example.com/archive'
139
146
        new_default_distro_series = factory.getRandomEnum(DISTRO_SERIES)
140
147
        response = self.client.post(
141
 
            '/settings/',
 
148
            reverse('settings'),
142
149
            get_prefixed_form_data(
143
150
                prefix='ubuntu',
144
151
                data={
145
 
                    'fallback_master_archive': new_fallback_master_archive,
146
 
                    'keep_mirror_list_uptodate': new_keep_mirror_list_uptodate,
147
 
                    'fetch_new_releases': new_fetch_new_releases,
148
 
                    'update_from': new_update_from,
 
152
                    'main_archive': new_main_archive,
 
153
                    'ports_archive': new_ports_archive,
 
154
                    'cloud_images_archive': new_cloud_images_archive,
149
155
                    'default_distro_series': new_default_distro_series,
150
156
                }))
151
157
 
152
 
        self.assertEqual(httplib.FOUND, response.status_code)
 
158
        self.assertEqual(httplib.FOUND, response.status_code, response.content)
153
159
        self.assertEqual(
154
160
            (
155
 
                new_fallback_master_archive,
156
 
                new_keep_mirror_list_uptodate,
157
 
                new_fetch_new_releases,
158
 
                new_update_from,
 
161
                new_main_archive,
 
162
                new_ports_archive,
 
163
                new_cloud_images_archive,
159
164
                new_default_distro_series,
160
165
            ),
161
166
            (
162
 
                Config.objects.get_config('fallback_master_archive'),
163
 
                Config.objects.get_config('keep_mirror_list_uptodate'),
164
 
                Config.objects.get_config('fetch_new_releases'),
165
 
                Config.objects.get_config('update_from'),
 
167
                Config.objects.get_config('main_archive'),
 
168
                Config.objects.get_config('ports_archive'),
 
169
                Config.objects.get_config('cloud_images_archive'),
166
170
                Config.objects.get_config('default_distro_series'),
167
171
            ))
168
172
 
169
 
    def test_settings_add_archive_POST(self):
170
 
        choices = Config.objects.get_config('update_from_choice')
 
173
    def test_settings_kernelopts_POST(self):
 
174
        new_kernel_opts = "--new='arg' --flag=1 other"
171
175
        response = self.client.post(
172
 
            '/settings/archives/add/',
173
 
            data={'archive_name': 'my.hostname.com'}
174
 
        )
175
 
        new_choices = Config.objects.get_config('update_from_choice')
 
176
            reverse('settings'),
 
177
            get_prefixed_form_data(
 
178
                prefix='kernelopts',
 
179
                data={
 
180
                    'kernel_opts': new_kernel_opts,
 
181
                }))
176
182
 
177
183
        self.assertEqual(httplib.FOUND, response.status_code)
178
 
        self.assertItemsEqual(
179
 
            choices + [['my.hostname.com', 'my.hostname.com']],
180
 
            new_choices)
 
184
        self.assertEqual(
 
185
            new_kernel_opts,
 
186
            Config.objects.get_config('kernel_opts'))
181
187
 
182
188
    def test_settings_contains_form_to_accept_all_nodegroups(self):
183
189
        factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
184
 
        response = self.client.get('/settings/')
 
190
        response = self.client.get(reverse('settings'))
185
191
        doc = fromstring(response.content)
186
192
        forms = doc.cssselect('form#accept_all_pending_nodegroups')
187
193
        self.assertEqual(1, len(forms))
188
194
 
189
195
    def test_settings_contains_form_to_reject_all_nodegroups(self):
190
196
        factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
191
 
        response = self.client.get('/settings/')
 
197
        response = self.client.get(reverse('settings'))
192
198
        doc = fromstring(response.content)
193
199
        forms = doc.cssselect('form#reject_all_pending_nodegroups')
194
200
        self.assertEqual(1, len(forms))
198
204
            factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
199
205
            factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
200
206
        }
201
 
        response = self.client.post('/settings/', {'mass_accept_submit': 1})
 
207
        response = self.client.post(
 
208
            reverse('settings'), {'mass_accept_submit': 1})
202
209
        self.assertEqual(httplib.FOUND, response.status_code)
203
210
        self.assertEqual(
204
211
            [reload_object(nodegroup).status for nodegroup in nodegroups],
209
216
            factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
210
217
            factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
211
218
        }
212
 
        response = self.client.post('/settings/', {'mass_reject_submit': 1})
 
219
        response = self.client.post(
 
220
            reverse('settings'), {'mass_reject_submit': 1})
213
221
        self.assertEqual(httplib.FOUND, response.status_code)
214
222
        self.assertEqual(
215
223
            [reload_object(nodegroup).status for nodegroup in nodegroups],
216
224
            [NODEGROUP_STATUS.REJECTED] * 2)
217
225
 
218
 
# Settable attributes on User.
 
226
    def test_settings_import_boot_images_calls_tasks(self):
 
227
        recorder = self.patch(nodegroup_module, 'import_boot_images')
 
228
        accepted_nodegroups = [
 
229
            factory.make_node_group(status=NODEGROUP_STATUS.ACCEPTED),
 
230
            factory.make_node_group(status=NODEGROUP_STATUS.ACCEPTED),
 
231
        ]
 
232
        response = self.client.post(
 
233
            reverse('settings'), {'import_all_boot_images': 1})
 
234
        self.assertEqual(httplib.FOUND, response.status_code)
 
235
        calls = [
 
236
           call(queue=nodegroup.work_queue, kwargs=ANY)
 
237
           for nodegroup in accepted_nodegroups
 
238
        ]
 
239
        self.assertItemsEqual(calls, recorder.apply_async.call_args_list)
 
240
 
 
241
    def test_cluster_no_boot_images_message_displayed_if_no_boot_images(self):
 
242
        nodegroup = factory.make_node_group(
 
243
            status=NODEGROUP_STATUS.ACCEPTED)
 
244
        response = self.client.get(reverse('settings'))
 
245
        document = fromstring(response.content)
 
246
        nodegroup_row = document.xpath("//tr[@id='%s']" % nodegroup.uuid)[0]
 
247
        self.assertIn('no boot images', nodegroup_row.text_content())
 
248
 
 
249
 
 
250
class NonAdminSettingsTest(LoggedInTestCase):
 
251
 
 
252
    def test_settings_import_boot_images_reserved_to_admin(self):
 
253
        response = self.client.post(
 
254
            reverse('settings'), {'import_all_boot_images': 1})
 
255
        self.assertEqual(reverse('login'), extract_redirect(response))
 
256
 
 
257
 
 
258
 # Settable attributes on User.
219
259
user_attributes = [
220
260
    'email',
221
261
    'is_superuser',