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

Commit a2cbcd02 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix broken fs_config_generator tests" am: e7bf5958 am: 37c50263

parents 794719e8 37c50263
Loading
Loading
Loading
Loading
+52 −22
Original line number Diff line number Diff line
@@ -40,14 +40,44 @@ cc_binary_host {
    cflags: ["-Werror"],
}

python_binary_host {
    name: "fs_config_generator",
    srcs: ["fs_config_generator.py"],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
}

python_test_host {
    name: "test_fs_config_generator",
    main: "test_fs_config_generator.py",
    srcs: [
        "test_fs_config_generator.py",
        "fs_config_generator.py",
    ],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: false,
        },
    },
}

target_fs_config_gen_filegroup {
    name: "target_fs_config_gen",
}

genrule {
    name: "oemaids_header_gen",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) oemaid --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) oemaid --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -67,8 +97,8 @@ cc_library_headers {
// TARGET_FS_CONFIG_GEN files.
genrule {
    name: "passwd_gen_system",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) passwd --partition=system --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) passwd --partition=system --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -84,8 +114,8 @@ prebuilt_etc {

genrule {
    name: "passwd_gen_vendor",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) passwd --partition=vendor --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) passwd --partition=vendor --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -102,8 +132,8 @@ prebuilt_etc {

genrule {
    name: "passwd_gen_odm",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) passwd --partition=odm --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) passwd --partition=odm --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -120,8 +150,8 @@ prebuilt_etc {

genrule {
    name: "passwd_gen_product",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) passwd --partition=product --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) passwd --partition=product --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -138,8 +168,8 @@ prebuilt_etc {

genrule {
    name: "passwd_gen_system_ext",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) passwd --partition=system_ext --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) passwd --partition=system_ext --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -159,8 +189,8 @@ prebuilt_etc {
// TARGET_FS_CONFIG_GEN files.
genrule {
    name: "group_gen_system",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) group --partition=system --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) group --partition=system --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -176,8 +206,8 @@ prebuilt_etc {

genrule {
    name: "group_gen_vendor",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) group --partition=vendor --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) group --partition=vendor --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -194,8 +224,8 @@ prebuilt_etc {

genrule {
    name: "group_gen_odm",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) group --partition=odm --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) group --partition=odm --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -212,8 +242,8 @@ prebuilt_etc {

genrule {
    name: "group_gen_product",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) group --partition=product --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) group --partition=product --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
