普通文本  |  61行  |  1.98 KB

#!/usr/bin/env python
#
# Copyright (C) 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.
#
from abc import ABCMeta
from abc import abstractmethod

from vts.utils.python.file import file_utils

class KernelSelinuxFileTestBase(object):
    """Abstract test for the formatting of a selinux file.

    Individual files can inherit from this class and define the correct path,
    file content, and permissions.
    """
    __metaclass__ = ABCMeta

    @abstractmethod
    def get_path(self):
        """Return the full path of this selinux file."""
        pass

    def result_correct(self, file_contents):
        """Return True if the file contents are correct.

        Subclasses define the requirements for the selinux file and validate
        that the contents of a file are correct.

        Args:
            file_contents: String, the contents of an selinux file

        Returns:
            True if the contents are correct, False otherwise.
        """
        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