Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b345651e authored by Seungjae Yoo's avatar Seungjae Yoo
Browse files

Add unit test for parsing avb info

Bug: 328195652
Test: atest --host releasetools_test
Test: sign_target_files_apks
Change-Id: Ie38c3883907bc70c794606b20caf55a70dbcdf7c
parent 05b128bf
Loading
Loading
Loading
Loading
+47 −45
Original line number Diff line number Diff line
@@ -822,15 +822,8 @@ def ProcessTargetFiles(input_tf_zip: zipfile.ZipFile, output_tf_zip, misc_info,
  # Write back misc_info with the latest values.
  ReplaceMiscInfoTxt(input_tf_zip, output_tf_zip, misc_info)

def ReplaceKeyInAvbHashtreeFooter(image, new_key, new_algorithm, misc_info):
  # Get avb information about the image by parsing avbtool info_image.
  def GetAvbInfo(avbtool, image_name):
    # Get information with raw string by `avbtool info_image`.
    info_raw = common.RunAndCheckOutput([
      avbtool, 'info_image',
      '--image', image_name
    ])

# Parse string output of `avbtool info_image`.
def ParseAvbInfo(info_raw):
  # line_matcher is for parsing each output line of `avbtool info_image`.
  # example string input: "      Hash Algorithm:        sha1"
  # example matched input: ("      ", "Hash Algorithm", "sha1")
@@ -873,9 +866,18 @@ def ReplaceKeyInAvbHashtreeFooter(image, new_key, new_algorithm, misc_info):
      cur_info.append({key:{prop_parsed.group(1):prop_parsed.group(2)}})
    else:
      cur_info[key] = value

  return info

def ReplaceKeyInAvbHashtreeFooter(image, new_key, new_algorithm, misc_info):
  # Get avb information about the image by parsing avbtool info_image.
  def GetAvbInfo(avbtool, image_name):
    # Get information with raw string by `avbtool info_image`.
    info_raw = common.RunAndCheckOutput([
      avbtool, 'info_image',
      '--image', image_name
    ])
    return ParseAvbInfo(info_raw)

  # Get hashtree descriptor from info
  def GetAvbHashtreeDescriptor(avb_info):
    hashtree_descriptors = tuple(filter(lambda x: "Hashtree descriptor" in x,
+86 −2
Original line number Diff line number Diff line
@@ -22,8 +22,9 @@ import zipfile
import common
import test_utils
from sign_target_files_apks import (
    CheckApkAndApexKeysAvailable, EditTags, GetApkFileInfo, ReadApexKeysInfo,
    ReplaceCerts, RewriteAvbProps, RewriteProps, WriteOtacerts)
    CheckApkAndApexKeysAvailable, EditTags, GetApkFileInfo, ParseAvbInfo,
    ReadApexKeysInfo, ReplaceCerts, RewriteAvbProps, RewriteProps,
    WriteOtacerts)


class SignTargetFilesApksTest(test_utils.ReleaseToolsTestCase):
@@ -535,3 +536,86 @@ name="apex.apexd_test_different_app.apex" public_key="system/apex/apexd/apexd_te
            'system/apex/apexd/apexd_testdata/com.android.apex.test_package_2.pem',
            'build/make/target/product/security/testkey', None),
        }, keys_info)

  def test_ParseAvbInfo(self):
    avb_info_string = """
    Footer version:           1.0
    Image size:               9999999 bytes
    Original image size:      8888888 bytes
    VBMeta offset:            7777777
    VBMeta size:              1111 bytes
    --
    Minimum libavb version:   1.0
    Header Block:             222 bytes
    Authentication Block:     333 bytes
    Auxiliary Block:          888 bytes
    Public key (sha1):        abababababababababababababababababababab
    Algorithm:                SHA256_RSA2048
    Rollback Index:           0
    Flags:                    0
    Rollback Index Location:  0
    Release String:           'avbtool 1.3.0'
    Descriptors:
        Hashtree descriptor:
          Version of dm-verity:  1
          Image Size:            8888888 bytes
          Tree Offset:           8888888
          Tree Size:             44444 bytes
          Data Block Size:       4444 bytes
          Hash Block Size:       4444 bytes
          FEC num roots:         0
          FEC offset:            0
          FEC size:              0 bytes
          Hash Algorithm:        sha1
          Partition Name:        partition-name
          Salt:                  cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd
          Root Digest:           efefefefefefefefefefefefefefefefefef
          Flags:                 0
        Prop: prop.key -> 'prop.value'
    """

    self.assertEqual(
        {
            'Footer version': '1.0',
            'Image size': '9999999 bytes',
            'Original image size': '8888888 bytes',
            'VBMeta offset': '7777777',
            'VBMeta size': '1111 bytes',
            'Minimum libavb version': '1.0',
            'Header Block': '222 bytes',
            'Authentication Block': '333 bytes',
            'Auxiliary Block': '888 bytes',
            'Public key (sha1)': 'abababababababababababababababababababab',
            'Algorithm': 'SHA256_RSA2048',
            'Rollback Index': '0',
            'Flags': '0',
            'Rollback Index Location': '0',
            'Release String': "'avbtool 1.3.0'",
            'Descriptors': [
                {
                    'Hashtree descriptor': {
                        'Version of dm-verity': '1',
                        'Image Size': '8888888 bytes',
                        'Tree Offset': '8888888',
                        'Tree Size': '44444 bytes',
                        'Data Block Size': '4444 bytes',
                        'Hash Block Size': '4444 bytes',
                        'FEC num roots': '0',
                        'FEC offset': '0',
                        'FEC size': '0 bytes',
                        'Hash Algorithm': 'sha1',
                        'Partition Name': 'partition-name',
                        'Salt': 'cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd',
                        'Root Digest': 'efefefefefefefefefefefefefefefefefef',
                        'Flags': '0',
                    }
                },
                {
                    'Prop': {
                        'prop.key': 'prop.value',
                    }
                },
            ],
        },
        ParseAvbInfo(avb_info_string),
    )
 No newline at end of file