Example #1
0
 def testNotEqual(self):
     """Test that unequal instances are unequal."""
     dl = kernel_cmdline.DmLine('0 1 verity a1 a2=v2 a3')
     self.assertNotEqual(dl, '')
     self.assertNotEqual(dl,
                         kernel_cmdline.DmLine('1 1 verity a1 a2=v2 a3'))
     self.assertNotEqual(dl,
                         kernel_cmdline.DmLine('0 2 verity a1 a2=v2 a3'))
     self.assertNotEqual(dl,
                         kernel_cmdline.DmLine('0 1 verit  a1 a2=v2 a3'))
     self.assertNotEqual(dl,
                         kernel_cmdline.DmLine('0 1 verity aN a2=v2 a3'))
Example #2
0
 def testParsesMultiLine(self):
     """Verify that DmDevice correctly handles multiline device."""
     lines = ['vboot none ro 2', '0 1 verity arg', '9 10 type a2']
     dd = kernel_cmdline.DmDevice(lines)
     self.assertEqual('vboot', dd.name)
     self.assertEqual('none', dd.uuid)
     self.assertEqual('ro', dd.flags)
     self.assertEqual(2, dd.num_rows)
     self.assertEqual([
         kernel_cmdline.DmLine('0 1 verity arg'),
         kernel_cmdline.DmLine('9 10 type a2')
     ], dd.rows)
Example #3
0
 def testParsesIgnoresExcessRows(self):
     """Verify that DmDevice ignores excess rows."""
     lines = [
         'vboot none ro 2', '0 1 verity arg', '9 10 type a2', '4 5 t a3'
     ]
     dd = kernel_cmdline.DmDevice(lines)
     self.assertEqual('vboot', dd.name)
     self.assertEqual('none', dd.uuid)
     self.assertEqual('ro', dd.flags)
     self.assertEqual(2, dd.num_rows)
     self.assertEqual([
         kernel_cmdline.DmLine('0 1 verity arg'),
         kernel_cmdline.DmLine('9 10 type a2')
     ], dd.rows)
Example #4
0
 def testAllowsWhitespace(self):
     """Verify that leading/trailing whitespace is ignored."""
     text = '0 1 verity a1 a2=v2 a3'
     dl = kernel_cmdline.DmLine(' %s ' % text)
     self.assertEqual(0, dl.start)
     self.assertEqual(1, dl.num)
     self.assertEqual('verity', dl.target_type)
     self.assertEqual(kernel_cmdline.KernelArgList('a1 a2=v2 a3'), dl.args)
     self.assertEqual(text, dl.Format())
Example #5
0
 def testParses(self):
     """Verify that DmLine correctly parses a line, and returns it."""
     text = '0 1 verity a1 a2=v2 a3'
     dl = kernel_cmdline.DmLine(text)
     self.assertEqual(0, dl.start)
     self.assertEqual(1, dl.num)
     self.assertEqual('verity', dl.target_type)
     self.assertEqual(kernel_cmdline.KernelArgList('a1 a2=v2 a3'), dl.args)
     self.assertEqual(text, dl.Format())
Example #6
0
 def testParsesOneLine(self):
     """Verify that DmDevice correctly handles the results from DmLine."""
     lines = ['vboot none ro 1', '0 1 verity arg']
     dd = kernel_cmdline.DmDevice(lines)
     self.assertEqual('vboot', dd.name)
     self.assertEqual('none', dd.uuid)
     self.assertEqual('ro', dd.flags)
     self.assertEqual(1, dd.num_rows)
     self.assertEqual([kernel_cmdline.DmLine('0 1 verity arg')], dd.rows)
Example #7
0
    def __init__(self, image, cmd_line):
        """Create the hash_image for the rootfs.

    Args:
      image: image_lib.LoopbackPartitions() for the image.
      cmd_line: kernel_cmdline.CommandLine for the kernel.
    """
        self.image = image
        self.cmd_line = cmd_line
        loop_rootfs = image.GetPartitionDevName('ROOT-A')
        self._file = tempfile.NamedTemporaryFile(dir=image.destination,
                                                 delete=False)
        dm_config = cmd_line.GetDmConfig()
        if not dm_config:
            logging.warning(
                "Couldn't grab dm_config. Aborting rootfs hash calculation.")
            # TODO(lamontjones): This should probably raise an exception.
            return
        vroot_dev = dm_config.devices['vroot']
        # Get the verity args from the existing DmConfig.
        rootfs_blocks = int(vroot_dev.GetVerityArg('hashstart').value) // 8
        alg = vroot_dev.GetVerityArg('alg').value
        root_dev = vroot_dev.GetVerityArg('payload').value
        hash_dev = vroot_dev.GetVerityArg('hashtree').value
        salt = vroot_dev.GetVerityArg('salt')

        cmd = [
            'verity', 'mode=create',
            'alg=%s' % alg,
            'payload=%s' % loop_rootfs,
            'payload_blocks=%d' % rootfs_blocks,
            'hashtree=%s' % self._file.name
        ]
        if salt:
            cmd.append('salt=%s' % salt.value)
        verity = cros_build_lib.sudo_run(cmd,
                                         print_cmd=False,
                                         capture_output=True,
                                         encoding='utf-8').stdout
        # verity is a templated DmLine string.
        slave = kernel_cmdline.DmLine(
            verity.replace('ROOT_DEV', root_dev).replace('HASH_DEV', hash_dev))
        vroot_dev.rows[0] = slave
        self.calculated_dm_config = dm_config
        self.calculated_kernel_cmdline = self.cmd_line
        self.hashtree_filename = self._file.name
Example #8
0
 def testEqual(self):
     """Test that equal instances are equal."""
     dl = kernel_cmdline.DmLine('0 1 verity a1 a2=v2 a3')
     self.assertEqual(dl, kernel_cmdline.DmLine('0 1 verity a1 a2=v2 a3'))
     self.assertFalse(dl != kernel_cmdline.DmLine('0 1 verity a1 a2=v2 a3'))