summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_dbm.py
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2002-11-02 18:25:08 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2002-11-02 18:25:08 (GMT)
commite7629c85bcfd8ba023ce89f506f393fc41d5f6bf (patch)
tree506655b1636a0da1d1546de5a77171d2faadb744 /Lib/test/test_dbm.py
parent94a83fdc157a8d393bcee3321ccdb5a818a2bf78 (diff)
downloadcpython-e7629c85bcfd8ba023ce89f506f393fc41d5f6bf.zip
cpython-e7629c85bcfd8ba023ce89f506f393fc41d5f6bf.tar.gz
cpython-e7629c85bcfd8ba023ce89f506f393fc41d5f6bf.tar.bz2
Skip test_dbm if we can't write to the file
Cleanup (remove) the file(s) after we are done with the test. (Fixes problem on snake farm)
Diffstat (limited to 'Lib/test/test_dbm.py')
-rwxr-xr-xLib/test/test_dbm.py74
1 files changed, 43 insertions, 31 deletions
diff --git a/Lib/test/test_dbm.py b/Lib/test/test_dbm.py
index 3c6ddd6..e5757c9 100755
--- a/Lib/test/test_dbm.py
+++ b/Lib/test/test_dbm.py
@@ -2,42 +2,54 @@
"""Test script for the dbm module
Roger E. Masse
"""
+import os
+import random
import dbm
from dbm import error
-from test.test_support import verbose, verify
+from test.test_support import verbose, verify, TestSkipped
-filename = '/tmp/delete_me'
+# make filename unique to allow multiple concurrent tests
+# and to minimize the likelihood of a problem from an old file
+filename = '/tmp/delete_me_' + str(random.random())[-6:]
-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()
+def cleanup():
+ for suffix in ['', '.pag', '.dir', '.db']:
+ try:
+ os.unlink(filename + suffix)
+ except OSError, (errno, strerror):
+ # if we can't delete the file because of permissions,
+ # nothing will work, so skip the test
+ if errno == 1:
+ raise TestSkipped, 'unable to remove: ' + filename + suffix
-d.close()
-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_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()
+
+cleanup()
try:
- import os
- if dbm.library == "ndbm":
- # classic dbm
- os.unlink(filename + '.dir')
- os.unlink(filename + '.pag')
- elif dbm.library == "BSD db":
- # BSD DB's compatibility layer
- os.unlink(filename + '.db')
- else:
- # GNU gdbm compatibility layer
- os.unlink(filename)
+ test_keys()
+ test_modes()
except:
- pass
+ cleanup()
+ raise
+
+cleanup()