diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-09-04 09:52:57 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-09-04 09:52:57 -0400 |
commit | d9d4391b211c0a13cbfeadc9fa63e5bdeba9d2f6 (patch) | |
tree | cf59b7bcef389ca76f09c7f804db9d893b918e3b /testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py | |
parent | 6697481f7bed646b4c66c54c9a46d11aa075af4a (diff) | |
download | bcfg2-d9d4391b211c0a13cbfeadc9fa63e5bdeba9d2f6.tar.gz bcfg2-d9d4391b211c0a13cbfeadc9fa63e5bdeba9d2f6.tar.bz2 bcfg2-d9d4391b211c0a13cbfeadc9fa63e5bdeba9d2f6.zip |
reorganized testsuite to allow tests on stuff outside of src
Diffstat (limited to 'testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py')
-rw-r--r-- | testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py new file mode 100644 index 000000000..c319ed663 --- /dev/null +++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestSEModules.py @@ -0,0 +1,109 @@ +import os +import sys +import lxml.etree +import Bcfg2.Server.Plugin +from Bcfg2.Compat import b64encode +from mock import Mock, MagicMock, patch +from Bcfg2.Server.Plugins.SEModules import * + +# add all parent testsuite directories to sys.path to allow (most) +# relative imports in python 2.4 +path = os.path.dirname(__file__) +while path != "/": + if os.path.basename(path).lower().startswith("test"): + sys.path.append(path) + if os.path.basename(path) == "testsuite": + break + path = os.path.dirname(path) +from common import XI_NAMESPACE, XI, inPy3k, call, builtins, u, can_skip, \ + skip, skipIf, skipUnless, Bcfg2TestCase, DBModelTestCase, syncdb, \ + patchIf, datastore +from TestPlugin import TestSpecificData, TestGroupSpool + +class TestSEModuleData(TestSpecificData): + test_obj = SEModuleData + path = os.path.join(datastore, "SEModules", "test.pp", "test.pp") + + def test_bind_entry(self): + data = self.get_obj() + data.data = "test" + entry = lxml.etree.Element("test", name=self.path) + data.bind_entry(entry, Mock()) + self.assertEqual(entry.get("name"), self.path) + self.assertEqual(entry.get("encoding"), "base64") + self.assertEqual(entry.text, b64encode(data.data)) + + +class TestSEModules(TestGroupSpool): + test_obj = SEModules + + def test__get_module_name(self): + modules = self.get_obj() + for mname in ["foo", "foo.pp"]: + entry = lxml.etree.Element("SELinux", type="module", name=mname) + self.assertEqual(modules._get_module_name(entry), "/foo.pp") + + @patch("Bcfg2.Server.Plugins.SEModules.SEModules._get_module_name") + def test_HandlesEntry(self, mock_get_name): + modules = self.get_obj() + modules.Entries['SELinux']['/foo.pp'] = Mock() + modules.Entries['SELinux']['/bar.pp'] = Mock() + for el in [lxml.etree.Element("Path", name="/foo.pp"), + lxml.etree.Element("SELinux", type="fcontext", + name="/foo.pp"), + lxml.etree.Element("SELinux", type="module", + name="/baz.pp")]: + mock_get_name.return_value = el.get("name") + self.assertFalse(modules.HandlesEntry(el, Mock())) + mock_get_name.assert_called_with(el) + + for el in [lxml.etree.Element("SELinux", type="module", + name="/foo.pp"), + lxml.etree.Element("SELinux", type="module", + name="/bar.pp")]: + mock_get_name.return_value = el.get("name") + self.assertTrue(modules.HandlesEntry(el, Mock()), + msg="SEModules fails to handle %s" % el.get("name")) + mock_get_name.assert_called_with(el) + + TestGroupSpool.test_HandlesEntry(self) + + @patch("Bcfg2.Server.Plugins.SEModules.SEModules._get_module_name") + def test_HandlesEntry(self, mock_get_name): + modules = self.get_obj() + handler = Mock() + modules.Entries['SELinux']['/foo.pp'] = handler + mock_get_name.return_value = "/foo.pp" + + entry = lxml.etree.Element("SELinux", type="module", name="foo") + metadata = Mock() + self.assertEqual(modules.HandleEntry(entry, metadata), + handler.return_value) + mock_get_name.assert_called_with(entry) + self.assertEqual(entry.get("name"), mock_get_name.return_value) + handler.assert_called_with(entry, metadata) + + TestGroupSpool.test_HandlesEntry(self) + + def test_add_entry(self): + @patch("%s.%s.event_path" % + (self.test_obj.__module__, self.test_obj.__name__)) + @patch("%s.%s.add_entry" % (self.test_obj.__base__.__module__, + self.test_obj.__base__.__name__)) + def inner(mock_add_entry, mock_event_path): + modules = self.get_obj() + + evt = Mock() + evt.filename = "test.pp.G10_foo" + + mock_event_path.return_value = os.path.join(datastore, + self.test_obj.__name__, + "test.pp", + "test.pp.G10_foo") + modules.add_entry(evt) + self.assertEqual(modules.filename_pattern, "test.pp") + mock_add_entry.assert_called_with(modules, evt) + mock_event_path.assert_called_with(evt) + + inner() + TestGroupSpool.test_add_entry(self) |