[PATCH for f20 2/4] Add tests for file labeling functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



getfilecon(_raw), setfilecon(_raw),
lgetfilecon(_raw), fgetfilecon(_raw),
lsetfilecon(_raw);
---
 tests/test_file_labeling.py | 408 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 408 insertions(+)
 create mode 100755 tests/test_file_labeling.py

diff --git a/tests/test_file_labeling.py b/tests/test_file_labeling.py
new file mode 100755
index 0000000..420dc78
--- /dev/null
+++ b/tests/test_file_labeling.py
@@ -0,0 +1,408 @@
+#!/usr/bin/env python
+
+#This program is free software: you can redistribute it and/or modify
+#it under the terms of the GNU General Public License as published by
+#the Free Software Foundation, either version 3 of the License, or
+#(at your option) any later version.
+#This program is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#GNU General Public License for more details.
+#
+#For more information see <http://www.gnu.org/licenses/>
+
+"""Tests for:
+getfilecon(_raw), setfilecon(_raw), lgetfilecon(_raw), fgetfilecon(_raw)
+lsetfilecon(_raw)
+"""
+
+import selinux
+import unittest
+import xattr
+import os
+import sys
+import errno
+import uuid
+import helper
+
+class auxiliaryTestCase(unittest.TestCase):
+    """Auxiliary class.
+
+    Atributes:
+        testfile: path to testing file.
+        testfile_symlink: path to link of testing file.
+        fo_testfile: file object of testfile.
+        fo_testfile_symlink: file object of testfile_symlink.
+        raw_con: testing selinux context.
+        wrong_con: non-existing selinux context.
+    """
+
+    def __init__(self, test_method="runTest"):
+        unittest.TestCase.__init__(self, test_method)
+        self.fo_testfile = None
+        self.fo_testfile_symlink = None
+        self.raw_con = "system_u:object_r:tmp_t:s0"
+        self.trans_con = "system_u:object_r:tmp_t:SystemLow"
+        self.wrong_con = "WRONG CONTEXT"
+
+    def setUp(self):
+        self.setUpFileOnly()
+        #Creates unique filename for symlink
+        self.testfile_symlink = "/tmp/" + str(uuid.uuid4())
+        #Use that unique filename for creating file
+        self.create_test_file_symlink()
+
+    def setUpFileOnly(self):
+        """SetUp only file without symlink
+        """
+        self.testfile = "/tmp/" + str(uuid.uuid4())
+        self.create_test_file()
+
+    def remove_file(self, path):
+        try:
+            os.remove(path)
+        #If file with path did not exist continue
+        except OSError as e:
+            if e.errno != errno.ENOENT:
+                raise e
+
+    def tearDown(self):
+        self.remove_file(self.testfile_symlink)
+        self.testfile_symlink = ""
+        self.fo_testfile_symlink = None
+        self.tearDownFileOnly()
+
+
+    def tearDownFileOnly(self):
+        self.remove_file(self.testfile)
+        self.testfile = ""
+        self.fo_testfile = None
+
+
+    def create_test_file(self):
+        """Creates test file.
+
+        Creates file with filename saved in self.testfile and
+        sets attribute self.fo_testfile with file object of the new file.
+        """
+
+        self.fo_testfile = open(self.testfile,"w")
+
+    def create_test_file_symlink(self):
+        """Creates symlink to test file.
+
+        Creates symlink for self.testfile.
+        """
+
+        os.symlink(self.testfile, self.testfile_symlink)
+        self.fo_testfile_symlink = open(self.testfile_symlink, "r")
+
+
+    def read_file_con(self, filepath, nofollow=False):
+        """Reads selinux context from file.
+
+        Args:
+            filepath: Path to file, from which context shall be read.
+            nofollow: If true function will read con of symlink.
+        Returns:
+            List where [0] is length of context with \00.
+                       [1] is selinux context string without trailing \00.
+        """
+
+        output_list = []
+        if nofollow:
+            context = xattr.get(filepath, "security.selinux", True)
+        else:
+            context = xattr.get(filepath,"security.selinux")
+        output_list.append(len(context))
+        output_list.append(context[:-1])
+        return output_list
+
+    def set_file_con(self, fileid, context, nofollow=False):
+        """Writes selinux context from file.
+
+        Args:
+            fileid: Path or fd of the file, to which context shall be written.
+            context:  Context we want to write to the file.
+            nofollow: If true function will write con to the symlink.
+        """
+
+        xattr.set(fileid, "security.selinux", context, 0, nofollow)
+
+
+class setfileconRawTestCase(auxiliaryTestCase):
+    """TestCase for setfilecon_raw() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    def test_setfileconRaw_InsertRawCon_InsertedSuccessfully(self):
+        selinux.setfilecon_raw(self.testfile, self.raw_con)
+        self.assertEqual(self.read_file_con(self.testfile)[1], self.raw_con,
+                         "File context of testfile was not changed after call "
+                         "setfilecon_raw()!")
+
+    def test_setfileconRaw_FileDoesNotExist_OSErrorRaised(self):
+        os.remove(self.testfile)
+        self.assertRaisesRegexp(OSError, '\[Errno 2\]', selinux.setfilecon_raw,
+                                self.testfile, self.raw_con)
+
+    def test_setfileconRaw_InsertWrongCon_OSErrorRaised(self):
+        self.assertRaisesRegexp(OSError, '\[Errno 22\]',
selinux.setfilecon_raw,
+                                self.testfile, self.wrong_con)
+
+
+
+
+class setfileconTestCase(auxiliaryTestCase):
+    """TestCase for setfilecon() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    @unittest.skipUnless(helper.contextTranslation(),
"Context-translation inactive!")
+    def test_setfilecon_InsertTransCon_InsertedSuccessfully(self):
+        selinux.setfilecon(self.testfile, self.trans_con)
+        self.assertEqual(self.read_file_con(self.testfile)[1], self.raw_con,
+                         "File context of testfile was not changed after call "
+                         "setfilecon()!")
+
+    def test_setfilecon_InsertRawCon_InsertedSuccessfully(self):
+        selinux.setfilecon(self.testfile, self.raw_con)
+        self.assertEqual(self.read_file_con(self.testfile)[1], self.raw_con,
+                         "File context of testfile was not changed after call "
+                         "setfilecon()!")
+
+
+
+class lsetfileconRawTestCase(auxiliaryTestCase):
+    """TestCase for lsetfilecon_raw() function.
+    """
+
+    def test_lsetfileconRaw_InsertRawCon_InsertedSuccessfully(self):
+        selinux.lsetfilecon_raw(self.testfile_symlink, self.raw_con)
+        self.assertEqual(self.read_file_con(self.testfile_symlink, True)[1],
+                         self.raw_con, "File context of symbolic link to"
+                         "testfile was not changed after call"
+                         "lsetfilecon_raw()!")
+
+    def test_lsetfileconRaw_FileDoesNotExist_OSErrorRaised(self):
+        self.fo_testfile.close()
+        self.remove_file(self.testfile_symlink)
+        self.assertRaisesRegexp(OSError, '\[Errno 2\]', selinux.lsetfilecon,
+                                self.testfile_symlink, self.raw_con)
+
+    def test_lsetfileconRaw_InsertWrongCon_OSErrorRaised(self):
+        self.assertRaisesRegexp(OSError, '\[Errno 22\]', selinux.lsetfilecon,
+                                self.testfile_symlink, self.wrong_con)
+
+
+class lsetfileconTestCase(auxiliaryTestCase):
+    """TestCase for lsetfilecon_raw() function.
+    """
+
+    def test_lsetfilecon_InsertRawCon_InsertedSuccessfully(self):
+        selinux.lsetfilecon(self.testfile_symlink, self.raw_con)
+        self.assertEqual(self.read_file_con(self.testfile_symlink,
True)[1], self.raw_con,
+                         "File context of symbolic link to testfile was not "
+                         "changed after call lsetfilecon()!")
+
+    @unittest.skipUnless(helper.contextTranslation(),
"Context-translation inactive!")
+    def test_lsetfilecon_InsertTransCon_InsertedSuccessfully(self):
+        selinux.lsetfilecon(self.testfile_symlink, self.trans_con)
+        self.assertEqual(self.read_file_con(self.testfile_symlink,
True)[1], self.raw_con,
+                         "File context of symbolic link to testfile was not "
+                         "changed after call lsetfilecon()!")
+
+
+
+class fsetfileconRawTestCase(auxiliaryTestCase):
+    """TestCase for fsetfilecon_raw() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    def test_fsetfileconRaw_InsertRawCon_InsertedSuccessfully(self):
+        selinux.fsetfilecon_raw(self.fo_testfile.fileno(), self.raw_con)
+        self.assertEqual(self.read_file_con(self.testfile)[1], self.raw_con,
+                         "File context of testfile was not changed after call "
+                         "fsetfilecon_raw()!")
+
+    def test_fsetfileconRaw_InsertWrongCon_OSErrorRaised(self):
+        fd = self.fo_testfile.fileno()
+        self.assertRaisesRegexp(OSError, '\[Errno 22\]',
selinux.fsetfilecon_raw, fd,
+                                self.wrong_con)
+
+    def test_fsetfileconRaw_BadDescriptorUsed_OSErrorRaised(self):
+        fd = self.fo_testfile.fileno()
+        self.fo_testfile.close()
+        self.assertRaisesRegexp(OSError, '\[Errno 9\]',
selinux.fsetfilecon_raw, fd,
+                                self.raw_con)
+
+
+class fsetfileconTestCase(auxiliaryTestCase):
+    """TestCase for fsetfilecon() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    def test_fsetfileconRaw_InsertRawCon_InsertedSuccessfully(self):
+        selinux.fsetfilecon(self.fo_testfile.fileno(), self.raw_con)
+        self.assertEqual(self.read_file_con(self.testfile)[1], self.raw_con,
+                         "File context of testfile was not changed after call "
+                         "fsetfilecon()!")
+
+    @unittest.skipUnless(helper.contextTranslation(),
"Context-translation inactive!")
+    def test_fsetfileconRaw_InsertTransCon_InsertedSuccessfully(self):
+        selinux.fsetfilecon(self.fo_testfile.fileno(), self.trans_con)
+        self.assertEqual(self.read_file_con(self.testfile)[1], self.raw_con,
+                         "File context of testfile was not changed after call "
+                         "fsetfilecon()!")
+
+class getfileconRawTestCase(auxiliaryTestCase):
+    """TestCase for getfilecon_raw() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    def test_getfileconRaw_GatherContext_ReturnedGoodOne(self):
+        output_list1 = selinux.getfilecon_raw(self.testfile)
+        output_list2 = self.read_file_con(self.testfile)
+        self.assertListEqual(output_list1, output_list2, "getfilecon_raw()"
+                             "did not return the right context!")
+
+    def test_getfileconRaw_FileDoesNotExist_OSErrorRaised(self):
+        self.remove_file(self.testfile)
+        self.assertRaisesRegexp(OSError, '\[Errno 2\]', selinux.getfilecon_raw,
+                                self.testfile)
+
+class getfileconTestCase(auxiliaryTestCase):
+    """TestCase for getfilecon() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    @unittest.skipIf(helper.contextTranslation(),
"Context-translation active!")
+    def test_getfilecon_GatherContext_ReturnedGoodOne(self):
+        output_list1 = selinux.getfilecon(self.testfile)
+        output_list2 = self.read_file_con(self.testfile)
+        self.assertListEqual(output_list1, output_list2,
"getfilecon() did not "
+                             "return the right context!")
+
+    @unittest.skipUnless(helper.contextTranslation(),
"Context-translation inactive!")
+    def test_getfilecon_GatherTransCon_ReturnedGoodOne(self):
+        self.set_file_con(self.testfile, self.raw_con)
+        self.assertEqual(selinux.getfilecon(self.testfile)[1], self.trans_con,
+                         "File context, which was gathered after "
+                         "calling getfilecon() is not right one!")
+
+
+class lgetfileconRawTestCase(auxiliaryTestCase):
+    """TestCase for lgetfilecon_raw() function.
+    """
+
+    def test_lgetfileconRaw_GatherContext_ReturnedGoodOne(self):
+        output_list1 = selinux.lgetfilecon_raw(self.testfile_symlink)
+        output_list2 = self.read_file_con(self.testfile_symlink, True)
+        self.assertListEqual(output_list1, output_list2,
"lgetfilecon_raw() did"
+                             "not return the right context!")
+
+    def test_getfileconRaw_FileDoesNotExist_OSErrorRaised(self):
+        self.remove_file(self.testfile_symlink)
+        self.assertRaisesRegexp(OSError, '\[Errno 2\]',
selinux.lgetfilecon_raw,
+                                self.testfile_symlink)
+
+
+class lgetfileconTestCase(auxiliaryTestCase):
+    """TestCase for lgetfilecon() function.
+    """
+
+    @unittest.skipIf(helper.contextTranslation(),
"Context-translation active!")
+    def test_lgetfilecon_GatherContext_ReturnedGoodOne(self):
+        output_list1 = selinux.lgetfilecon(self.testfile_symlink)
+        output_list2 = self.read_file_con(self.testfile_symlink)
+        self.assertListEqual(output_list1, output_list2,
"lgetfilecon() did not "
+                             "return the right context!")
+
+    @unittest.skipUnless(helper.contextTranslation(),
"Context-translation inactive!")
+    def test_lgetfilecon_GatherTransCon_ReturnedGoodOne(self):
+        self.set_file_con(self.testfile_symlink, self.raw_con, True)
+        self.assertEqual(selinux.lgetfilecon(self.testfile_symlink)[1],
+                         self.trans_con, "File context, which was gathered "
+                         "after calling lgetfilecon() is not right one!")
+
+class fgetfileconRawTestCase(auxiliaryTestCase):
+    """TestCase for fgetfilecon_raw() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    def test_fgetfileconRaw_BadDescriptorUsed_OSErrorRaised(self):
+        fd = self.fo_testfile.fileno()
+        self.fo_testfile.close()
+        self.assertRaisesRegexp(OSError, '\[Errno 9\]',
selinux.fgetfilecon_raw, fd)
+
+    def test_fgetfileconRaw_GatherContext_ReturnedGoodOne(self):
+        output_list1 = selinux.fgetfilecon_raw(self.fo_testfile.fileno())
+        output_list2 = self.read_file_con(self.testfile)
+        self.assertListEqual(output_list1, output_list2, "fgetfilecon_raw() "
+                             "did not return the right context!")
+
+
+class fgetfileconTestCase(auxiliaryTestCase):
+    """TestCase for fgetfilecon() function.
+    """
+
+    def setUp(self):
+        self.setUpFileOnly()
+
+    def tearDown(self):
+        self.tearDownFileOnly()
+
+    @unittest.skipIf(helper.contextTranslation(),
"Context-translation active!")
+    def test_fgetfilecon_GatherContext_ReturnedGoodOne(self):
+        output_list1 = selinux.fgetfilecon(self.fo_testfile.fileno())
+        output_list2 = self.read_file_con(self.testfile)
+        self.assertListEqual(output_list1, output_list2,
"fgetfilecon() did not "
+                             "return the right context!")
+
+    @unittest.skipUnless(helper.contextTranslation(), "Context-translation "
+                         "inactive!")
+    def test_fgetfilecon_GatherTransCon_ReturnedGoodOne(self):
+        fd = self.fo_testfile.fileno()
+        self.set_file_con(fd, self.raw_con)
+        self.assertEqual(selinux.fgetfilecon(fd)[1], self.trans_con,
+                         "File context, which was gathered after "
+                         "calling fgetfilecon() is not right one!")
+
+if __name__ == "__main__":
+    suite = unittest.TestLoader().loadTestsFromModule(sys.modules[auxiliaryTestCase.__module__])
+    unittest.TextTestRunner(verbosity=2).run(suite)
-- 
1.9.0
--
selinux mailing list
selinux@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/selinux





[Index of Archives]     [Fedora Users]     [Fedora Desktop]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux