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'))
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)
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)
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())
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())
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)
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
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'))