def testSignatures(self):
        """Verify that the --signatures option shows the present signatures."""
        payload_cmd = payload_info.PayloadCommand(
            FakeOption(action='show', signatures=True))
        payload = FakePayload(payload_info.MAJOR_PAYLOAD_VERSION_BRILLO)
        payload.AddPayloadSignature(version=1,
                                    data='12345678abcdefgh\x00\x01\x02\x03')
        payload.AddPayloadSignature(data='I am a signature so access is yes.')
        payload.AddMetadataSignature(data='\x00\x0a\x0c')
        expected_out = """Payload version:             2
Manifest length:             222
Number of partitions:        2
  Number of "root" ops:      1
  Number of "kernel" ops:    1
Block size:                  4096
Minor version:               4
Metadata signatures blob:    file_offset=246 (7 bytes)
Metadata signatures: (1 entries)
  version=None, hex_data: (3 bytes)
    00 0a 0c                                        | ...
Payload signatures blob:     blob_offset=1234 (64 bytes)
Payload signatures: (2 entries)
  version=1, hex_data: (20 bytes)
    31 32 33 34 35 36 37 38 61 62 63 64 65 66 67 68 | 12345678abcdefgh
    00 01 02 03                                     | ....
  version=None, hex_data: (34 bytes)
    49 20 61 6d 20 61 20 73 69 67 6e 61 74 75 72 65 | I am a signature
    20 73 6f 20 61 63 63 65 73 73 20 69 73 20 79 65 |  so access is ye
    73 2e                                           | s.
"""
        self.TestCommand(payload_cmd, payload, expected_out)
    def testListOpsOnVersion2(self):
        """Verify that the --list_ops option gives the correct output."""
        payload_cmd = payload_info.PayloadCommand(
            FakeOption(list_ops=True, action='show'))
        payload = FakePayload(payload_info.MAJOR_PAYLOAD_VERSION_BRILLO)
        expected_out = """Payload version:             2
Manifest length:             222
Number of partitions:        2
  Number of "root" ops:      1
  Number of "kernel" ops:    1
Block size:                  4096
Minor version:               4

root 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.TestCommand(payload_cmd, payload, expected_out)
    def testRun(self):
        """Verify that Run parses and displays the payload like we expect."""
        payload_cmd = payload_info.PayloadCommand(FakeOption(action='show'))
        payload = FakePayload(payload_info.MAJOR_PAYLOAD_VERSION_CHROMEOS)
        expected_out = """Payload version:             1
Manifest length:             222
Number of operations:        1
Number of kernel ops:        1
Block size:                  4096
Minor version:               4
"""
        self.TestCommand(payload_cmd, payload, expected_out)
  def testRun(self):
    """Verify that Run parses and displays the payload like we expect."""
    payload_cmd = payload_info.PayloadCommand(FakeOption(action='show'))
    payload = FakePayload()
    expected_out = """Payload version:             2
Manifest length:             222
Number of partitions:        2
  Number of "root" ops:      1
  Number of "kernel" ops:    1
Block size:                  4096
Minor version:               4
"""
    self.TestCommand(payload_cmd, payload, expected_out)
    def testEmptySignatures(self):
        """Verify that the --signatures option works with unsigned payloads."""
        payload_cmd = payload_info.PayloadCommand(
            FakeOption(action='show', signatures=True))
        payload = FakePayload(payload_info.MAJOR_PAYLOAD_VERSION_CHROMEOS)
        expected_out = """Payload version:             1
Manifest length:             222
Number of operations:        1
Number of kernel ops:        1
Block size:                  4096
Minor version:               4
No metadata signatures stored in the payload
No payload signatures stored in the payload
"""
        self.TestCommand(payload_cmd, payload, expected_out)
    def testStatsOnVersion1(self):
        """Verify that the --stats option works correctly."""
        payload_cmd = payload_info.PayloadCommand(
            FakeOption(stats=True, action='show'))
        payload = FakePayload(payload_info.MAJOR_PAYLOAD_VERSION_CHROMEOS)
        expected_out = """Payload version:             1
Manifest length:             222
Number of operations:        1
Number of kernel ops:        1
Block size:                  4096
Minor version:               4
Blocks read:                 11
Blocks written:              193
Seeks when writing:          18
"""
        self.TestCommand(payload_cmd, payload, expected_out)
  def testEmptySignatures(self):
    """Verify that the --signatures option works with unsigned payloads."""
    payload_cmd = payload_info.PayloadCommand(
        FakeOption(action='show', signatures=True))
    payload = FakePayload()
    expected_out = """Payload version:             2
Manifest length:             222
Number of partitions:        2
  Number of "root" ops:      1
  Number of "kernel" ops:    1
Block size:                  4096
Minor version:               4
No metadata signatures stored in the payload
No payload signatures stored in the payload
"""
    self.TestCommand(payload_cmd, payload, expected_out)
  def testStatsOnVersion2(self):
    """Verify that the --stats option works correctly on version 2."""
    payload_cmd = payload_info.PayloadCommand(
        FakeOption(stats=True, action='show'))
    payload = FakePayload()
    expected_out = """Payload version:             2
Manifest length:             222
Number of partitions:        2
  Number of "root" ops:      1
  Number of "kernel" ops:    1
Block size:                  4096
Minor version:               4
Blocks read:                 11
Blocks written:              193
Seeks when writing:          18
"""
    self.TestCommand(payload_cmd, payload, expected_out)