~blake-rouse/curtin/uefi-clear-reorder

« back to all changes in this revision

Viewing changes to tests/unittests/test_curthooks.py

  • Committer: Blake Rouse
  • Date: 2017-05-12 00:49:43 UTC
  • Revision ID: blake.rouse@canonical.com-20170512004943-eg8j0iu5tz2pv7h8
Refactor from code review, add more tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
from mock import call, patch, MagicMock
4
4
import shutil
5
5
import tempfile
6
 
from textwrap import dedent
7
6
 
8
7
from curtin.commands import curthooks
9
8
from curtin import util
314
313
                'install-grub', '--uefi', self.target, '/dev/vdb'],),
315
314
            self.mock_subp.call_args_list[0][0])
316
315
 
317
 
    def test_grub_install_uefi_updates_nvram_skips_clear_and_reorder(self):
 
316
    def test_grub_install_uefi_updates_nvram_skips_remove_and_reorder(self):
318
317
        self.add_patch('curtin.util.install_packages', 'mock_install')
319
318
        self.add_patch('curtin.util.has_pkg_available', 'mock_haspkg')
 
319
        self.add_patch('curtin.util.get_efibootmgr', 'mock_efibootmgr')
320
320
        self.mock_is_uefi_bootable.return_value = True
321
321
        cfg = {
322
322
            'grub': {
323
323
                'install_devices': ['/dev/vdb'],
324
324
                'update_nvram': True,
325
 
                'clear_uefi_loaders': False,
 
325
                'remove_old_uefi_loaders': False,
326
326
                'reorder_uefi': False,
327
327
            },
328
328
        }
329
329
        self.subp_output.append(('', ''))
330
330
        self.mock_haspkg.return_value = False
 
331
        self.mock_efibootmgr.return_value = {
 
332
            'current': '0000',
 
333
            'entries': {
 
334
                '0000': {
 
335
                    'name': 'ubuntu',
 
336
                    'path': (
 
337
                        'HD(1,GPT)/File(\\EFI\\ubuntu\\shimx64.efi)'),
 
338
                }
 
339
            }
 
340
        }
331
341
        curthooks.setup_grub(cfg, self.target)
332
342
        self.assertEquals(
333
343
            ([
336
346
                self.target, '/dev/vdb'],),
337
347
            self.mock_subp.call_args_list[0][0])
338
348
 
339
 
    def test_grub_install_uefi_updates_nvram_clears_old_loaders(self):
 
349
    def test_grub_install_uefi_updates_nvram_removes_old_loaders(self):
340
350
        self.add_patch('curtin.util.install_packages', 'mock_install')
341
351
        self.add_patch('curtin.util.has_pkg_available', 'mock_haspkg')
 
352
        self.add_patch('curtin.util.get_efibootmgr', 'mock_efibootmgr')
342
353
        self.mock_is_uefi_bootable.return_value = True
343
354
        cfg = {
344
355
            'grub': {
345
356
                'install_devices': ['/dev/vdb'],
346
357
                'update_nvram': True,
347
 
                'clear_uefi_loaders': True,
 
358
                'remove_old_uefi_loaders': True,
348
359
                'reorder_uefi': False,
349
360
            },
350
361
        }
351
362
        self.subp_output.append(('', ''))
352
 
        self.in_chroot_subp_output.append((dedent(
353
 
            """\
354
 
            BootCurrent: 0000
355
 
            Timeout: 1 seconds
356
 
            BootOrder: 0000,0001,0002
357
 
            Boot0000* ubuntu HD(1,GPT,040f33cd,0x800,0x100000)\
358
 
            /File(\\EFI\\ubuntu\\shimx64.efi)
359
 
            Boot0001* centos HD(1,GPT,040f33cd,0x800,0x100000)\
360
 
            /File(\\EFI\\centos\\shimx64.efi)
361
 
            Boot0002* UEFI:Network Device BBS(131,,0x0)
362
 
            """), ''))
 
