summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/Bcfg2/Client/Tools/POSIX/File.py6
-rw-r--r--testsuite/Testlib/TestClient/TestTools/TestPOSIX/TestFile.py29
2 files changed, 30 insertions, 5 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/File.py b/src/lib/Bcfg2/Client/Tools/POSIX/File.py
index 6013d864e..99d9133b4 100644
--- a/src/lib/Bcfg2/Client/Tools/POSIX/File.py
+++ b/src/lib/Bcfg2/Client/Tools/POSIX/File.py
@@ -169,7 +169,7 @@ class POSIXFile(POSIXTool):
attrs['current_bfile'] = binascii.b2a_base64(content)
else:
if interactive:
- diff = self._diff(content, entry.text,
+ diff = self._diff(content, self._get_data(entry)[0],
difflib.unified_diff,
filename=entry.get("name"))
if diff:
@@ -182,8 +182,8 @@ class POSIXFile(POSIXTool):
prompt.append("Diff took too long to compute, no "
"printable diff")
if not sensitive:
- diff = self._diff(content, entry.text, difflib.ndiff,
- filename=entry.get("name"))
+ diff = self._diff(content, self._get_data(entry)[0],
+ difflib.ndiff, filename=entry.get("name"))
if diff:
attrs["current_bdiff"] = \
binascii.b2a_base64("\n".join(diff))
diff --git a/testsuite/Testlib/TestClient/TestTools/TestPOSIX/TestFile.py b/testsuite/Testlib/TestClient/TestTools/TestPOSIX/TestFile.py
index 9582636fc..c99176fb9 100644
--- a/testsuite/Testlib/TestClient/TestTools/TestPOSIX/TestFile.py
+++ b/testsuite/Testlib/TestClient/TestTools/TestPOSIX/TestFile.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
import os
import copy
import difflib
@@ -209,23 +210,27 @@ class TestPOSIXFile(TestPOSIXTool):
@patch("__builtin__.open")
@patch("Bcfg2.Client.Tools.POSIX.File.%s._diff" % test_obj.__name__)
+ @patch("Bcfg2.Client.Tools.POSIX.File.%s._get_data" % test_obj.__name__)
@patch("Bcfg2.Client.Tools.POSIX.File.%s._is_string" % test_obj.__name__)
- def test__get_diffs(self, mock_is_string, mock_diff, mock_open):
+ def test__get_diffs(self, mock_is_string, mock_get_data, mock_diff,
+ mock_open):
orig_entry = lxml.etree.Element("Path", name="/test", type="file",
perms='0644', owner='root',
group='root')
orig_entry.text = "test"
ondisk = "test2"
- setup = dict(encoding="ascii", ppath='/', max_copies=5)
+ setup = dict(encoding="utf-8", ppath='/', max_copies=5)
ptool = self.get_obj(posix=get_posix_object(setup=setup))
def reset():
mock_is_string.reset_mock()
+ mock_get_data.reset_mock()
mock_diff.reset_mock()
mock_open.reset_mock()
return copy.deepcopy(orig_entry)
mock_is_string.return_value = True
+ mock_get_data.return_value = (orig_entry.text, False)
mock_open.return_value.read.return_value = ondisk
mock_diff.return_value = ["-test2", "+test"]
@@ -298,6 +303,26 @@ class TestPOSIXFile(TestPOSIXTool):
del entry.attrib["current_bdiff"]
self.assertItemsEqual(orig_entry.attrib, entry.attrib)
+ # non-sensitive, interactive with unicode data
+ entry = reset()
+ entry.text = u"tëst"
+ encoded = entry.text.encode(setup['encoding'])
+ mock_get_data.return_value = (encoded, False)
+ ptool._get_diffs(entry, interactive=True)
+ mock_open.assert_called_with(entry.get("name"))
+ mock_open.return_value.read.assert_any_call()
+ self.assertItemsEqual(mock_diff.call_args_list,
+ [call(ondisk, encoded, difflib.unified_diff,
+ filename=entry.get("name")),
+ call(ondisk, encoded, difflib.ndiff,
+ filename=entry.get("name"))])
+ self.assertIsNotNone(entry.get("qtext"))
+ self.assertEqual(entry.get("current_bdiff"),
+ binascii.b2a_base64("\n".join(mock_diff.return_value)))
+ del entry.attrib['qtext']
+ del entry.attrib["current_bdiff"]
+ self.assertItemsEqual(orig_entry.attrib, entry.attrib)
+
@patch("os.path.exists")
@patch("Bcfg2.Client.Tools.POSIX.base.POSIXTool.install")
@patch("Bcfg2.Client.Tools.POSIX.File.%s._makedirs" % test_obj.__name__)