summaryrefslogtreecommitdiffstats
path: root/testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-11-15 15:25:21 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-11-16 09:57:53 -0500
commita6a29aa01744cc893741ddf558f415b7c705d3f6 (patch)
treee8bf8fef06c30c3a6cfb16d533306223afa8638f /testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py
parent5d58c0435d8d3889d5fa889a65b61565da0a95f6 (diff)
downloadbcfg2-a6a29aa01744cc893741ddf558f415b7c705d3f6.tar.gz
bcfg2-a6a29aa01744cc893741ddf558f415b7c705d3f6.tar.bz2
bcfg2-a6a29aa01744cc893741ddf558f415b7c705d3f6.zip
POSIX: fixed removal of symlinked directories
Diffstat (limited to 'testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py')
-rw-r--r--testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py95
1 files changed, 61 insertions, 34 deletions
diff --git a/testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py b/testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py
index ec194d401..b3599db83 100644
--- a/testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py
+++ b/testsuite/Testsrc/Testlib/TestClient/TestTools/TestPOSIX/Testbase.py
@@ -123,57 +123,84 @@ class TestPOSIXTool(Bcfg2TestCase):
mock_walk.assert_called_with(entry.get("name"))
self.assertItemsEqual(mock_set_perms.call_args_list, all_set_perms)
+ @patch('os.rmdir')
+ @patch('os.unlink')
+ @patch('shutil.rmtree')
+ @patch('os.path.isdir')
+ @patch('os.path.islink')
+ def test_remove(self, mock_islink, mock_isdir, mock_rmtree, mock_unlink,
+ mock_rmdir):
+ entry = lxml.etree.Element("Path", name="/etc/foo")
+
+ def reset():
+ mock_islink.reset_mock()
+ mock_isdir.reset_mock()
+ mock_rmtree.reset_mock()
+ mock_unlink.reset_mock()
+ mock_rmdir.reset_mock()
+
+ mock_islink.return_value = True
+ mock_isdir.return_value = False
+ self.ptool._remove(entry)
+ mock_unlink.assert_called_with(entry.get('name'))
+ self.assertFalse(mock_rmtree.called)
+ self.assertFalse(mock_rmdir.called)
+
+ reset()
+ mock_islink.return_value = False
+ mock_isdir.return_value = True
+ self.ptool._remove(entry)
+ mock_rmtree.assert_called_with(entry.get('name'))
+ self.assertFalse(mock_unlink.called)
+ self.assertFalse(mock_rmdir.called)
+
+ reset()
+ self.ptool._remove(entry, recursive=False)
+ mock_rmdir.assert_called_with(entry.get('name'))
+ self.assertFalse(mock_unlink.called)
+ self.assertFalse(mock_rmtree.called)
+
+ reset()
+ mock_islink.return_value = False
+ mock_isdir.return_value = False
+ self.ptool._remove(entry, recursive=False)
+ mock_unlink.assert_called_with(entry.get('name'))
+ self.assertFalse(mock_rmtree.called)
+ self.assertFalse(mock_rmdir.called)
+
@patch('os.lstat')
- @patch("os.unlink")
- @patch("os.path.isdir")
- @patch("shutil.rmtree")
- def test_exists(self, mock_rmtree, mock_isdir, mock_unlink, mock_lstat):
+ def test_exists(self, mock_lstat):
entry = lxml.etree.Element("Path", name="/etc/foo", type="file")
+ self.ptool._remove = Mock()
+
+ def reset():
+ mock_lstat.reset_mock()
+ self.ptool._remove.reset_mock()
+
mock_lstat.side_effect = OSError
self.assertFalse(self.ptool._exists(entry))
mock_lstat.assert_called_with(entry.get('name'))
- self.assertFalse(mock_unlink.called)
+ self.assertFalse(self.ptool._remove.called)
- mock_lstat.reset_mock()
- mock_unlink.reset_mock()
+ reset()
rv = MagicMock()
mock_lstat.return_value = rv
mock_lstat.side_effect = None
self.assertEqual(self.ptool._exists(entry), rv)
mock_lstat.assert_called_with(entry.get('name'))
- self.assertFalse(mock_unlink.called)
-
- mock_lstat.reset_mock()
- mock_unlink.reset_mock()
- mock_isdir.return_value = False
- self.assertFalse(self.ptool._exists(entry, remove=True))
- mock_isdir.assert_called_with(entry.get('name'))
- mock_lstat.assert_called_with(entry.get('name'))
- mock_unlink.assert_called_with(entry.get('name'))
- self.assertFalse(mock_rmtree.called)
+ self.assertFalse(self.ptool._remove.called)
- mock_lstat.reset_mock()
- mock_isdir.reset_mock()
- mock_unlink.reset_mock()
- mock_rmtree.reset_mock()
- mock_isdir.return_value = True
- self.assertFalse(self.ptool._exists(entry, remove=True))
- mock_isdir.assert_called_with(entry.get('name'))
+ reset()
+ self.assertEqual(self.ptool._exists(entry, remove=True), None)
mock_lstat.assert_called_with(entry.get('name'))
- mock_rmtree.assert_called_with(entry.get('name'))
- self.assertFalse(mock_unlink.called)
+ self.ptool._remove.assert_called_with(entry)
- mock_isdir.reset_mock()
- mock_lstat.reset_mock()
- mock_unlink.reset_mock()
- mock_rmtree.reset_mock()
- mock_rmtree.side_effect = OSError
+ reset()
+ self.ptool._remove.side_effect = OSError
self.assertEqual(self.ptool._exists(entry, remove=True), rv)
- mock_isdir.assert_called_with(entry.get('name'))
mock_lstat.assert_called_with(entry.get('name'))
- mock_rmtree.assert_called_with(entry.get('name'))
- self.assertFalse(mock_unlink.called)
+ self.ptool._remove.assert_called_with(entry)
@patch("os.chown")
@patch("os.chmod")