diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-05-10 20:03:04 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-05-10 20:03:04 (GMT) |
commit | fd69208b78de964f978b6a070c0fa0729e8d5285 (patch) | |
tree | 52c8f6be59c2f168d2ef7eb8f4712a1f5c4a4a18 | |
parent | 8c3e91efaf6508e73fa997b95ef85b66f7cb5d63 (diff) | |
download | cpython-fd69208b78de964f978b6a070c0fa0729e8d5285.zip cpython-fd69208b78de964f978b6a070c0fa0729e8d5285.tar.gz cpython-fd69208b78de964f978b6a070c0fa0729e8d5285.tar.bz2 |
Change test_mmap.py to use test_support.TESTFN instead of hardcoded "foo",
and wrap the body in try/finally to ensure TESTFN gets cleaned up no
matter what.
-rw-r--r-- | Lib/test/test_mmap.py | 227 |
1 files changed, 119 insertions, 108 deletions
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index 8066285..427f4e6 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -1,4 +1,4 @@ -from test_support import verify +from test_support import verify, TESTFN, unlink import mmap import os, re, sys @@ -7,118 +7,129 @@ PAGESIZE = mmap.PAGESIZE def test_both(): "Test mmap module on Unix systems and Windows" - # Create an mmap'ed file - f = open('foo', 'w+') - - # Write 2 pages worth of data to the file - f.write('\0'* PAGESIZE) - f.write('foo') - f.write('\0'* (PAGESIZE-3) ) - - m = mmap.mmap(f.fileno(), 2 * PAGESIZE) - f.close() - - # Simple sanity checks - - print type(m) # SF bug 128713: segfaulted on Linux - print ' Position of foo:', m.find('foo') / float(PAGESIZE), 'pages' - verify(m.find('foo') == PAGESIZE) - - print ' Length of file:', len(m) / float(PAGESIZE), 'pages' - verify(len(m) == 2*PAGESIZE) - - print ' Contents of byte 0:', repr(m[0]) - verify(m[0] == '\0') - print ' Contents of first 3 bytes:', repr(m[0:3]) - verify(m[0:3] == '\0\0\0') - - # Modify the file's content - print "\n Modifying file's content..." - m[0] = '3' - m[PAGESIZE +3: PAGESIZE +3+3]='bar' - - # Check that the modification worked - print ' Contents of byte 0:', repr(m[0]) - verify(m[0] == '3') - print ' Contents of first 3 bytes:', repr(m[0:3]) - verify(m[0:3] == '3\0\0') - print ' Contents of second page:', repr(m[PAGESIZE-1 : PAGESIZE + 7]) - verify(m[PAGESIZE-1 : PAGESIZE + 7] == '\0foobar\0') - - m.flush() - - # Test doing a regular expression match in an mmap'ed file - match=re.search('[A-Za-z]+', m) - if match is None: - print ' ERROR: regex match on mmap failed!' - else: - start, end = match.span(0) - length = end - start - - print ' Regex match on mmap (page start, length of match):', - print start / float(PAGESIZE), length - - verify(start == PAGESIZE) - verify(end == PAGESIZE + 6) - - # test seeking around (try to overflow the seek implementation) - m.seek(0,0) - print ' Seek to zeroth byte' - verify(m.tell() == 0) - m.seek(42,1) - print ' Seek to 42nd byte' - verify(m.tell() == 42) - m.seek(0,2) - print ' Seek to last byte' - verify(m.tell() == len(m)) - - print ' Try to seek to negative position...' - try: - m.seek(-1) - except ValueError: - pass - else: - verify(0, 'expected a ValueError but did not get it') - - print ' Try to seek beyond end of mmap...' - try: - m.seek(1,2) - except ValueError: - pass - else: - verify(0, 'expected a ValueError but did not get it') - - print ' Try to seek to negative position...' - try: - m.seek(-len(m)-1,2) - except ValueError: - pass - else: - verify(0, 'expected a ValueError but did not get it') - - # Try resizing map - print ' Attempting resize()' - try: - m.resize( 512 ) - except SystemError: - # resize() not supported - # No messages are printed, since the output of this test suite - # would then be different across platforms. - pass - else: - # resize() is supported - verify(len(m) == 512, - "len(m) is %d, but expecting 512" % (len(m),) ) - # Check that we can no longer seek beyond the new size. + # Create a file to be mmap'ed. + f = open(TESTFN, 'w+') + + try: # unlink TESTFN no matter what + # Write 2 pages worth of data to the file + f.write('\0'* PAGESIZE) + f.write('foo') + f.write('\0'* (PAGESIZE-3) ) + + m = mmap.mmap(f.fileno(), 2 * PAGESIZE) + f.close() + + # Simple sanity checks + + print type(m) # SF bug 128713: segfaulted on Linux + print ' Position of foo:', m.find('foo') / float(PAGESIZE), 'pages' + verify(m.find('foo') == PAGESIZE) + + print ' Length of file:', len(m) / float(PAGESIZE), 'pages' + verify(len(m) == 2*PAGESIZE) + + print ' Contents of byte 0:', repr(m[0]) + verify(m[0] == '\0') + print ' Contents of first 3 bytes:', repr(m[0:3]) + verify(m[0:3] == '\0\0\0') + + # Modify the file's content + print "\n Modifying file's content..." + m[0] = '3' + m[PAGESIZE +3: PAGESIZE +3+3]='bar' + + # Check that the modification worked + print ' Contents of byte 0:', repr(m[0]) + verify(m[0] == '3') + print ' Contents of first 3 bytes:', repr(m[0:3]) + verify(m[0:3] == '3\0\0') + print ' Contents of second page:', repr(m[PAGESIZE-1 : PAGESIZE + 7]) + verify(m[PAGESIZE-1 : PAGESIZE + 7] == '\0foobar\0') + + m.flush() + + # Test doing a regular expression match in an mmap'ed file + match=re.search('[A-Za-z]+', m) + if match is None: + print ' ERROR: regex match on mmap failed!' + else: + start, end = match.span(0) + length = end - start + + print ' Regex match on mmap (page start, length of match):', + print start / float(PAGESIZE), length + + verify(start == PAGESIZE) + verify(end == PAGESIZE + 6) + + # test seeking around (try to overflow the seek implementation) + m.seek(0,0) + print ' Seek to zeroth byte' + verify(m.tell() == 0) + m.seek(42,1) + print ' Seek to 42nd byte' + verify(m.tell() == 42) + m.seek(0,2) + print ' Seek to last byte' + verify(m.tell() == len(m)) + + print ' Try to seek to negative position...' try: - m.seek(513,0) + m.seek(-1) except ValueError: pass else: - verify(0, 'Could seek beyond the new size') + verify(0, 'expected a ValueError but did not get it') + + print ' Try to seek beyond end of mmap...' + try: + m.seek(1,2) + except ValueError: + pass + else: + verify(0, 'expected a ValueError but did not get it') + + print ' Try to seek to negative position...' + try: + m.seek(-len(m)-1,2) + except ValueError: + pass + else: + verify(0, 'expected a ValueError but did not get it') + + # Try resizing map + print ' Attempting resize()' + try: + m.resize( 512 ) + except SystemError: + # resize() not supported + # No messages are printed, since the output of this test suite + # would then be different across platforms. + pass + else: + # resize() is supported + verify(len(m) == 512, + "len(m) is %d, but expecting 512" % (len(m),) ) + # Check that we can no longer seek beyond the new size. + try: + m.seek(513,0) + except ValueError: + pass + else: + verify(0, 'Could seek beyond the new size') + + m.close() + + finally: + try: + f.close() + except OSError: + pass + try: + unlink(TESTFN) + except OSError: + pass - m.close() - os.unlink("foo") print ' Test passed' test_both() |