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(
142
149
get_prefixed_form_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,
152
self.assertEqual(httplib.FOUND, response.status_code)
158
self.assertEqual(httplib.FOUND, response.status_code, response.content)
153
159
self.assertEqual(
155
new_fallback_master_archive,
156
new_keep_mirror_list_uptodate,
157
new_fetch_new_releases,
163
new_cloud_images_archive,
159
164
new_default_distro_series,
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'),
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'}
175
new_choices = Config.objects.get_config('update_from_choice')
177
get_prefixed_form_data(
180
'kernel_opts': new_kernel_opts,
177
183
self.assertEqual(httplib.FOUND, response.status_code)
178
self.assertItemsEqual(
179
choices + [['my.hostname.com', 'my.hostname.com']],
186
Config.objects.get_config('kernel_opts'))
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))
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))
209
216
factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
210
217
factory.make_node_group(status=NODEGROUP_STATUS.PENDING),
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)
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),
232
response = self.client.post(
233
reverse('settings'), {'import_all_boot_images': 1})
234
self.assertEqual(httplib.FOUND, response.status_code)
236
call(queue=nodegroup.work_queue, kwargs=ANY)
237
for nodegroup in accepted_nodegroups
239
self.assertItemsEqual(calls, recorder.apply_async.call_args_list)
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())
250
class NonAdminSettingsTest(LoggedInTestCase):
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))
258
# Settable attributes on User.
219
259
user_attributes = [