summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_mailbox.py
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2012-06-28 10:53:43 (GMT)
committerPetri Lehtinen <petri@digip.org>2012-06-28 10:56:14 (GMT)
commitdde8cb0899a0feb5a71918cc11bbc4f7f19830d4 (patch)
treec737036c0873297777e3ee05bb2c2e88219f0f6e /Lib/test/test_mailbox.py
parentabb755db11b8f5a5a0b9c97540e3fb4e161e1894 (diff)
parentf29435f9f0659d433ed2e0e3e8b9c15a4c7155fd (diff)
downloadcpython-dde8cb0899a0feb5a71918cc11bbc4f7f19830d4.zip
cpython-dde8cb0899a0feb5a71918cc11bbc4f7f19830d4.tar.gz
cpython-dde8cb0899a0feb5a71918cc11bbc4f7f19830d4.tar.bz2
#9559: Append data to single-file mailbox files if messages are only added
If messages were only added, a new file is no longer created and renamed over the old file when flush() is called on an mbox, MMDF or Babyl mailbox.
Diffstat (limited to 'Lib/test/test_mailbox.py')
-rw-r--r--Lib/test/test_mailbox.py29
1 files changed, 27 insertions, 2 deletions
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index cb54505..c56002b 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -945,7 +945,32 @@ class TestMaildir(TestMailbox, unittest.TestCase):
self._box._refresh()
self.assertTrue(refreshed())
-class _TestMboxMMDF(TestMailbox):
+
+class _TestSingleFile(TestMailbox):
+ '''Common tests for single-file mailboxes'''
+
+ def test_add_doesnt_rewrite(self):
+ # When only adding messages, flush() should not rewrite the
+ # mailbox file. See issue #9559.
+
+ # Inode number changes if the contents are written to another
+ # file which is then renamed over the original file. So we
+ # must check that the inode number doesn't change.
+ inode_before = os.stat(self._path).st_ino
+
+ self._box.add(self._template % 0)
+ self._box.flush()
+
+ inode_after = os.stat(self._path).st_ino
+ self.assertEqual(inode_before, inode_after)
+
+ # Make sure the message was really added
+ self._box.close()
+ self._box = self._factory(self._path)
+ self.assertEqual(len(self._box), 1)
+
+
+class _TestMboxMMDF(_TestSingleFile):
def tearDown(self):
super().tearDown()
@@ -1220,7 +1245,7 @@ class TestMH(TestMailbox, unittest.TestCase):
return os.path.join(self._path, '.mh_sequences.lock')
-class TestBabyl(TestMailbox, unittest.TestCase):
+class TestBabyl(_TestSingleFile, unittest.TestCase):
_factory = lambda self, path, factory=None: mailbox.Babyl(path, factory)