Convert test_dummy_threading and test_dbm to unittest.

This commit is contained in:
Brett Cannon 2008-03-18 01:50:25 +00:00
parent 5de250e823
commit ba17cfc66c
3 changed files with 79 additions and 106 deletions

View file

@ -1,60 +1,40 @@
#! /usr/bin/env python from test import test_support
"""Test script for the dbm module import unittest
Roger E. Masse
"""
import os import os
import random
import dbm import dbm
from dbm import error from dbm import error
from test.test_support import verbose, verify, TestSkipped, TESTFN
# make filename unique to allow multiple concurrent tests class DbmTestCase(unittest.TestCase):
# and to minimize the likelihood of a problem from an old file
filename = TESTFN
def cleanup(): def setUp(self):
self.filename = test_support.TESTFN
self.d = dbm.open(self.filename, 'c')
self.d.close()
def tearDown(self):
for suffix in ['', '.pag', '.dir', '.db']: for suffix in ['', '.pag', '.dir', '.db']:
test_support.unlink(self.filename + suffix)
def test_keys(self):
self.d = dbm.open(self.filename, 'c')
self.assert_(self.d.keys() == [])
self.d['a'] = 'b'
self.d['12345678910'] = '019237410982340912840198242'
self.d.keys()
self.assert_(self.d.has_key('a'))
self.d.close()
def test_modes(self):
for mode in ['r', 'rw', 'w', 'n']:
try: try:
os.unlink(filename + suffix) self.d = dbm.open(self.filename, mode)
except OSError, (errno, strerror): self.d.close()
# if we can't delete the file because of permissions, except dbm.error:
# nothing will work, so skip the test self.fail()
if errno == 1:
raise TestSkipped, 'unable to remove: ' + filename + suffix
def test_keys():
d = dbm.open(filename, 'c')
verify(d.keys() == [])
d['a'] = 'b'
d['12345678910'] = '019237410982340912840198242'
d.keys()
if d.has_key('a'):
if verbose:
print 'Test dbm keys: ', d.keys()
d.close()
def test_modes():
d = dbm.open(filename, 'r')
d.close()
d = dbm.open(filename, 'rw')
d.close()
d = dbm.open(filename, 'w')
d.close()
d = dbm.open(filename, 'n')
d.close()
def test_main(): def test_main():
cleanup() test_support.run_unittest(DbmTestCase)
try:
test_keys()
test_modes()
except:
cleanup()
raise
cleanup()
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()

View file

@ -1,72 +1,63 @@
# Very rudimentary test of threading module from test import test_support
import unittest
# Create a bunch of threads, let each do some work, wait until all are done
from test.test_support import verbose
import dummy_threading as _threading import dummy_threading as _threading
import time import time
class DummyThreadingTestCase(unittest.TestCase):
class TestThread(_threading.Thread): class TestThread(_threading.Thread):
def run(self): def run(self):
global running global running
global sema
global mutex
# Uncomment if testing another module, such as the real 'threading' # Uncomment if testing another module, such as the real 'threading'
# module. # module.
#delay = random.random() * 2 #delay = random.random() * 2
delay = 0 delay = 0
if verbose: if test_support.verbose:
print 'task', self.getName(), 'will run for', delay, 'sec' print 'task', self.getName(), 'will run for', delay, 'sec'
sema.acquire() sema.acquire()
mutex.acquire() mutex.acquire()
running = running + 1 running += 1
if verbose: if test_support.verbose:
print running, 'tasks are running' print running, 'tasks are running'
mutex.release() mutex.release()
time.sleep(delay) time.sleep(delay)
if verbose: if test_support.verbose:
print 'task', self.getName(), 'done' print 'task', self.getName(), 'done'
mutex.acquire() mutex.acquire()
running = running - 1 running -= 1
if verbose: if test_support.verbose:
print self.getName(), 'is finished.', running, 'tasks are running' print self.getName(), 'is finished.', running, 'tasks are running'
mutex.release() mutex.release()
sema.release() sema.release()
def starttasks(): def setUp(self):
for i in range(numtasks): self.numtasks = 10
t = TestThread(name="<thread %d>"%i)
threads.append(t)
t.start()
def test_main():
# This takes about n/3 seconds to run (about n/3 clumps of tasks, times
# about 1 second per clump).
global numtasks
numtasks = 10
# no more than 3 of the 10 can run at once
global sema global sema
sema = _threading.BoundedSemaphore(value=3) sema = _threading.BoundedSemaphore(value=3)
global mutex global mutex
mutex = _threading.RLock() mutex = _threading.RLock()
global running global running
running = 0 running = 0
self.threads = []
global threads def test_tasks(self):
threads = [] for i in range(self.numtasks):
t = self.TestThread(name="<thread %d>"%i)
self.threads.append(t)
t.start()
starttasks() if test_support.verbose:
if verbose:
print 'waiting for all tasks to complete' print 'waiting for all tasks to complete'
for t in threads: for t in self.threads:
t.join() t.join()
if verbose: if test_support.verbose:
print 'all tasks done' print 'all tasks done'
def test_main():
test_support.run_unittest(DummyThreadingTestCase)
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()

View file

@ -75,6 +75,8 @@ Library
Tests Tests
----- -----
- GHOP 290: Convert test_dbm and test_dummy_threading to unittest.
- GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to unittest. - GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to unittest.
- Issue #2055: Convert test_fcntl to unittest. - Issue #2055: Convert test_fcntl to unittest.