363
        self.mock_efibootmgr.return_value = {
 
364
            'current': '0000',
 
365
            'entries': {
 
366
                '0000': {
 
367
                    'name': 'ubuntu',
 
368
                    'path': (
 
369
                        'HD(1,GPT)/File(\\EFI\\ubuntu\\shimx64.efi)'),
 
370
                },
 
371
                '0001': {
 
372
                    'name': 'centos',
 
373
                    'path': (
 
374
                        'HD(1,GPT)/File(\\EFI\\centos\\shimx64.efi)'),
 
375
                },
 
376
                '0002': {
 
377
                    'name': 'sles',
 
378
                    'path': (
 
379
                        'HD(1,GPT)/File(\\EFI\\sles\\shimx64.efi)'),
 
380
                },
 
381
            }
 
382
        }
 
383
        self.in_chroot_subp_output.append(('', ''))
363
384
        self.in_chroot_subp_output.append(('', ''))
364
385
        self.mock_haspkg.return_value = False
365
386
        curthooks.setup_grub(cfg, self.target)
366
387
        self.assertEquals(
367
 
            (['efibootmgr', '-B', '-b', '0001'],),
368
 
            self.mock_in_chroot_subp.call_args_list[1][0])
 
388
            ['efibootmgr', '-B', '-b'],
 
389
            self.mock_in_chroot_subp.call_args_list[0][0][0][:3])
 
390
        self.assertEquals(
 
391
            ['efibootmgr', '-B', '-b'],
 
392
            self.mock_in_chroot_subp.call_args_list[1][0][0][:3])
 
393
        self.assertEquals(
 
394
            set(['0001', '0002']),
 
395
            set([
 
396
                self.mock_in_chroot_subp.call_args_list[0][0][0][3],
 
397
                self.mock_in_chroot_subp.call_args_list[1][0][0][3]]))
369
398
 
370
399
    def test_grub_install_uefi_updates_nvram_reorders_loaders(self):
371
400
        self.add_patch('curtin.util.install_packages', 'mock_install')
372
401
        self.add_patch('curtin.util.has_pkg_available', 'mock_haspkg')
 
402
        self.add_patch('curtin.util.get_efibootmgr', 'mock_efibootmgr')
373
403
        self.mock_is_uefi_bootable.return_value = True
374
404
        cfg = {
375
405
            'grub': {
376
406
                'install_devices': ['/dev/vdb'],
377
407
                'update_nvram': True,
378
 
                'clear_uefi_loaders': False,
 
408
                'remove_old_uefi_loaders': False,
379
409
                'reorder_uefi': True,
380
410
            },
381
411
        }
382
412
        self.subp_output.append(('', ''))
383
 
        self.in_chroot_subp_output.append((dedent(
384
 
            """\
385
 
            BootCurrent: 0001
386
 
            Timeout: 1 seconds
387
 
            BootOrder: 0000,0001
388
 
            Boot0000* ubuntu
389
 
            Boot0001* UEFI:Network Device
390
 
            """), ''))
 
413
        self.mock_efibootmgr.return_value = {
 
414
            'current': '0001',
 
415
            'order': ['0000', '0001'],
 
416
            'entries': {
 
417
                '0000': {
 
418
                    'name': 'ubuntu',
 
419
                    'path': (
 
420
                        'HD(1,GPT)/File(\\EFI\\ubuntu\\shimx64.efi)'),
 
421
                },
 
422
                '0001': {
 
423
                    'name': 'UEFI:Network Device',
 
424
                    'path': 'BBS(131,,0x0)',
 
425
                },
 
426
            }
 
427
        }
391
428
        self.in_chroot_subp_output.append(('', ''))
392
429
        self.mock_haspkg.return_value = False
393
430
        curthooks.setup_grub(cfg, self.target)
394
431
        self.assertEquals(
395
432
            (['efibootmgr', '-o', '0001,0000'],),
396
 
            self.mock_in_chroot_subp.call_args_list[1][0])
 
433
            self.mock_in_chroot_subp.call_args_list[0][0])
397
434
 
398
435
 
399
436
class TestUbuntuCoreHooks(CurthooksBase):