85 lines
2.7 KiB
Python
Executable File
85 lines
2.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# Copyright 2017 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""Test cases for device tree overlays for early mounting partitions."""
|
|
|
|
import os
|
|
import unittest
|
|
|
|
|
|
# Early mount fstab entry must have following properties defined.
|
|
REQUIRED_FSTAB_PROPERTIES = [
|
|
'dev',
|
|
'type',
|
|
'mnt_flags',
|
|
'fsmgr_flags',
|
|
]
|
|
|
|
|
|
def ReadFile(file_path):
|
|
with open(file_path, 'r') as f:
|
|
# Strip all trailing spaces, newline and null characters.
|
|
return f.read().rstrip(' \n\x00')
|
|
|
|
|
|
def GetAndroidDtDir():
|
|
"""Returns location of android device tree directory."""
|
|
with open('/proc/cmdline', 'r') as f:
|
|
cmdline_list = f.read().split()
|
|
|
|
# Find android device tree directory path passed through kernel cmdline.
|
|
for option in cmdline_list:
|
|
if option.startswith('androidboot.android_dt_dir'):
|
|
return option.split('=')[1]
|
|
|
|
# If no custom path found, return the default location.
|
|
return '/proc/device-tree/firmware/android'
|
|
|
|
|
|
class DtEarlyMountTest(unittest.TestCase):
|
|
"""Test device tree overlays for early mounting."""
|
|
|
|
def setUp(self):
|
|
self._android_dt_dir = GetAndroidDtDir()
|
|
self._fstab_dt_dir = os.path.join(self._android_dt_dir, 'fstab')
|
|
|
|
def GetEarlyMountedPartitions(self):
|
|
"""Returns a list of partitions specified in fstab for early mount."""
|
|
# Device tree nodes are represented as directories in the filesystem.
|
|
return [x for x in os.listdir(self._fstab_dt_dir) if os.path.isdir(x)]
|
|
|
|
def VerifyFstabEntry(self, partition):
|
|
partition_dt_dir = os.path.join(self._fstab_dt_dir, partition)
|
|
properties = [x for x in os.listdir(partition_dt_dir)]
|
|
|
|
self.assertTrue(
|
|
set(REQUIRED_FSTAB_PROPERTIES).issubset(properties),
|
|
'fstab entry for /%s is missing required properties' % partition)
|
|
|
|
def testFstabCompatible(self):
|
|
"""Verify fstab compatible string."""
|
|
compatible = ReadFile(os.path.join(self._fstab_dt_dir, 'compatible'))
|
|
self.assertEqual('android,fstab', compatible)
|
|
|
|
def testFstabEntries(self):
|
|
"""Verify properties of early mount fstab entries."""
|
|
for partition in self.GetEarlyMountedPartitions():
|
|
self.VerifyFstabEntry(partition)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|
|
|