mirror of https://github.com/python/cpython
GH-120754: Add more tests around seek + readall (#122103)
In the process of speeding up readall, A number of related tests (ex. large file tests in test_zipfile) found problems with the change I was making. This adds I/O tests to specifically test these cases to help ensure they don't regress and hopefully make debugging easier. This is part of the improvements from https://github.com/python/cpython/pull/121593#issuecomment-2222261986
This commit is contained in:
parent
e91ef13861
commit
9eb734111b
|
@ -141,6 +141,9 @@ class TestFileMethods(LargeFileTest):
|
||||||
f.truncate(1)
|
f.truncate(1)
|
||||||
self.assertEqual(f.tell(), 0) # else pointer moved
|
self.assertEqual(f.tell(), 0) # else pointer moved
|
||||||
f.seek(0)
|
f.seek(0)
|
||||||
|
# Verify readall on a truncated file is well behaved. read()
|
||||||
|
# without a size can be unbounded, this should get just the byte
|
||||||
|
# that remains.
|
||||||
self.assertEqual(len(f.read()), 1) # else wasn't truncated
|
self.assertEqual(len(f.read()), 1) # else wasn't truncated
|
||||||
|
|
||||||
def test_seekable(self):
|
def test_seekable(self):
|
||||||
|
@ -151,6 +154,22 @@ class TestFileMethods(LargeFileTest):
|
||||||
f.seek(pos)
|
f.seek(pos)
|
||||||
self.assertTrue(f.seekable())
|
self.assertTrue(f.seekable())
|
||||||
|
|
||||||
|
@bigmemtest(size=size, memuse=2, dry_run=False)
|
||||||
|
def test_seek_readall(self, _size):
|
||||||
|
# Seek which doesn't change position should readall successfully.
|
||||||
|
with self.open(TESTFN, 'rb') as f:
|
||||||
|
self.assertEqual(f.seek(0, os.SEEK_CUR), 0)
|
||||||
|
self.assertEqual(len(f.read()), size + 1)
|
||||||
|
|
||||||
|
# Seek which changes (or might change) position should readall
|
||||||
|
# successfully.
|
||||||
|
with self.open(TESTFN, 'rb') as f:
|
||||||
|
self.assertEqual(f.seek(20, os.SEEK_SET), 20)
|
||||||
|
self.assertEqual(len(f.read()), size - 19)
|
||||||
|
|
||||||
|
with self.open(TESTFN, 'rb') as f:
|
||||||
|
self.assertEqual(f.seek(-3, os.SEEK_END), size - 2)
|
||||||
|
self.assertEqual(len(f.read()), 3)
|
||||||
|
|
||||||
def skip_no_disk_space(path, required):
|
def skip_no_disk_space(path, required):
|
||||||
def decorator(fun):
|
def decorator(fun):
|
||||||
|
|
Loading…
Reference in New Issue