[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-57]

more unit tests
add a unit test for sending a large (1MB) file with line buffering but no
linefeeds (this triggered several bugs and inefficiencies), and another test
to verify that the write buffer is flushed on seek.
This commit is contained in:
Robey Pointer 2004-06-10 17:35:30 +00:00
parent 9baa2b361e
commit 1144a5d3d9
2 changed files with 43 additions and 3 deletions

View File

@ -136,4 +136,3 @@ class BufferedFileTest (unittest.TestCase):
f.write('Enough.') f.write('Enough.')
self.assertEqual(f.read(20), 'Too small. Enough.') self.assertEqual(f.read(20), 'Too small. Enough.')
f.close() f.close()

View File

@ -27,6 +27,7 @@ do test file operations in (so no existing files will be harmed).
import sys, os import sys, os
import random import random
import logging
# need a host and private-key where we have acecss # need a host and private-key where we have acecss
HOST = os.environ.get('TEST_HOST', 'localhost') HOST = os.environ.get('TEST_HOST', 'localhost')
@ -309,7 +310,29 @@ class SFTPTest (unittest.TestCase):
except: except:
pass pass
def test_A_lots_of_files(self): def test_A_flush_seek(self):
"""
verify that buffered writes are automatically flushed on seek.
"""
f = sftp.open(FOLDER + '/happy.txt', 'w', 1)
try:
f.write('full line.\n')
f.write('partial')
f.seek(9, f.SEEK_SET)
f.write('?\n')
f.close()
f = sftp.open(FOLDER + '/happy.txt', 'r')
self.assertEqual(f.readline(), 'full line?\n')
self.assertEqual(f.read(7), 'partial')
f.close()
finally:
try:
sftp.remove(FOLDER + '/happy.txt')
except:
pass
def test_B_lots_of_files(self):
""" """
create a bunch of files over the same session. create a bunch of files over the same session.
""" """
@ -326,7 +349,6 @@ class SFTPTest (unittest.TestCase):
numlist = range(numfiles) numlist = range(numfiles)
while len(numlist) > 0: while len(numlist) > 0:
r = numlist[random.randint(0, len(numlist) - 1)] r = numlist[random.randint(0, len(numlist) - 1)]
print r,
f = sftp.open('%s/file%d.txt' % (FOLDER, r)) f = sftp.open('%s/file%d.txt' % (FOLDER, r))
self.assertEqual(f.readline(), 'this is file #%d.\n' % r) self.assertEqual(f.readline(), 'this is file #%d.\n' % r)
f.close() f.close()
@ -337,3 +359,22 @@ class SFTPTest (unittest.TestCase):
sftp.remove('%s/file%d.txt' % (FOLDER, i)) sftp.remove('%s/file%d.txt' % (FOLDER, i))
except: except:
pass pass
def test_C_big_file(self):
"""
write a 1MB file, with no linefeeds, using line buffering.
FIXME: this is slow! what causes the slowness?
"""
kblob = (1024 * 'x')
try:
f = sftp.open('%s/hongry.txt' % FOLDER, 'w', 1)
for n in range(1024):
f.write(kblob)
if n % 128 == 0:
sys.stderr.write('.')
f.close()
sys.stderr.write(' ')
self.assertEqual(sftp.stat('%s/hongry.txt' % FOLDER).st_size, 1024 * 1024)
finally:
sftp.remove('%s/hongry.txt' % FOLDER)