diff options
author | Petri Lehtinen <petri@digip.org> | 2012-06-28 10:53:43 (GMT) |
---|---|---|
committer | Petri Lehtinen <petri@digip.org> | 2012-06-28 10:56:14 (GMT) |
commit | dde8cb0899a0feb5a71918cc11bbc4f7f19830d4 (patch) | |
tree | c737036c0873297777e3ee05bb2c2e88219f0f6e /Lib/test/test_mailbox.py | |
parent | abb755db11b8f5a5a0b9c97540e3fb4e161e1894 (diff) | |
parent | f29435f9f0659d433ed2e0e3e8b9c15a4c7155fd (diff) | |
download | cpython-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.py | 29 |
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) |