diff options
author | Ryan Campbell <ryanjcampbell@google.com> | 2017-04-06 14:37:40 -0700 |
---|---|---|
committer | Ryan Campbell <ryanjcampbell@google.com> | 2017-04-11 09:16:10 -0700 |
commit | c9ee16b5e8cecc09b690ea0035dea3927251c505 (patch) | |
tree | ed138e63bf8366eba00d61fba4442595e421d1ee | |
parent | e3115ceb932d2e1dbc006137f677d25a98780141 (diff) | |
download | kernel-c9ee16b5e8cecc09b690ea0035dea3927251c505.tar.gz |
Test procfs file existence and permissions.
Use file_utils to check whether files exist and have the correct
permissions.
Test: pass
Bug: 35773187
Change-Id: Ic704678ea679d9de677a4c4801f50d023d97a357
(cherry picked from commit 613ca15725cb427f34c2d69a975dfe1b64915833)
-rw-r--r-- | api/proc/KernelProcFileApiTest.py | 31 | ||||
-rw-r--r-- | api/proc/KernelProcFileTestBase.py | 14 | ||||
-rw-r--r-- | api/proc/ProcQtaguidCtrlTest.py | 6 | ||||
-rw-r--r-- | api/proc/ProcRemoveUidRangeTest.py | 9 | ||||
-rw-r--r-- | api/proc/ProcSimpleFileTests.py | 27 |
5 files changed, 87 insertions, 0 deletions
diff --git a/api/proc/KernelProcFileApiTest.py b/api/proc/KernelProcFileApiTest.py index 660f976c..a13bac02 100644 --- a/api/proc/KernelProcFileApiTest.py +++ b/api/proc/KernelProcFileApiTest.py @@ -27,6 +27,7 @@ from vts.runners.host import const from vts.runners.host import test_runner from vts.testcases.kernel.api.proc import required_kernel_configs as configs from vts.utils.python.controllers import android_device +from vts.utils.python.file import file_utils from ProcMemInfoTest import ProcMemInfoTest from ProcZoneInfoTest import ProcZoneInfoTest @@ -78,12 +79,37 @@ class KernelProcFileApiTest(base_test.BaseTestClass): self.shell = self.dut.shell.KernelApiTest self._temp_dir = tempfile.mkdtemp() + def checkPermissionsAndExistence(self, path, check_permission): + """Asserts that the specified path exists and has the correct permission. + + Args: + path: string, path to validate existence and permissions + check_permission: function which takes unix permissions in octal + format and returns True if the permissions are + correct, False otherwise. + """ + asserts.assertTrue( + file_utils.Exists(path, self.shell), + "%s: File does not exist." % path) + try: + permission = file_utils.GetPermission(path, self.shell) + asserts.assertTrue( + check_permission(permission), + "%s: File has invalid permissions (%s)" % + (path, permission)) + except (ValueError, IOError) as e: + asserts.fail("Failed to assert permissions: %s" % str(e)) + + def runProcFileTest(self, test_object): """Reads from the file and checks that it parses and the content is valid. Args: test_object: inherits KernelProcFileTestBase, contains the test functions """ + self.checkPermissionsAndExistence( + test_object.get_path(), test_object.get_permission_checker()) + logging.info("Testing format of %s" % (test_object.get_path())) asserts.assertTrue( test_object.prepare_test(self.shell), "Setup failed!") @@ -125,6 +151,11 @@ class KernelProcFileApiTest(base_test.BaseTestClass): def testCheckConfigs(self): """Ensures all options from android-base.cfg are enabled.""" + + logging.info("Testing existence of %s" % self.PROC_FILE_PATH) + self.checkPermissionsAndExistence( + self.PROC_FILE_PATH, file_utils.IsReadOnly) + self.dut.adb.pull("%s %s" % (self.PROC_FILE_PATH, self._temp_dir)) logging.info("Adb pull %s to %s", self.PROC_FILE_PATH, self._temp_dir) diff --git a/api/proc/KernelProcFileTestBase.py b/api/proc/KernelProcFileTestBase.py index ce4fe544..42b26637 100644 --- a/api/proc/KernelProcFileTestBase.py +++ b/api/proc/KernelProcFileTestBase.py @@ -19,6 +19,7 @@ import os import sys from ply import lex from ply import yacc +from vts.utils.python.file import file_utils def repeat_rule(to_repeat, zero_ok=False): @@ -155,3 +156,16 @@ class KernelProcFileTestBase(object): proc file. """ return True + + def get_permission_checker(self): + """Gets the function handle to use for validating file permissions. + + Return the function that will check if the permissions are correct. + By default, return the IsReadOnly function from file_utils. + + Returns: + function which takes one argument (the unix file permission bits + in octal format) and returns True if the permissions are correct, + False otherwise. + """ + return file_utils.IsReadOnly diff --git a/api/proc/ProcQtaguidCtrlTest.py b/api/proc/ProcQtaguidCtrlTest.py index 28f714f8..ff11a303 100644 --- a/api/proc/ProcQtaguidCtrlTest.py +++ b/api/proc/ProcQtaguidCtrlTest.py @@ -16,6 +16,7 @@ import KernelProcFileTestBase from KernelProcFileTestBase import repeat_rule, literal_token +from vts.utils.python.file import file_utils class ProcQtaguidCtrlTest(KernelProcFileTestBase.KernelProcFileTestBase): @@ -52,3 +53,8 @@ class ProcQtaguidCtrlTest(KernelProcFileTestBase.KernelProcFileTestBase): def get_path(self): return "/proc/net/xt_qtaguid/ctrl" + + def get_permission_checker(self): + """Get r/w file permission checker. + """ + return file_utils.IsReadWrite diff --git a/api/proc/ProcRemoveUidRangeTest.py b/api/proc/ProcRemoveUidRangeTest.py index 0cf345e8..455eccc8 100644 --- a/api/proc/ProcRemoveUidRangeTest.py +++ b/api/proc/ProcRemoveUidRangeTest.py @@ -16,6 +16,7 @@ import ProcShowUidStatTest from vts.runners.host import const +from vts.utils.python.file import file_utils class ProcRemoveUidRangeTest(ProcShowUidStatTest.ProcShowUidStatTest): @@ -52,3 +53,11 @@ class ProcRemoveUidRangeTest(ProcShowUidStatTest.ProcShowUidStatTest): print line return False return True + + def get_path(self): + return "/proc/uid_cputime/remove_uid_range" + + def get_permission_checker(self): + """Get write-only file permission checker. + """ + return file_utils.IsWriteOnly diff --git a/api/proc/ProcSimpleFileTests.py b/api/proc/ProcSimpleFileTests.py index c3779bfc..d6d7d953 100644 --- a/api/proc/ProcSimpleFileTests.py +++ b/api/proc/ProcSimpleFileTests.py @@ -16,6 +16,8 @@ import KernelProcFileTestBase +from vts.utils.python.file import file_utils + class ProcKptrRestrictTest(KernelProcFileTestBase.KernelProcFileTestBase): ''' @@ -34,6 +36,11 @@ class ProcKptrRestrictTest(KernelProcFileTestBase.KernelProcFileTestBase): def get_path(self): return "/proc/sys/kernel/kptr_restrict" + def get_permission_checker(self): + """Get r/w file permission checker. + """ + return file_utils.IsReadWrite + class ProcRandomizeVaSpaceTest(KernelProcFileTestBase.KernelProcFileTestBase): ''' @@ -52,6 +59,11 @@ class ProcRandomizeVaSpaceTest(KernelProcFileTestBase.KernelProcFileTestBase): def get_path(self): return "/proc/sys/kernel/randomize_va_space" + def get_permission_checker(self): + """Get r/w file permission checker. + """ + return file_utils.IsReadWrite + class ProcOverCommitMemoryTest(KernelProcFileTestBase.KernelProcFileTestBase): ''' @@ -69,6 +81,11 @@ class ProcOverCommitMemoryTest(KernelProcFileTestBase.KernelProcFileTestBase): def get_path(self): return "/proc/sys/vm/overcommit_memory" + def get_permission_checker(self): + """Get r/w file permission checker. + """ + return file_utils.IsReadWrite + class ProcMmapMinAddrTest(KernelProcFileTestBase.KernelProcFileTestBase): ''' @@ -83,6 +100,11 @@ class ProcMmapMinAddrTest(KernelProcFileTestBase.KernelProcFileTestBase): def get_path(self): return "/proc/sys/vm/mmap_min_addr" + def get_permission_checker(self): + """Get r/w file permission checker. + """ + return file_utils.IsReadWrite + class ProcMmapRndBitsTest(KernelProcFileTestBase.KernelProcFileTestBase): ''' @@ -101,6 +123,11 @@ class ProcMmapRndBitsTest(KernelProcFileTestBase.KernelProcFileTestBase): def get_path(self): return "/proc/sys/vm/mmap_rnd_bits" + def get_permission_checker(self): + """Get r/w file permission checker. + """ + return file_utils.IsReadWrite + class ProcMmapRndCompatBitsTest(ProcMmapRndBitsTest): def get_path(self): |