def test_install(self, mock_rmtree, mock_isdir, mock_remove, mock_rmdir): entry = lxml.etree.Element("Path", name="/test", type="nonexistent") def reset(): mock_isdir.reset_mock() mock_remove.reset_mock() mock_rmdir.reset_mock() mock_rmtree.reset_mock() mock_isdir.return_value = False self.assertTrue(self.ptool.install(entry)) mock_remove.assert_called_with(entry.get("name")) reset() mock_remove.side_effect = OSError self.assertFalse(self.ptool.install(entry)) mock_remove.assert_called_with(entry.get("name")) reset() mock_isdir.return_value = True self.assertTrue(self.ptool.install(entry)) mock_rmdir.assert_called_with(entry.get("name")) reset() mock_rmdir.side_effect = OSError self.assertFalse(self.ptool.install(entry)) mock_rmdir.assert_called_with(entry.get("name")) reset() entry.set("recursive", "true") self.assertTrue(self.ptool.install(entry)) mock_rmtree.assert_called_with(entry.get("name")) reset() mock_rmtree.side_effect = OSError self.assertFalse(self.ptool.install(entry)) mock_rmtree.assert_called_with(entry.get("name")) reset() child_entry = lxml.etree.Element("Path", name="/test/foo", type="nonexistent") ptool = self.get_obj(posix=get_posix_object( config=get_config([child_entry]))) mock_rmtree.side_effect = None self.assertTrue(ptool.install(entry)) mock_rmtree.assert_called_with(entry.get("name")) reset() child_entry = lxml.etree.Element("Path", name="/test/foo", type="file") ptool = self.get_obj(posix=get_posix_object( config=get_config([child_entry]))) mock_rmtree.side_effect = None self.assertFalse(ptool.install(entry))
def test_install(self, mock_rmtree, mock_isdir, mock_remove, mock_rmdir): entry = lxml.etree.Element("Path", name="/test", type="nonexistent") def reset(): mock_isdir.reset_mock() mock_remove.reset_mock() mock_rmdir.reset_mock() mock_rmtree.reset_mock() mock_isdir.return_value = False self.assertTrue(self.ptool.install(entry)) mock_remove.assert_called_with(entry.get("name")) reset() mock_remove.side_effect = OSError self.assertFalse(self.ptool.install(entry)) mock_remove.assert_called_with(entry.get("name")) reset() mock_isdir.return_value = True self.assertTrue(self.ptool.install(entry)) mock_rmdir.assert_called_with(entry.get("name")) reset() mock_rmdir.side_effect = OSError self.assertFalse(self.ptool.install(entry)) mock_rmdir.assert_called_with(entry.get("name")) reset() entry.set("recursive", "true") self.assertTrue(self.ptool.install(entry)) mock_rmtree.assert_called_with(entry.get("name")) reset() mock_rmtree.side_effect = OSError self.assertFalse(self.ptool.install(entry)) mock_rmtree.assert_called_with(entry.get("name")) reset() child_entry = lxml.etree.Element("Path", name="/test/foo", type="nonexistent") ptool = self.get_obj(posix=get_posix_object(config=get_config([child_entry]))) mock_rmtree.side_effect = None self.assertTrue(ptool.install(entry)) mock_rmtree.assert_called_with(entry.get("name")) reset() child_entry = lxml.etree.Element("Path", name="/test/foo", type="file") ptool = self.get_obj(posix=get_posix_object(config=get_config([child_entry]))) mock_rmtree.side_effect = None self.assertFalse(ptool.install(entry))
def test_get_data(self): orig_entry = lxml.etree.Element("Path", name="/test", type="file") setup = dict(encoding="ascii", ppath='/', max_copies=5) ptool = self.get_obj(posix=get_posix_object(setup=setup)) entry = copy.deepcopy(orig_entry) entry.text = b64encode("test") entry.set("encoding", "base64") self.assertEqual(ptool._get_data(entry), ("test", True)) entry = copy.deepcopy(orig_entry) entry.set("empty", "true") self.assertEqual(ptool._get_data(entry), ("", False)) entry = copy.deepcopy(orig_entry) entry.text = "test" self.assertEqual(ptool._get_data(entry), ("test", False)) if inPy3k: ustr = 'é' else: ustr = u_str('é', 'UTF-8') entry = copy.deepcopy(orig_entry) entry.text = ustr self.assertEqual(ptool._get_data(entry), (ustr, False))
def test_install(self): entry = lxml.etree.Element("Path", name="/test", type="nonexistent") self.ptool._remove = Mock() def reset(): self.ptool._remove.reset_mock() self.assertTrue(self.ptool.install(entry)) self.ptool._remove.assert_called_with(entry, recursive=False) reset() entry.set("recursive", "true") self.assertTrue(self.ptool.install(entry)) self.ptool._remove.assert_called_with(entry, recursive=True) reset() child_entry = lxml.etree.Element("Path", name="/test/foo", type="nonexistent") ptool = self.get_obj(posix=get_posix_object(config=get_config([child_entry]))) ptool._remove = Mock() self.assertTrue(ptool.install(entry)) ptool._remove.assert_called_with(entry, recursive=True) reset() child_entry = lxml.etree.Element("Path", name="/test/foo", type="file") ptool = self.get_obj(posix=get_posix_object(config=get_config([child_entry]))) ptool._remove = Mock() self.assertFalse(ptool.install(entry)) self.assertFalse(ptool._remove.called) reset() entry.set("recursive", "false") self.ptool._remove.side_effect = OSError self.assertFalse(self.ptool.install(entry)) self.ptool._remove.assert_called_with(entry, recursive=False)
def test_verify(self, mock_get_diffs, mock_get_data, mock_exists, mock_verify, mock_open): entry = lxml.etree.Element("Path", name="/test", type="file") setup = dict(interactive=False, ppath='/', max_copies=5) ptool = self.get_obj(posix=get_posix_object(setup=setup)) def reset(): mock_get_diffs.reset_mock() mock_get_data.reset_mock() mock_exists.reset_mock() mock_verify.reset_mock() mock_open.reset_mock() mock_get_data.return_value = ("test", False) mock_exists.return_value = False mock_verify.return_value = True self.assertFalse(ptool.verify(entry, [])) mock_exists.assert_called_with(entry) mock_verify.assert_called_with(ptool, entry, []) mock_get_diffs.assert_called_with(entry, interactive=False, sensitive=False, is_binary=False, content="") reset() exists_rv = MagicMock() exists_rv.__getitem__.return_value = 5 mock_exists.return_value = exists_rv mock_get_data.return_value = ("test", True) self.assertFalse(ptool.verify(entry, [])) mock_exists.assert_called_with(entry) mock_verify.assert_called_with(ptool, entry, []) mock_get_diffs.assert_called_with(entry, interactive=False, sensitive=False, is_binary=True, content=None) reset() mock_get_data.return_value = ("test", False) exists_rv.__getitem__.return_value = 4 entry.set("sensitive", "true") mock_open.return_value.read.return_value = "tart" self.assertFalse(ptool.verify(entry, [])) mock_exists.assert_called_with(entry) mock_verify.assert_called_with(ptool, entry, []) mock_open.assert_called_with(entry.get("name")) mock_open.return_value.read.assert_called_with() mock_get_diffs.assert_called_with(entry, interactive=False, sensitive=True, is_binary=False, content="tart") reset() mock_open.return_value.read.return_value = "test" self.assertTrue(ptool.verify(entry, [])) mock_exists.assert_called_with(entry) mock_verify.assert_called_with(ptool, entry, []) mock_open.assert_called_with(entry.get("name")) mock_open.return_value.read.assert_called_with() self.assertFalse(mock_get_diffs.called) reset() mock_open.side_effect = IOError self.assertFalse(ptool.verify(entry, [])) mock_exists.assert_called_with(entry) mock_open.assert_called_with(entry.get("name"))
def get_file_object(posix=None): if posix is None: posix = get_posix_object() return POSIXFile(posix.logger, posix.setup, posix.config)
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="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"] # binary data in the entry entry = reset() ptool._get_diffs(entry, is_binary=True) mock_open.assert_called_with(entry.get("name")) mock_open.return_value.read.assert_any_call() self.assertFalse(mock_diff.called) self.assertEqual(entry.get("current_bfile"), b64encode(ondisk)) # binary data on disk entry = reset() mock_is_string.return_value = False ptool._get_diffs(entry, content=ondisk) self.assertFalse(mock_open.called) self.assertFalse(mock_diff.called) self.assertEqual(entry.get("current_bfile"), b64encode(ondisk)) # sensitive, non-interactive -- do nothing entry = reset() mock_is_string.return_value = True ptool._get_diffs(entry, sensitive=True, interactive=False) self.assertFalse(mock_open.called) self.assertFalse(mock_diff.called) self.assertXMLEqual(entry, orig_entry) # sensitive, interactive entry = reset() ptool._get_diffs(entry, sensitive=True, interactive=True) mock_open.assert_called_with(entry.get("name")) mock_open.return_value.read.assert_any_call() mock_diff.assert_called_with(ondisk, entry.text, difflib.unified_diff, filename=entry.get("name")) self.assertIsNotNone(entry.get("qtext")) del entry.attrib['qtext'] self.assertItemsEqual(orig_entry.attrib, entry.attrib) # non-sensitive, non-interactive entry = reset() ptool._get_diffs(entry, content=ondisk) self.assertFalse(mock_open.called) mock_diff.assert_called_with(ondisk, entry.text, difflib.ndiff, filename=entry.get("name")) self.assertIsNone(entry.get("qtext")) self.assertEqual(entry.get("current_bdiff"), b64encode("\n".join(mock_diff.return_value))) del entry.attrib["current_bdiff"] self.assertItemsEqual(orig_entry.attrib, entry.attrib) # non-sensitive, interactive -- do everything. also test # appending to qtext entry = reset() entry.set("qtext", "test") 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, entry.text, difflib.unified_diff, filename=entry.get("name")), call(ondisk, entry.text, difflib.ndiff, filename=entry.get("name")) ]) self.assertIsNotNone(entry.get("qtext")) self.assertTrue(entry.get("qtext").startswith("test\n")) self.assertEqual(entry.get("current_bdiff"), b64encode("\n".join(mock_diff.return_value))) del entry.attrib['qtext'] 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_diff.return_value = ["-test2", "+tëst"] 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"), b64encode("\n".join(mock_diff.return_value))) del entry.attrib['qtext'] del entry.attrib["current_bdiff"] self.assertItemsEqual(orig_entry.attrib, entry.attrib)
def get_obj(self, posix=None): if posix is None: posix = get_posix_object() return self.test_obj(posix.logger, posix.setup, posix.config)
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="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"] # binary data in the entry entry = reset() ptool._get_diffs(entry, is_binary=True) mock_open.assert_called_with(entry.get("name")) mock_open.return_value.read.assert_any_call() self.assertFalse(mock_diff.called) self.assertEqual(entry.get("current_bfile"), b64encode(ondisk)) # binary data on disk entry = reset() mock_is_string.return_value = False ptool._get_diffs(entry, content=ondisk) self.assertFalse(mock_open.called) self.assertFalse(mock_diff.called) self.assertEqual(entry.get("current_bfile"), b64encode(ondisk)) # sensitive, non-interactive -- do nothing entry = reset() mock_is_string.return_value = True ptool._get_diffs(entry, sensitive=True, interactive=False) self.assertFalse(mock_open.called) self.assertFalse(mock_diff.called) self.assertXMLEqual(entry, orig_entry) # sensitive, interactive entry = reset() ptool._get_diffs(entry, sensitive=True, interactive=True) mock_open.assert_called_with(entry.get("name")) mock_open.return_value.read.assert_any_call() mock_diff.assert_called_with(ondisk, entry.text, difflib.unified_diff, filename=entry.get("name")) self.assertIsNotNone(entry.get("qtext")) del entry.attrib['qtext'] self.assertItemsEqual(orig_entry.attrib, entry.attrib) # non-sensitive, non-interactive entry = reset() ptool._get_diffs(entry, content=ondisk) self.assertFalse(mock_open.called) mock_diff.assert_called_with(ondisk, entry.text, difflib.ndiff, filename=entry.get("name")) self.assertIsNone(entry.get("qtext")) self.assertEqual(entry.get("current_bdiff"), b64encode("\n".join(mock_diff.return_value))) del entry.attrib["current_bdiff"] self.assertItemsEqual(orig_entry.attrib, entry.attrib) # non-sensitive, interactive -- do everything. also test # appending to qtext entry = reset() entry.set("qtext", "test") 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, entry.text, difflib.unified_diff, filename=entry.get("name")), call(ondisk, entry.text, difflib.ndiff, filename=entry.get("name"))]) self.assertIsNotNone(entry.get("qtext")) self.assertTrue(entry.get("qtext").startswith("test\n")) self.assertEqual(entry.get("current_bdiff"), b64encode("\n".join(mock_diff.return_value))) del entry.attrib['qtext'] 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"), b64encode("\n".join(mock_diff.return_value))) del entry.attrib['qtext'] del entry.attrib["current_bdiff"] self.assertItemsEqual(orig_entry.attrib, entry.attrib)