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

Commit 11a1e1b3 authored by Kelvin Zhang's avatar Kelvin Zhang Committed by Automerger Merge Worker
Browse files

Merge "Check for duplicate entries in build.prop in validation script" am: 46a6ab8c

Original change: https://android-review.googlesource.com/c/platform/build/+/1352903

Change-Id: I6dc4b1959a77be08907479d9f8ab8a94c1378d79
parents 1b97119e 46a6ab8c
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
@@ -25,10 +25,9 @@ import common
import test_utils
from rangelib import RangeSet
from validate_target_files import (ValidateVerifiedBootImages,
                                   ValidateFileConsistency)
                                   ValidateFileConsistency, CheckBuildPropDuplicity)
from verity_utils import CreateVerityImageBuilder


class ValidateTargetFilesTest(test_utils.ReleaseToolsTestCase):

  def setUp(self):
@@ -329,3 +328,38 @@ class ValidateTargetFilesTest(test_utils.ReleaseToolsTestCase):
    with zipfile.ZipFile(input_file) as input_zip:
      info_dict = {'extfs_sparse_flag': '-s'}
      ValidateFileConsistency(input_zip, input_tmp, info_dict)

  @staticmethod
  def make_build_prop(build_prop):
    input_tmp = common.MakeTempDir()
    system_dir = os.path.join(input_tmp, 'SYSTEM')
    os.makedirs(system_dir)
    prop_file = os.path.join(system_dir, 'build.prop')
    with open(prop_file, 'w') as output_file:
      output_file.write("\n".join(build_prop))
    return input_tmp

  def test_checkDuplicateProps_noDuplicate(self):
    build_prop = [
        'ro.odm.build.date.utc=1578430045',
        'ro.odm.build.fingerprint='
        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
        'ro.product.odm.device=coral',
    ]
    input_tmp = ValidateTargetFilesTest.make_build_prop(build_prop)
    CheckBuildPropDuplicity(input_tmp)

  def test_checkDuplicateProps_withDuplicate(self):
    build_prop = [
        'ro.odm.build.date.utc=1578430045',
        'ro.odm.build.date.utc=1578430049',
        'ro.odm.build.fingerprint='
        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
        'ro.product.odm.device=coral',
    ]
    input_tmp = ValidateTargetFilesTest.make_build_prop({
        'ODM/etc/build.prop': '\n'.join(build_prop),
    })

    self.assertRaises(ValueError, CheckBuildPropDuplicity,
                        input_tmp)
+30 −0
Original line number Diff line number Diff line
@@ -408,6 +408,34 @@ def ValidateVerifiedBootImages(input_tmp, info_dict, options):
          'Verified %s with avbtool (key: %s):\n%s', image, key,
          stdoutdata.rstrip())

def CheckDataDuplicity(lines):
    build_prop = {}
    for line in lines:
      if line.startswith("import") or line.startswith("#"):
        continue
      key, value = line.split("=", 1)
      if key in build_prop:
        return key
      build_prop[key] = value

def CheckBuildPropDuplicity(input_tmp):
  """Check all buld.prop files inside directory input_tmp, raise error
  if they contain duplicates"""

  if not os.path.isdir(input_tmp):
    raise ValueError("Expect {} to be a directory".format(input_tmp))
  for name in os.listdir(input_tmp):
    if not name.isupper():
      continue
    for prop_file in ['build.prop', 'etc/build.prop']:
      path = os.path.join(input_tmp, name, prop_file)
      if not os.path.exists(path):
        continue
      logging.info("Checking {}".format(path))
      with open(path, 'r') as fp:
        dupKey = CheckDataDuplicity(fp.readlines())
        if dupKey:
          raise ValueError("{} contains duplicate keys for {}", path, dupKey)

def main():
  parser = argparse.ArgumentParser(
@@ -447,6 +475,8 @@ def main():
  with zipfile.ZipFile(args.target_files, 'r') as input_zip:
    ValidateFileConsistency(input_zip, input_tmp, info_dict)

  CheckBuildPropDuplicity(input_tmp)

  ValidateInstallRecoveryScript(input_tmp, info_dict)

  ValidateVerifiedBootImages(input_tmp, info_dict, options)