~rvb/maas/transaction-1.7-bug-1409852

« back to all changes in this revision

Viewing changes to src/maasserver/models/tests/test_bootimage.py

merged upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
    def test_have_image_returns_False_if_image_not_available(self):
31
31
        self.assertFalse(
32
32
            BootImage.objects.have_image(
33
 
                factory.make_node_group(), **make_boot_image_params()))
 
33
                factory.make_NodeGroup(), **make_boot_image_params()))
34
34
 
35
35
    def test_have_image_returns_True_if_image_available(self):
36
 
        nodegroup = factory.make_node_group()
 
36
        nodegroup = factory.make_NodeGroup()
37
37
        params = make_boot_image_params()
38
 
        factory.make_boot_image(nodegroup=nodegroup, **params)
 
38
        factory.make_BootImage(nodegroup=nodegroup, **params)
39
39
        self.assertTrue(BootImage.objects.have_image(nodegroup, **params))
40
40
 
41
41
    def test_register_image_registers_new_image(self):
42
 
        nodegroup = factory.make_node_group()
 
42
        nodegroup = factory.make_NodeGroup()
43
43
        params = make_boot_image_params()
44
44
        BootImage.objects.register_image(nodegroup, **params)
45
45
        self.assertTrue(BootImage.objects.have_image(nodegroup, **params))
46
46
 
47
47
    def test_register_image_leaves_existing_image_intact(self):
48
 
        nodegroup = factory.make_node_group()
 
48
        nodegroup = factory.make_NodeGroup()
49
49
        params = make_boot_image_params()
50
 
        factory.make_boot_image(nodegroup=nodegroup, **params)
 
50
        factory.make_BootImage(nodegroup=nodegroup, **params)
51
51
        BootImage.objects.register_image(nodegroup, **params)
52
52
        self.assertTrue(BootImage.objects.have_image(nodegroup, **params))
53
53
 
54
54
    def test_register_image_updates_subarches_for_existing_image(self):
55
 
        nodegroup = factory.make_node_group()
 
55
        nodegroup = factory.make_NodeGroup()
56
56
        params = make_boot_image_params()
57
 
        image = factory.make_boot_image(nodegroup=nodegroup, **params)
 
57
        image = factory.make_BootImage(nodegroup=nodegroup, **params)
58
58
        params['supported_subarches'] = factory.make_name("subarch")
59
59
        BootImage.objects.register_image(nodegroup, **params)
60
60
        image = reload_object(image)
62
62
            params['supported_subarches'], image.supported_subarches)
63
63
 
64
64
    def test_register_image_ignores_empty_subarches_for_existing_image(self):
65
 
        nodegroup = factory.make_node_group()
 
65
        nodegroup = factory.make_NodeGroup()
66
66
        params = make_boot_image_params()
67
 
        image = factory.make_boot_image(nodegroup=nodegroup, **params)
 
67
        image = factory.make_BootImage(nodegroup=nodegroup, **params)
68
68
        original_supported_subarches = params['supported_subarches']
69
69
        params['supported_subarches'] = ''
70
70
        BootImage.objects.register_image(nodegroup, **params)
73
73
            original_supported_subarches, image.supported_subarches)
74
74
 
75
75
    def test_register_image_sets_xinstall_path_and_type(self):
76
 
        nodegroup = factory.make_node_group()
 
76
        nodegroup = factory.make_NodeGroup()
77
77
        params = make_boot_image_params()
78
78
        params['purpose'] = 'xinstall'
79
79
        params['xinstall_path'] = factory.make_name('xi_path')
83
83
        self.assertEqual(params['xinstall_type'], image.xinstall_type)
84
84
 
85
85
    def test_register_image_update_xinstall_path_and_type(self):
86
 
        nodegroup = factory.make_node_group()
 
86
        nodegroup = factory.make_NodeGroup()
87
87
        params = make_boot_image_params()
88
88
        params['purpose'] = 'xinstall'
89
89
        params['xinstall_path'] = factory.make_name('xi_path')
90
90
        params['xinstall_type'] = factory.make_name('xi_type')
91
 
        image = factory.make_boot_image(nodegroup=nodegroup, **params)
 
91
        image = factory.make_BootImage(nodegroup=nodegroup, **params)
92
92
        params['xinstall_path'] = factory.make_name('xi_path')
93
93
        params['xinstall_type'] = factory.make_name('xi_type')
94
94
        BootImage.objects.register_image(nodegroup, **params)
97
97
        self.assertEqual(params['xinstall_type'], image.xinstall_type)
98
98
 
99
99
    def test_register_image_missing_xinstall_path_and_type(self):
