summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Campbell <ryanjcampbell@google.com>2017-04-06 14:37:40 -0700
committerRyan Campbell <ryanjcampbell@google.com>2017-04-11 09:16:10 -0700
commitc9ee16b5e8cecc09b690ea0035dea3927251c505 (patch)
treeed138e63bf8366eba00d61fba4442595e421d1ee
parente3115ceb932d2e1dbc006137f677d25a98780141 (diff)
downloadkernel-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.py31
-rw-r--r--api/proc/KernelProcFileTestBase.py14
-rw-r--r--api/proc/ProcQtaguidCtrlTest.py6
-rw-r--r--api/proc/ProcRemoveUidRangeTest.py9
-rw-r--r--api/proc/ProcSimpleFileTests.py27
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):