blob: 3b495587f023349f4960d5dffb549c61aff50884 [file] [log] [blame]
# -*- 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.
"""Test the partition_lib module."""
from __future__ import print_function
import os
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.lib.paygen import partition_lib
class ExtractRootTest(cros_test_lib.MockTempDirTestCase):
"""Test partition_lib.ExtractRoot"""
def testTruncate(self):
"""Test truncating on extraction."""
root = os.path.join(self.tempdir, 'root.bin')
root_pretruncate = os.path.join(self.tempdir, 'root_pretruncate.bin')
content = '0123456789'
osutils.WriteFile(root, content)
self.PatchObject(partition_lib, 'ExtractPartition',
return_value=root)
self.PatchObject(partition_lib, 'Ext2FileSystemSize',
return_value=2)
partition_lib.ExtractRoot(None, root, root_pretruncate)
self.assertEqual(osutils.ReadFile(root), content[:2])
self.assertEqual(osutils.ReadFile(root_pretruncate), content)
class Ext2FileSystemSizeTest(cros_test_lib.MockTestCase):
"""Test partition_lib.Ext2FileSystemSize"""
def testExt2FileSystemSize(self):
"""Test on simple output."""
block_size = 4096
block_count = 123
self.PatchObject(cros_build_lib, 'RunCommand',
return_value=cros_build_lib.CommandResult(output='''
Block size: %d
Other thing: 123456798
Not an integer: cdsad132csda
Block count: %d
''' % (block_size, block_count)))
size = partition_lib.Ext2FileSystemSize('/dev/null')
self.assertEqual(size, block_size * block_count)
class ExtractPartitionTest(cros_test_lib.MockTempDirTestCase):
"""Test partition_lib.ExtractPartition"""
def testExtractPartition(self):
"""Tests extraction on a simple image."""
part_a_bin = '0123'
part_b_bin = '4567'
image_bin = part_a_bin + part_b_bin
image = os.path.join(self.tempdir, 'image.bin')
osutils.WriteFile(image, image_bin)
part_a = os.path.join(self.tempdir, 'a.bin')
fake_partitions = (
cros_build_lib.PartitionInfo(1, 0, 4, 4, 'fs', 'PART-A', ''),
cros_build_lib.PartitionInfo(2, 4, 8, 4, 'fs', 'PART-B', ''),
)
self.PatchObject(cros_build_lib, 'GetImageDiskPartitionInfo',
return_value=fake_partitions)
partition_lib.ExtractPartition(image, 'PART-A', part_a)
self.assertEqual(osutils.ReadFile(part_a), part_a_bin)