From 14406cc14a4d832fe83df5da27937051e41dd093 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 3 Jan 2013 13:40:24 -0600 Subject: Cfg: Added feature to provide generation of SSH keys, authorized_keys file --- .../TestPlugins/TestCfg/TestCfgPublicKeyCreator.py | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgPublicKeyCreator.py (limited to 'testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgPublicKeyCreator.py') diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgPublicKeyCreator.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgPublicKeyCreator.py new file mode 100644 index 000000000..2e7b6eef4 --- /dev/null +++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgPublicKeyCreator.py @@ -0,0 +1,76 @@ +import os +import sys +import lxml.etree +from mock import Mock, MagicMock, patch +from Bcfg2.Server.Plugins.Cfg import CfgCreationError, CfgCreator +from Bcfg2.Server.Plugins.Cfg.CfgPublicKeyCreator import * +from Bcfg2.Server.Plugin import StructFile, PluginExecutionError + +# 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 * +from TestServer.TestPlugins.TestCfg.Test_init import TestCfgCreator +from TestServer.TestPlugin.Testhelpers import TestStructFile + + +class TestCfgPublicKeyCreator(TestCfgCreator, TestStructFile): + test_obj = CfgPublicKeyCreator + should_monitor = False + + def get_obj(self, name=None, fam=None): + return TestCfgCreator.get_obj(self, name=name) + + @patch("Bcfg2.Server.Plugins.Cfg.CfgCreator.handle_event") + @patch("Bcfg2.Server.Plugin.helpers.StructFile.HandleEvent") + def test_handle_event(self, mock_HandleEvent, mock_handle_event): + pkc = self.get_obj() + evt = Mock() + pkc.handle_event(evt) + mock_HandleEvent.assert_called_with(pkc, evt) + mock_handle_event.assert_called_with(pkc, evt) + + def test_create_data(self): + metadata = Mock() + pkc = self.get_obj() + pkc.cfg = Mock() + + privkey_entryset = Mock() + privkey_creator = Mock() + pubkey = Mock() + privkey = Mock() + privkey_creator.create_data.return_value = (pubkey, privkey) + privkey_entryset.best_matching.return_value = privkey_creator + pkc.cfg.entries = {"/home/foo/.ssh/id_rsa": privkey_entryset} + + # public key doesn't end in .pub + entry = lxml.etree.Element("Path", name="/home/bar/.ssh/bogus") + self.assertRaises(CfgCreationError, + pkc.create_data, entry, metadata) + + # private key not in cfg.entries + entry = lxml.etree.Element("Path", name="/home/bar/.ssh/id_rsa.pub") + self.assertRaises(CfgCreationError, + pkc.create_data, entry, metadata) + + # successful operation + entry = lxml.etree.Element("Path", name="/home/foo/.ssh/id_rsa.pub") + self.assertEqual(pkc.create_data(entry, metadata), pubkey) + privkey_entryset.get_handlers.assert_called_with(metadata, CfgCreator) + privkey_entryset.best_matching.assert_called_with(metadata, + privkey_entryset.get_handlers.return_value) + self.assertXMLEqual(privkey_creator.create_data.call_args[0][0], + lxml.etree.Element("Path", + name="/home/foo/.ssh/id_rsa")) + self.assertEqual(privkey_creator.create_data.call_args[0][1], metadata) + + # no privkey.xml + privkey_entryset.best_matching.side_effect = PluginExecutionError + self.assertRaises(CfgCreationError, + pkc.create_data, entry, metadata) -- cgit v1.2.3-1-g7c22