100
 
        nodegroup = factory.make_node_group()
 
100
        nodegroup = factory.make_NodeGroup()
101
101
        params = make_boot_image_params()
102
102
        params['purpose'] = 'xinstall'
103
103
        self.assertRaises(
108
108
        osystem = Config.objects.get_config('commissioning_osystem')
109
109
        series = Config.objects.get_config('commissioning_distro_series')
110
110
        result = BootImage.objects.get_default_arch_image_in_nodegroup(
111
 
            factory.make_node_group(), osystem, series,
 
111
            factory.make_NodeGroup(), osystem, series,
112
112
            factory.make_name('purpose'))
113
113
        self.assertIsNone(result)
114
114
 
115
115
    def test_default_arch_image_returns_only_matching_image(self):
116
 
        nodegroup = factory.make_node_group()
 
116
        nodegroup = factory.make_NodeGroup()
117
117
        osystem = factory.make_name('os')
118
118
        series = factory.make_name('series')
119
119
        label = factory.make_name('label')
120
120
        arch = factory.make_name('arch')
121
121
        purpose = factory.make_name("purpose")
122
 
        factory.make_boot_image(
 
122
        factory.make_BootImage(
123
123
            osystem=osystem, architecture=arch,
124
124
            release=series, label=label,
125
125
            nodegroup=nodegroup, purpose=purpose)
128
128
        self.assertEqual(result.architecture, arch)
129
129
 
130
130
    def test_default_arch_image_prefers_i386(self):
131
 
        nodegroup = factory.make_node_group()
 
131
        nodegroup = factory.make_NodeGroup()
132
132
        osystem = factory.make_name('os')
133
133
        series = factory.make_name('series')
134
134
        label = factory.make_name('label')
135
135
        purpose = factory.make_name("purpose")
136
136
        for arch in ['amd64', 'axp', 'i386', 'm88k']:
137
 
            factory.make_boot_image(
 
137
            factory.make_BootImage(
138
138
                osystem=osystem, architecture=arch,
139
139
                release=series, nodegroup=nodegroup,
140
140
                purpose=purpose, label=label)
143
143
        self.assertEqual(result.architecture, "i386")
144
144
 
145
145
    def test_default_arch_image_returns_arbitrary_pick_if_all_else_fails(self):
146
 
        nodegroup = factory.make_node_group()
 
146
        nodegroup = factory.make_NodeGroup()
147
147
        osystem = factory.make_name('os')
148
148
        series = factory.make_name('series')
149
149
        label = factory.make_name('label')
150
150
        purpose = factory.make_name("purpose")
151
151
        images = [
152
 
            factory.make_boot_image(
 
152
            factory.make_BootImage(
153
153
                osystem=osystem, architecture=factory.make_name('arch'),
154
154
                release=series, label=label, nodegroup=nodegroup,
155
155
                purpose=purpose)
161
161
            images)
162
162
 
163
163
    def test_default_arch_image_copes_with_subarches(self):
164
 
        nodegroup = factory.make_node_group()
 
164
        nodegroup = factory.make_NodeGroup()
165
165
        arch = 'i386'
166
166
        osystem = factory.make_name('os')
167
167
        series = factory.make_name('series')
168
168
        label = factory.make_name('label')
169
169
        purpose = factory.make_name("purpose")
170
170
        images = [
171
 
            factory.make_boot_image(
 
171
            factory.make_BootImage(
172
172
                osystem=osystem, architecture=arch,
173
173
                subarchitecture=factory.make_name('sub'),
174
174
                release=series, label=label, nodegroup=nodegroup,
181
181
            images)
182
182
 
183
183
    def test_get_usable_architectures_returns_supported_arches(self):
184
 
        nodegroup = factory.make_node_group()
 
184
        nodegroup = factory.make_NodeGroup()
185
185
        arches = [
186
186
            (factory.make_name('arch'), factory.make_name('subarch')),
187
187
            (factory.make_name('arch'), factory.make_name('subarch'))]
188
188
        for arch, subarch in arches:
189
 
            factory.make_boot_image(
 
189
            factory.make_BootImage(
190
190
                architecture=arch, subarchitecture=subarch,
191
191
                nodegroup=nodegroup, purpose='install')
192
 
            factory.make_boot_image(
 
192
            factory.make_BootImage(
193
193
                architecture=arch, subarchitecture=subarch,
194
194
                nodegroup=nodegroup, purpose='commissioning')
195
195
        expected = ["%s/%s" % (arch, subarch) for arch, subarch in arches]
198
198
            BootImage.objects.get_usable_architectures(nodegroup))
199
199
 
200
200
    def test_get_usable_architectures_uses_given_nodegroup(self):
201
 
        nodegroup = factory.make_node_group()
 
201
        nodegroup = factory.make_NodeGroup()
202
202
        arch = factory.make_name('arch')
203
 
        factory.make_boot_image(
 
203
        factory.make_BootImage(
204
204
            architecture=arch, nodegroup=nodegroup, purpose='install')
205
 
        factory.make_boot_image(
 
205
        factory.make_BootImage(
206
206
            architecture=arch, nodegroup=nodegroup,
207
207
            purpose='commissioning')
208
208
        self.assertItemsEqual(
209
209
            [],
210
210
            BootImage.objects.get_usable_architectures(
211
 
                factory.make_node_group()))
 
211
                factory.make_NodeGroup()))
212
212
 
213
213
    def test_get_usable_architectures_requires_commissioning_image(self):
214
214
        arch = factory.make_name('arch')
215
 
        nodegroup = factory.make_node_group()
216
 
        factory.make_boot_image(
 
215
        nodegroup = factory.make_NodeGroup()
 
216
        factory.make_BootImage(
217
217
            architecture=arch, nodegroup=nodegroup, purpose='install')
218
218
        self.assertItemsEqual(
219
219
            [],
221
221
 
222
222
    def test_get_usable_architectures_requires_install_image(self):
223
223
        arch = factory.make_name('arch')
224
 
        nodegroup = factory.make_node_group()
225
 
        factory.make_boot_image(
 
224
        nodegroup = factory.make_NodeGroup()
 
225
        factory.make_BootImage(
226
226
            architecture=arch, nodegroup=nodegroup, purpose='commissioning')
227
227
        self.assertItemsEqual(
228
228
            [],
233
233
        arch = factory.make_name('arch')
234
234
        subarch = factory.make_name('sub')
235
235
        release = factory.make_name('release')
236
 
        nodegroup = factory.make_node_group()
 
236
        nodegroup = factory.make_NodeGroup()
237
237
        purpose = factory.make_name("purpose")
238
 
        boot_image = factory.make_boot_image(
 
238
        boot_image = factory.make_BootImage(
239
239
            nodegroup=nodegroup, osystem=osystem, architecture=arch,
240
240
            subarchitecture=subarch, release=release, purpose=purpose,
241
241
            label=factory.make_name('label'))
252
252
        arch = factory.make_name('arch')
253
253
        primary_subarch = factory.make_name('primary_subarch')
254
254
        release = factory.make_name('release')
255
 
        nodegroup = factory.make_node_group()
 
255
        nodegroup = factory.make_NodeGroup()
256
256
        purpose = factory.make_name("purpose")
257
257
        supported_subarches = [
258
258
            factory.make_name("supported1"), factory.make_name("supported2")]
259
259
 
260
 
        boot_image = factory.make_boot_image(
 
260
        boot_image = factory.make_BootImage(
261
261
            nodegroup=nodegroup, osystem=osystem, architecture=arch,
262
262
            subarchitecture=primary_subarch, release=release, purpose=purpose,
263
263
            label=factory.make_name('label'),
276
276
        arch = factory.make_name('arch')
277
277
        subarch = factory.make_name('sub')
278
278
        release = factory.make_name('release')
279
 
        nodegroup = factory.make_node_group()
 
279
        nodegroup = factory.make_NodeGroup()
280
280
        purpose = factory.make_name("purpose")
281
 
        relevant_image = factory.make_boot_image(
 
281
        relevant_image = factory.make_BootImage(
282
282
            nodegroup=nodegroup, osystem=osystem, architecture=arch,
283
283
            subarchitecture=subarch, release=release, purpose=purpose,
284
284
            label=factory.make_name('label'))
285
285
 
286
286
        # Create a bunch of more recent but irrelevant BootImages..
287
 
        factory.make_boot_image(
288
 
            nodegroup=factory.make_node_group(), osystem=osystem,
 
287
        factory.make_BootImage(
 
288
            nodegroup=factory.make_NodeGroup(), osystem=osystem,
289
289
            architecture=arch, subarchitecture=subarch, release=release,
290
290
            purpose=purpose, label=factory.make_name('label'))
291
 
        factory.make_boot_image(
 
291
        factory.make_BootImage(
292
292
            nodegroup=nodegroup, osystem=osystem,
293
293
            architecture=factory.make_name('arch'),
294
294
            subarchitecture=subarch, release=release, purpose=purpose,
295
295
            label=factory.make_name('label'))
296
 
        factory.make_boot_image(
 
296
        factory.make_BootImage(
297
297
            nodegroup=nodegroup, osystem=osystem, architecture=arch,
298
298
            subarchitecture=factory.make_name('subarch'),
299
299
            release=release, purpose=purpose,
300
300
            label=factory.make_name('label'))
301
 
        factory.make_boot_image(
 
301
        factory.make_BootImage(
302
302
            nodegroup=nodegroup, osystem=osystem,
303
303
            architecture=factory.make_name('arch'),
304
304
            subarchitecture=subarch,
305
305
            release=factory.make_name('release'), purpose=purpose,
306
306
            label=factory.make_name('label'))
307
 
        factory.make_boot_image(
 
307
        factory.make_BootImage(
308
308
            nodegroup=nodegroup, osystem=osystem,
309
309
            architecture=factory.make_name('arch'),
310
310
            subarchitecture=subarch, release=release,
311
311
            purpose=factory.make_name('purpose'),
312
312
            label=factory.make_name('label'))
313
 
        factory.make_boot_image(
 
313
        factory.make_BootImage(
314
314
            nodegroup=nodegroup, osystem=factory.make_name('os'),
315
315
            architecture=factory.make_name('arch'),
316
316
            subarchitecture=subarch, release=release,
323
323
                nodegroup, osystem, arch, subarch, release, purpose))
324
324
 
325
325
    def test_get_usable_osystems_returns_supported_osystems(self):
326
 
        nodegroup = factory.make_node_group()
 
326
        nodegroup = factory.make_NodeGroup()
327
327
        osystems = [
328
328
            factory.make_name('os'),
329
329
            factory.make_name('os'),
330
330
            ]
331
331
        for osystem in osystems:
332
 
            factory.make_boot_image(
 
332
            factory.make_BootImage(
333
333
                osystem=osystem,
334
334
                nodegroup=nodegroup)
335
335
        self.assertItemsEqual(
337
337
            BootImage.objects.get_usable_osystems(nodegroup))
338
338
 
339
339
    def test_get_usable_osystems_uses_given_nodegroup(self):
340
 
        nodegroup = factory.make_node_group()
 
340
        nodegroup = factory.make_NodeGroup()
341
341
        osystem = factory.make_name('os')
342
 
        factory.make_boot_image(
 
342
        factory.make_BootImage(
343
343
            osystem=osystem, nodegroup=nodegroup)
344
344
        self.assertItemsEqual(
345
345
            [],
346
346
            BootImage.objects.get_usable_osystems(
347
 
                factory.make_node_group()))
 
347
                factory.make_NodeGroup()))
348
348
 
349
349
    def test_get_usable_releases_returns_supported_releases(self):
350
 
        nodegroup = factory.make_node_group()
 
350
        nodegroup = factory.make_NodeGroup()
351
351
        osystem = factory.make_name('os')
352
352
        releases = [
353
353
            factory.make_name('release'),
354
354
            factory.make_name('release'),
355
355
            ]
356
356
        for release in releases:
357
 
            factory.make_boot_image(
 
357
            factory.make_BootImage(
358
358
                osystem=osystem,
359
359
                release=release,
360
360
                nodegroup=nodegroup)
363
363
            BootImage.objects.get_usable_releases(nodegroup, osystem))
364
364
 
365
365
    def test_get_usable_releases_uses_given_nodegroup(self):
366
 
        nodegroup = factory.make_node_group()
 
366
        nodegroup = factory.make_NodeGroup()
367
367
        osystem = factory.make_name('os')
368
368
        release = factory.make_name('release')
369
 
        factory.make_boot_image(
 
369
        factory.make_BootImage(
370
370
            osystem=osystem, release=release, nodegroup=nodegroup)
371
371
        self.assertItemsEqual(
372
372
            [],
373
373
            BootImage.objects.get_usable_releases(
374
 
                factory.make_node_group(), osystem))
 
374
                factory.make_NodeGroup(), osystem))
375
375
 
376
376
    def test_get_usable_releases_uses_given_osystem(self):
377
 
        nodegroup = factory.make_node_group()
 
377
        nodegroup = factory.make_NodeGroup()
378
378
        osystem = factory.make_name('os')
379
379
        release = factory.make_name('release')
380
 
        factory.make_boot_image(
 
380
        factory.make_BootImage(
381
381
            osystem=osystem, release=release, nodegroup=nodegroup)
382
382
        self.assertItemsEqual(
383
383
            [],
384
384
            BootImage.objects.get_usable_releases(
385
 
                factory.make_node_group(), factory.make_name('os')))
 
385
                factory.make_NodeGroup(), factory.make_name('os')))