| # -*- coding: utf-8 -*- |
| # Copyright 2018 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Unit tests for build_dlc.""" |
| |
| from __future__ import print_function |
| |
| import os |
| |
| from chromite.lib import cros_test_lib |
| from chromite.lib import osutils |
| from chromite.scripts import build_dlc |
| |
| |
| _SRC_DIR = '/tmp/src/' |
| _FS_TYPE_SQUASHFS = 'squashfs' |
| _FS_TYPE_EXT4 = 'ext4' |
| _PRE_ALLOCATED_BLOCKS = 100 |
| _VERSION = '1.0' |
| _ID = 'id' |
| _NAME = 'name' |
| |
| |
| def GetDLCGenerator(temp_dir, fs_type): |
| """Factory method for a DLCGenerator object""" |
| return build_dlc.DLCGenerator(temp_dir, temp_dir, _SRC_DIR, fs_type, |
| _PRE_ALLOCATED_BLOCKS, _VERSION, _ID, _NAME) |
| |
| |
| class HashFileTest(cros_test_lib.TempDirTestCase): |
| """Test build_dlc.HashFile""" |
| def testHashFile(self): |
| """Test the hash of a simple file.""" |
| file_path = os.path.join(self.tempdir, 'f.txt') |
| osutils.WriteFile(file_path, '0123') |
| hash_value = build_dlc.HashFile(file_path) |
| self.assertEqual(hash_value, |
| '1be2e452b46d7a0d9656bbb1f768e824' |
| '8eba1b75baed65f5d99eafa948899a6a') |
| |
| |
| class SquashOwnershipsTest(cros_test_lib.RunCommandTempDirTestCase): |
| """Test build_dlc.SquashOwnershipsTest""" |
| def testSquashOwnerships(self): |
| GetDLCGenerator(self.tempdir, _FS_TYPE_EXT4).SquashOwnerships(self.tempdir) |
| self.assertCommandContains(['chown', '-R', '0:0']) |
| self.assertCommandContains(['find']) |
| |
| class CreateExt4ImageTest(cros_test_lib.RunCommandTempDirTestCase): |
| """Test build_dlc.CreateExt4Image""" |
| def testCreateExt4Image(self): |
| """Test that command is run with correct parameters.""" |
| GetDLCGenerator(self.tempdir, _FS_TYPE_EXT4).CreateExt4Image() |
| self.assertCommandContains(['/sbin/mkfs.ext4', '-b', '4096', '-O', |
| '^has_journal']) |
| self.assertCommandContains(['mount', '-o', 'loop,rw']) |
| self.assertCommandContains(['cp', '-a', _SRC_DIR]) |
| self.assertCommandContains(['umount']) |
| self.assertCommandContains(['/sbin/e2fsck', '-y', '-f']) |
| self.assertCommandContains(['/sbin/resize2fs', '-M']) |
| |
| |
| class CreateSquashfsImageTest(cros_test_lib.RunCommandTempDirTestCase): |
| """Test build_dlc.CreateImageSquashfs""" |
| def testCreateSquashfsImage(self): |
| """Test that commands are run with correct parameters.""" |
| GetDLCGenerator(self.tempdir, _FS_TYPE_SQUASHFS).CreateSquashfsImage() |
| self.assertCommandContains(['mksquashfs', '-4k-align', '-noappend']) |
| |
| |
| class GetImageloaderJsonContentTest(cros_test_lib.TestCase): |
| """Test build_dlc.GetImageloaderJsonContent""" |
| def testGetImageloaderJsonContent(self): |
| """Test that GetImageloaderJsonContent returns correct content.""" |
| blocks = 100 |
| content = GetDLCGenerator("", _FS_TYPE_SQUASHFS).GetImageloaderJsonContent( |
| '01234567', 'deadbeef', blocks) |
| self.assertEqual(content, { |
| 'fs-type': _FS_TYPE_SQUASHFS, |
| 'pre-allocated-size': _PRE_ALLOCATED_BLOCKS * 4096, |
| 'id': 'id', |
| 'size': blocks * 4096, |
| 'table-sha256-hash': 'deadbeef', |
| 'name': _NAME, |
| 'image-sha256-hash': '01234567', |
| 'image-type': 'dlc', |
| 'version': _VERSION, |
| 'is-removable': True, |
| 'manifest-version': 1, |
| }) |