@@ -230,8 +260,8 @@ prebuilt_etc {

genrule {
    name: "group_gen_system_ext",
    tool_files: ["fs_config_generator.py"],
    cmd: "$(location fs_config_generator.py) group --partition=system_ext --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    tools: ["fs_config_generator"],
    cmd: "$(location fs_config_generator) group --partition=system_ext --aid-header=$(location :android_filesystem_config_header) $(locations :target_fs_config_gen) >$(out)",
    srcs: [
        ":target_fs_config_gen",
        ":android_filesystem_config_header",
+4 −4
Original line number Diff line number Diff line
@@ -69,13 +69,13 @@ generated header file.

From within the `fs_config` directory, unit tests can be executed like so:

    $ python -m unittest test_fs_config_generator.Tests
    .............
    $ python test_fs_config_generator.py
    ................
    ----------------------------------------------------------------------
    Ran 13 tests in 0.004s

    Ran 16 tests in 0.004s
    OK


One could also use nose if they would like:

    $ nose2
+35 −11
Original line number Diff line number Diff line
@@ -179,6 +179,10 @@ class AID(object):
            and self.normalized_value == other.normalized_value \
            and self.login_shell == other.login_shell

    def __repr__(self):
        return "AID { identifier = %s, value = %s, normalized_value = %s, login_shell = %s }" % (
            self.identifier, self.value, self.normalized_value, self.login_shell)

    @staticmethod
    def is_friendly(name):
        """Determines if an AID is a freindly name or C define.
@@ -312,7 +316,7 @@ class AIDHeaderParser(object):
    ]
    _AID_DEFINE = re.compile(r'\s*#define\s+%s.*' % AID.PREFIX)
    _RESERVED_RANGE = re.compile(
        r'#define AID_(.+)_RESERVED_\d*_*(START|END)\s+(\d+)')
        r'#define AID_(.+)_RESERVED_(?:(\d+)_)?(START|END)\s+(\d+)')

    # AID lines cannot end with _START or _END, ie AID_FOO is OK
    # but AID_FOO_START is skiped. Note that AID_FOOSTART is NOT skipped.
@@ -345,6 +349,7 @@ class AIDHeaderParser(object):
            aid_file (file): The open AID header file to parse.
        """

        ranges_by_name = {}
        for lineno, line in enumerate(aid_file):

            def error_message(msg):
@@ -355,20 +360,24 @@ class AIDHeaderParser(object):

            range_match = self._RESERVED_RANGE.match(line)
            if range_match:
                partition = range_match.group(1).lower()
                value = int(range_match.group(3), 0)
                partition, name, start, value = range_match.groups()
                partition = partition.lower()
                if name is None:
                    name = "unnamed"
                start = start == "START"
                value = int(value, 0)

                if partition == 'oem':
                    partition = 'vendor'

                if partition in self._ranges:
                    if isinstance(self._ranges[partition][-1], int):
                        self._ranges[partition][-1] = (
                            self._ranges[partition][-1], value)
                    else:
                        self._ranges[partition].append(value)
                else:
                    self._ranges[partition] = [value]
                if partition not in ranges_by_name:
                    ranges_by_name[partition] = {}
                if name not in ranges_by_name[partition]:
                    ranges_by_name[partition][name] = [None, None]
                if ranges_by_name[partition][name][0 if start else 1] is not None:
                    sys.exit(error_message("{} of range {} of partition {} was already defined".format(
                        "Start" if start else "End", name, partition)))
                ranges_by_name[partition][name][0 if start else 1] = value

            if AIDHeaderParser._AID_DEFINE.match(line):
                chunks = line.split()
@@ -390,6 +399,21 @@ class AIDHeaderParser(object):
                        error_message('{} for "{}"'.format(
                            exception, identifier)))

        for partition in ranges_by_name:
            for name in ranges_by_name[partition]:
                start = ranges_by_name[partition][name][0]
                end = ranges_by_name[partition][name][1]
                if start is None:
                    sys.exit("Range '%s' for partition '%s' had undefined start" % (name, partition))
                if end is None:
                    sys.exit("Range '%s' for partition '%s' had undefined end" % (name, partition))
                if start > end:
                    sys.exit("Range '%s' for partition '%s' had start after end. Start: %d, end: %d" % (name, partition, start, end))

                if partition not in self._ranges:
                    self._ranges[partition] = []
                self._ranges[partition].append((start, end))

    def _handle_aid(self, identifier, value):
        """Handle an AID C #define.

+29 −10
Original line number Diff line number Diff line
@@ -78,11 +78,11 @@ class Tests(unittest.TestCase):
            temp_file.flush()

            parser = AIDHeaderParser(temp_file.name)
            oem_ranges = parser.oem_ranges
            ranges = parser.ranges
            aids = parser.aids

            self.assertTrue((2900, 2999) in oem_ranges)
            self.assertFalse((5000, 6000) in oem_ranges)
            self.assertTrue((2900, 2999) in ranges["vendor"])
            self.assertFalse((5000, 6000) in ranges["vendor"])

            for aid in aids:
                self.assertTrue(aid.normalized_value in ['1000', '1001'])
@@ -105,11 +105,11 @@ class Tests(unittest.TestCase):
            temp_file.flush()

            parser = AIDHeaderParser(temp_file.name)
            oem_ranges = parser.oem_ranges
            ranges = parser.ranges
            aids = parser.aids

            self.assertTrue((2900, 2999) in oem_ranges)
            self.assertFalse((5000, 6000) in oem_ranges)
            self.assertTrue((2900, 2999) in ranges["vendor"])
            self.assertFalse((5000, 6000) in ranges["vendor"])

            for aid in aids:
                self.assertTrue(aid.normalized_value in ['1000', '1001'])
@@ -168,6 +168,22 @@ class Tests(unittest.TestCase):
            with self.assertRaises(SystemExit):
                AIDHeaderParser(temp_file.name)

    def test_aid_header_parser_bad_oem_range_duplicated(self):
        """Test AID Header Parser bad oem range (no start) input file"""

        with tempfile.NamedTemporaryFile() as temp_file:
            temp_file.write(
                textwrap.dedent("""
                #define AID_OEM_RESERVED_START 2000
                #define AID_OEM_RESERVED_END 2900
                #define AID_OEM_RESERVED_START 3000
                #define AID_OEM_RESERVED_END 3900
            """))
            temp_file.flush()

            with self.assertRaises(SystemExit):
                AIDHeaderParser(temp_file.name)

    def test_aid_header_parser_bad_oem_range_mismatch_start_end(self):
        """Test AID Header Parser bad oem range mismatched input file"""

@@ -262,7 +278,7 @@ class Tests(unittest.TestCase):
            """))
            temp_file.flush()

            parser = FSConfigFileParser([temp_file.name], [(5000, 5999)])
            parser = FSConfigFileParser([temp_file.name], {"oem1": [(5000, 5999)]})
            files = parser.files
            dirs = parser.dirs
            aids = parser.aids
@@ -284,7 +300,7 @@ class Tests(unittest.TestCase):
                             FSConfig('0777', 'AID_FOO', 'AID_SYSTEM', '0',
                                      '/vendor/path/dir/', temp_file.name))

            self.assertEqual(aid, AID('AID_OEM1', '0x1389', temp_file.name, '/vendor/bin/sh'))
            self.assertEqual(aid, AID('AID_OEM1', '0x1389', temp_file.name, '/bin/sh'))

    def test_fs_config_file_parser_bad(self):
        """Test FSConfig Parser bad input file"""
@@ -298,7 +314,7 @@ class Tests(unittest.TestCase):
            temp_file.flush()

            with self.assertRaises(SystemExit):
                FSConfigFileParser([temp_file.name], [(5000, 5999)])
                FSConfigFileParser([temp_file.name], {})

    def test_fs_config_file_parser_bad_aid_range(self):
        """Test FSConfig Parser bad aid range value input file"""
@@ -312,4 +328,7 @@ class Tests(unittest.TestCase):
            temp_file.flush()

            with self.assertRaises(SystemExit):
                FSConfigFileParser([temp_file.name], [(5000, 5999)])
                FSConfigFileParser([temp_file.name], {"oem1": [(5000, 5999)]})

if __name__ == "__main__":
    unittest.main()