blob: 806125f70d7f0ab136ab58e8c6982ff7d229d09f [file] [log] [blame]
Roger E. Masse16f9fd21996-12-10 00:06:24 +00001#! /usr/bin/env python
2"""Test script for the dbm module
3 Roger E. Masse
4"""
Neal Norwitze7629c82002-11-02 18:25:08 +00005import os
6import random
Roger E. Masse16f9fd21996-12-10 00:06:24 +00007import dbm
8from dbm import error
Guido van Rossumf35ad332006-08-25 23:40:32 +00009from test.test_support import verbose, verify, TestSkipped, TESTFN
Roger E. Massefab8ab81996-12-20 22:36:52 +000010
Neal Norwitze7629c82002-11-02 18:25:08 +000011# make filename unique to allow multiple concurrent tests
12# and to minimize the likelihood of a problem from an old file
Guido van Rossumf35ad332006-08-25 23:40:32 +000013filename = TESTFN
Roger E. Masse16f9fd21996-12-10 00:06:24 +000014
Neal Norwitze7629c82002-11-02 18:25:08 +000015def cleanup():
16 for suffix in ['', '.pag', '.dir', '.db']:
17 try:
18 os.unlink(filename + suffix)
Guido van Rossumb940e112007-01-10 16:19:56 +000019 except OSError as e:
Brett Cannonba7bf492007-02-27 00:15:55 +000020 (errno, strerror) = e.errno, e.strerror
Neal Norwitze7629c82002-11-02 18:25:08 +000021 # if we can't delete the file because of permissions,
22 # nothing will work, so skip the test
23 if errno == 1:
Collin Winter3add4d72007-08-29 23:37:32 +000024 raise TestSkipped('unable to remove: ' + filename + suffix)
Fred Drake57a4e902000-09-18 17:56:58 +000025
Neal Norwitze7629c82002-11-02 18:25:08 +000026def test_keys():
27 d = dbm.open(filename, 'c')
28 verify(d.keys() == [])
Guido van Rossum956e3592007-08-14 15:42:45 +000029 d[b'a'] = b'b'
30 d[b'12345678910'] = b'019237410982340912840198242'
Neal Norwitze7629c82002-11-02 18:25:08 +000031 d.keys()
Guido van Rossum956e3592007-08-14 15:42:45 +000032 if b'a' in d:
Neal Norwitze7629c82002-11-02 18:25:08 +000033 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000034 print('Test dbm keys: ', d.keys())
Roger E. Masse16f9fd21996-12-10 00:06:24 +000035
Neal Norwitze7629c82002-11-02 18:25:08 +000036 d.close()
37
38def test_modes():
39 d = dbm.open(filename, 'r')
40 d.close()
41 d = dbm.open(filename, 'rw')
42 d.close()
43 d = dbm.open(filename, 'w')
44 d.close()
45 d = dbm.open(filename, 'n')
46 d.close()
47
48cleanup()
Roger E. Masse16f9fd21996-12-10 00:06:24 +000049try:
Neal Norwitze7629c82002-11-02 18:25:08 +000050 test_keys()
51 test_modes()
Roger E. Masse16f9fd21996-12-10 00:06:24 +000052except:
Neal Norwitze7629c82002-11-02 18:25:08 +000053 cleanup()
54 raise
55
56cleanup()