summaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-10-29 16:35:27 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-10-30 06:37:46 -0400
commitc4e1b49ff7d5b8f5860f5cc208476ff42159724e (patch)
tree84da32caf2072e617dd6b7be992ff5971b50095a /testsuite
parent2161b4be08f2b295f68e2f7c0f9c791919542a39 (diff)
downloadbcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.tar.gz
bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.tar.bz2
bcfg2-c4e1b49ff7d5b8f5860f5cc208476ff42159724e.zip
Plugins: Added TemplateDataProvider plugin interface
This lets you provide variables to the top-level namespace of templates in a more seamless way than through a Connector plugin. It's mostly useful for TemplateHelper for now, but may find other uses in the future.
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py21
-rw-r--r--testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py32
2 files changed, 40 insertions, 13 deletions
diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py
index 2285fb458..93331304a 100644
--- a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py
+++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py
@@ -26,12 +26,20 @@ class TestCfgCheetahGenerator(TestCfgGenerator):
set_setup_default("repository", datastore)
@patch("Bcfg2.Server.Plugins.Cfg.CfgCheetahGenerator.Template")
- def test_get_data(self, mock_Template):
+ @patch("Bcfg2.Server.Plugins.Cfg.CfgCheetahGenerator.get_template_data")
+ def test_get_data(self, mock_get_template_data, mock_Template):
ccg = self.get_obj()
ccg.data = "data"
entry = lxml.etree.Element("Path", name="/test.txt")
metadata = Mock()
+ template_vars = dict(name=entry.get("name"),
+ metadata=metadata,
+ path=ccg.name,
+ source_path=ccg.name,
+ repo=datastore)
+ mock_get_template_data.return_value = template_vars
+
self.assertEqual(ccg.get_data(entry, metadata),
mock_Template.return_value.respond.return_value)
mock_Template.assert_called_with(
@@ -39,8 +47,9 @@ class TestCfgCheetahGenerator(TestCfgGenerator):
compilerSettings=ccg.settings)
tmpl = mock_Template.return_value
tmpl.respond.assert_called_with()
- self.assertEqual(tmpl.metadata, metadata)
- self.assertEqual(tmpl.name, entry.get("name"))
- self.assertEqual(tmpl.path, entry.get("name"))
- self.assertEqual(tmpl.source_path, ccg.name)
- self.assertEqual(tmpl.repo, datastore)
+ for key, val in template_vars.items():
+ self.assertEqual(getattr(tmpl, key), val)
+ self.assertItemsEqual(mock_get_template_data.call_args[0],
+ [entry, metadata, ccg.name])
+ self.assertIsInstance(mock_get_template_data.call_args[1]['default'],
+ DefaultCheetahDataProvider)
diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py
index 9b6e7fe88..b667d417a 100644
--- a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py
+++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py
@@ -31,7 +31,8 @@ class TestCfgGenshiGenerator(TestCfgGenerator):
cgg = self.get_obj()
self.assertIsInstance(cgg.loader, cgg.__loader_cls__)
- def test_get_data(self):
+ @patch("Bcfg2.Server.Plugins.Cfg.CfgGenshiGenerator.get_template_data")
+ def test_get_data(self, mock_get_template_data):
cgg = self.get_obj()
cgg._handle_genshi_exception = Mock()
cgg.template = Mock()
@@ -45,17 +46,22 @@ class TestCfgGenshiGenerator(TestCfgGenerator):
def reset():
cgg.template.reset_mock()
cgg._handle_genshi_exception.reset_mock()
+ mock_get_template_data.reset_mock()
- template_vars = dict(
- name=entry.get("name"),
- metadata=metadata,
- path=cgg.name,
- source_path=cgg.name,
- repo=datastore)
+ template_vars = dict(name=entry.get("name"),
+ metadata=metadata,
+ path=cgg.name,
+ source_path=cgg.name,
+ repo=datastore)
+ mock_get_template_data.return_value = template_vars
self.assertEqual(cgg.get_data(entry, metadata),
stream.render.return_value)
cgg.template.generate.assert_called_with(**template_vars)
+ self.assertItemsEqual(mock_get_template_data.call_args[0],
+ [entry, metadata, cgg.name])
+ self.assertIsInstance(mock_get_template_data.call_args[1]['default'],
+ DefaultGenshiDataProvider)
fltr.filter.assert_called_with(removecomment)
stream.render.assert_called_with(
"text",
@@ -70,6 +76,10 @@ class TestCfgGenshiGenerator(TestCfgGenerator):
self.assertEqual(cgg.get_data(entry, metadata),
stream.render.return_value)
cgg.template.generate.assert_called_with(**template_vars)
+ self.assertItemsEqual(mock_get_template_data.call_args[0],
+ [entry, metadata, cgg.name])
+ self.assertIsInstance(mock_get_template_data.call_args[1]['default'],
+ DefaultGenshiDataProvider)
fltr.filter.assert_called_with(removecomment)
self.assertEqual(stream.render.call_args_list,
[call("text",
@@ -83,6 +93,10 @@ class TestCfgGenshiGenerator(TestCfgGenerator):
self.assertRaises(UndefinedError,
cgg.get_data, entry, metadata)
cgg.template.generate.assert_called_with(**template_vars)
+ self.assertItemsEqual(mock_get_template_data.call_args[0],
+ [entry, metadata, cgg.name])
+ self.assertIsInstance(mock_get_template_data.call_args[1]['default'],
+ DefaultGenshiDataProvider)
fltr.filter.assert_called_with(removecomment)
stream.render.assert_called_with("text",
encoding=Bcfg2.Options.setup.encoding,
@@ -94,6 +108,10 @@ class TestCfgGenshiGenerator(TestCfgGenerator):
self.assertRaises(ValueError,
cgg.get_data, entry, metadata)
cgg.template.generate.assert_called_with(**template_vars)
+ self.assertItemsEqual(mock_get_template_data.call_args[0],
+ [entry, metadata, cgg.name])
+ self.assertIsInstance(mock_get_template_data.call_args[1]['default'],
+ DefaultGenshiDataProvider)
fltr.filter.assert_called_with(removecomment)
stream.render.assert_called_with("text",
encoding=Bcfg2.Options.setup.encoding,