summaryrefslogtreecommitdiff
path: root/cli/cros/cros_payload_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'cli/cros/cros_payload_unittest.py')
-rw-r--r--cli/cros/cros_payload_unittest.py107
1 files changed, 91 insertions, 16 deletions
diff --git a/cli/cros/cros_payload_unittest.py b/cli/cros/cros_payload_unittest.py
index d99f0e9a1..f8fd78d20 100644
--- a/cli/cros/cros_payload_unittest.py
+++ b/cli/cros/cros_payload_unittest.py
@@ -50,10 +50,17 @@ class FakeOp(object):
def HasField(self, field):
return hasattr(self, field)
+class FakePartition(object):
+ """Fake PartitionUpdate field for testing."""
+
+ def __init__(self, partition_name, operations):
+ self.partition_name = partition_name
+ self.operations = operations
+
class FakeManifest(object):
"""Fake manifest for testing."""
- def __init__(self):
+ def __init__(self, major_version):
FakeExtent = collections.namedtuple('FakeExtent',
['start_block', 'num_blocks'])
self.install_operations = [FakeOp([],
@@ -67,6 +74,11 @@ class FakeManifest(object):
[FakeExtent(x, x) for x in xrange(20)],
update_payload.common.OpType.SOURCE_COPY,
src_length=4096)]
+ if major_version == cros_payload.MAJOR_PAYLOAD_VERSION_BRILLO:
+ self.partitions = [FakePartition('rootfs', self.install_operations),
+ FakePartition('kernel',
+ self.kernel_install_operations)]
+ self.install_operations = self.kernel_install_operations = []
self.block_size = 4096
self.minor_version = 4
FakePartInfo = collections.namedtuple('FakePartInfo', ['size'])
@@ -84,12 +96,12 @@ class FakeManifest(object):
class FakePayload(object):
"""Fake payload for testing."""
- def __init__(self):
+ def __init__(self, major_version):
FakeHeader = collections.namedtuple('FakeHeader',
['version', 'manifest_len'])
- self._header = FakeHeader('111', 222)
+ self._header = FakeHeader(major_version, 222)
self.header = None
- self._manifest = FakeManifest()
+ self._manifest = FakeManifest(major_version)
self.manifest = None
self._blobs = {}
@@ -137,13 +149,14 @@ class PayloadCommandTest(cros_test_lib.MockOutputTestCase):
def testRun(self):
"""Verify that Run parses and displays the payload like we expect."""
payload_cmd = cros_payload.PayloadCommand(FakeOption(action='show'))
- self.PatchObject(update_payload, 'Payload', return_value=FakePayload())
+ self.PatchObject(update_payload, 'Payload', return_value=FakePayload(
+ cros_payload.MAJOR_PAYLOAD_VERSION_CHROMEOS))
with self.OutputCapturer() as output:
payload_cmd.Run()
stdout = output.GetStdout()
- expected_out = """Payload version: 111
+ expected_out = """Payload version: 1
Manifest length: 222
Number of operations: 1
Number of kernel ops: 1
@@ -152,17 +165,18 @@ Minor version: 4
"""
self.assertEquals(stdout, expected_out)
- def testListOps(self):
+ def testListOpsOnVersion1(self):
"""Verify that the --list_ops option gives the correct output."""
payload_cmd = cros_payload.PayloadCommand(FakeOption(list_ops=True,
action='show'))
- self.PatchObject(update_payload, 'Payload', return_value=FakePayload())
+ self.PatchObject(update_payload, 'Payload', return_value=FakePayload(
+ cros_payload.MAJOR_PAYLOAD_VERSION_CHROMEOS))
with self.OutputCapturer() as output:
payload_cmd.Run()
stdout = output.GetStdout()
- expected_out = """Payload version: 111
+ expected_out = """Payload version: 1
Manifest length: 222
Number of operations: 1
Number of kernel ops: 1
@@ -185,17 +199,53 @@ Kernel install operations:
"""
self.assertEquals(stdout, expected_out)
- def testStats(self):
+ def testListOpsOnVersion2(self):
+ """Verify that the --list_ops option gives the correct output."""
+ payload_cmd = cros_payload.PayloadCommand(FakeOption(list_ops=True,
+ action='show'))
+ self.PatchObject(update_payload, 'Payload', return_value=FakePayload(
+ cros_payload.MAJOR_PAYLOAD_VERSION_BRILLO))
+
+ with self.OutputCapturer() as output:
+ payload_cmd.Run()
+
+ stdout = output.GetStdout()
+ expected_out = """Payload version: 2
+Manifest length: 222
+Number of partitions: 2
+ Number of "rootfs" ops: 1
+ Number of "kernel" ops: 1
+Block size: 4096
+Minor version: 4
+
+rootfs install operations:
+ 0: REPLACE_BZ
+ Data offset: 1
+ Data length: 1
+ Destination: 2 extents (3 blocks)
+ (1,1) (2,2)
+kernel install operations:
+ 0: SOURCE_COPY
+ Source: 1 extent (1 block)
+ (1,1)
+ Destination: 20 extents (190 blocks)
+ (0,0) (1,1) (2,2) (3,3) (4,4) (5,5) (6,6) (7,7) (8,8) (9,9) (10,10)
+ (11,11) (12,12) (13,13) (14,14) (15,15) (16,16) (17,17) (18,18) (19,19)
+"""
+ self.assertEquals(stdout, expected_out)
+
+ def testStatsOnVersion1(self):
"""Verify that the --stats option works correctly."""
payload_cmd = cros_payload.PayloadCommand(FakeOption(stats=True,
action='show'))
- self.PatchObject(update_payload, 'Payload', return_value=FakePayload())
+ self.PatchObject(update_payload, 'Payload', return_value=FakePayload(
+ cros_payload.MAJOR_PAYLOAD_VERSION_CHROMEOS))
with self.OutputCapturer() as output:
payload_cmd.Run()
stdout = output.GetStdout()
- expected_out = """Payload version: 111
+ expected_out = """Payload version: 1
Manifest length: 222
Number of operations: 1
Number of kernel ops: 1
@@ -207,17 +257,42 @@ Seeks when writing: 18
"""
self.assertEquals(stdout, expected_out)
+ def testStatsOnVersion2(self):
+ """Verify that the --stats option works correctly on version 2."""
+ payload_cmd = cros_payload.PayloadCommand(FakeOption(stats=True,
+ action='show'))
+ self.PatchObject(update_payload, 'Payload', return_value=FakePayload(
+ cros_payload.MAJOR_PAYLOAD_VERSION_BRILLO))
+
+ with self.OutputCapturer() as output:
+ payload_cmd.Run()
+
+ stdout = output.GetStdout()
+ expected_out = """Payload version: 2
+Manifest length: 222
+Number of partitions: 2
+ Number of "rootfs" ops: 1
+ Number of "kernel" ops: 1
+Block size: 4096
+Minor version: 4
+Blocks read: 11
+Blocks written: 193
+Seeks when writing: 18
+"""
+ self.assertEquals(stdout, expected_out)
+
def testEmptySignatures(self):
"""Verify that the --signatures option works with unsigned payloads."""
payload_cmd = cros_payload.PayloadCommand(
FakeOption(action='show', signatures=True))
- self.PatchObject(update_payload, 'Payload', return_value=FakePayload())
+ self.PatchObject(update_payload, 'Payload', return_value=FakePayload(
+ cros_payload.MAJOR_PAYLOAD_VERSION_CHROMEOS))
with self.OutputCapturer() as output:
payload_cmd.Run()
stdout = output.GetStdout()
- expected_out = """Payload version: 111
+ expected_out = """Payload version: 1
Manifest length: 222
Number of operations: 1
Number of kernel ops: 1
@@ -232,7 +307,7 @@ No signatures stored in the payload
"""Verify that the --signatures option shows the present signatures."""
payload_cmd = cros_payload.PayloadCommand(
FakeOption(action='show', signatures=True))
- payload = FakePayload()
+ payload = FakePayload(cros_payload.MAJOR_PAYLOAD_VERSION_CHROMEOS)
payload.AddSignature(version=1, data='12345678abcdefgh\x00\x01\x02\x03')
payload.AddSignature(data='I am a signature so access is yes.')
self.PatchObject(update_payload, 'Payload', return_value=payload)
@@ -241,7 +316,7 @@ No signatures stored in the payload
payload_cmd.Run()
stdout = output.GetStdout()
- expected_out = """Payload version: 111
+ expected_out = """Payload version: 1
Manifest length: 222
Number of operations: 1
Number of kernel ops: 1