blob: f68acaeb3e65bf36bc405f9cfe060cee19736f17 [file] [log] [blame]
Roger E. Masse352e1861997-01-16 22:04:10 +00001#! /usr/bin/env python
2"""Test script for the bsddb C module
3 Roger E. Masse
4"""
Guido van Rossum4ec26981999-03-24 19:03:01 +00005import os
Roger E. Masse352e1861997-01-16 22:04:10 +00006import bsddb
Guido van Rossuma35e2ce2001-12-07 16:43:19 +00007import dbhash # Just so we know it's imported
Roger E. Masse352e1861997-01-16 22:04:10 +00008import tempfile
Guido van Rossumf6e47ad2001-03-22 00:40:23 +00009from test_support import verbose, verify
Roger E. Masse352e1861997-01-16 22:04:10 +000010
Anthony Baxter83888952002-04-23 02:11:05 +000011def test(openmethod, what, ondisk=1):
Roger E. Masse352e1861997-01-16 22:04:10 +000012
13 if verbose:
Anthony Baxter83888952002-04-23 02:11:05 +000014 print '\nTesting: ', what, (ondisk and "on disk" or "in memory")
Fred Drake004d5e62000-10-23 17:22:08 +000015
Anthony Baxter83888952002-04-23 02:11:05 +000016 if ondisk:
17 fname = tempfile.mktemp()
18 else:
19 fname = None
Roger E. Masse352e1861997-01-16 22:04:10 +000020 f = openmethod(fname, 'c')
Guido van Rossumf6e47ad2001-03-22 00:40:23 +000021 verify(f.keys() == [])
Roger E. Masse352e1861997-01-16 22:04:10 +000022 if verbose:
Guido van Rossum41360a41998-03-26 19:42:58 +000023 print 'creation...'
Roger E. Masse352e1861997-01-16 22:04:10 +000024 f['0'] = ''
25 f['a'] = 'Guido'
26 f['b'] = 'van'
27 f['c'] = 'Rossum'
28 f['d'] = 'invented'
29 f['f'] = 'Python'
30 if verbose:
Guido van Rossum41360a41998-03-26 19:42:58 +000031 print '%s %s %s' % (f['a'], f['b'], f['c'])
Roger E. Masse352e1861997-01-16 22:04:10 +000032
33 if what == 'BTree' :
Guido van Rossum41360a41998-03-26 19:42:58 +000034 if verbose:
35 print 'key ordering...'
36 f.set_location(f.first()[0])
37 while 1:
38 try:
39 rec = f.next()
40 except KeyError:
Fred Drake132dce22000-12-12 23:11:42 +000041 if rec != f.last():
42 print 'Error, last != last!'
Guido van Rossum41360a41998-03-26 19:42:58 +000043 f.previous()
44 break
45 if verbose:
46 print rec
47 if not f.has_key('a'):
48 print 'Error, missing key!'
Roger E. Masse352e1861997-01-16 22:04:10 +000049
50 f.sync()
51 f.close()
Anthony Baxter83888952002-04-23 02:11:05 +000052 if ondisk:
53 # if we're using an in-memory only db, we can't reopen it
54 # so finish here.
Guido van Rossum41360a41998-03-26 19:42:58 +000055 if verbose:
Anthony Baxter83888952002-04-23 02:11:05 +000056 print 'modification...'
57 f = openmethod(fname, 'w')
58 f['d'] = 'discovered'
Roger E. Masse352e1861997-01-16 22:04:10 +000059
Anthony Baxter83888952002-04-23 02:11:05 +000060 if verbose:
61 print 'access...'
62 for key in f.keys():
63 word = f[key]
64 if verbose:
65 print word
66
67 f.close()
68 try:
69 os.remove(fname)
70 except os.error:
71 pass
Roger E. Masse352e1861997-01-16 22:04:10 +000072
73types = [(bsddb.btopen, 'BTree'),
Guido van Rossum41360a41998-03-26 19:42:58 +000074 (bsddb.hashopen, 'Hash Table'),
Anthony Baxter83888952002-04-23 02:11:05 +000075 (bsddb.btopen, 'BTree', 0),
76 (bsddb.hashopen, 'Hash Table', 0),
Guido van Rossum41360a41998-03-26 19:42:58 +000077 # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85
Roger E. Masse352e1861997-01-16 22:04:10 +000078 # appears broken... at least on
Guido van Rossum41360a41998-03-26 19:42:58 +000079 # Solaris Intel - rmasse 1/97
80 ]
Roger E. Masse352e1861997-01-16 22:04:10 +000081
82for type in types:
Anthony Baxter83888952002-04-23 02:11:05 +000083 test(*type)