blob: aa58ef8ef7f6af0afd389d30a99095082011c8c4 [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
Guido van Rossum3b0a3292002-08-09 16:38:32 +00008from test.test_support import verbose, verify, TESTFN
Roger E. Masse352e1861997-01-16 22:04:10 +00009
Anthony Baxter83888952002-04-23 02:11:05 +000010def test(openmethod, what, ondisk=1):
Roger E. Masse352e1861997-01-16 22:04:10 +000011
12 if verbose:
Anthony Baxter83888952002-04-23 02:11:05 +000013 print '\nTesting: ', what, (ondisk and "on disk" or "in memory")
Fred Drake004d5e62000-10-23 17:22:08 +000014
Anthony Baxter83888952002-04-23 02:11:05 +000015 if ondisk:
Guido van Rossum3b0a3292002-08-09 16:38:32 +000016 fname = TESTFN
Anthony Baxter83888952002-04-23 02:11:05 +000017 else:
18 fname = None
Roger E. Masse352e1861997-01-16 22:04:10 +000019 f = openmethod(fname, 'c')
Guido van Rossumf6e47ad2001-03-22 00:40:23 +000020 verify(f.keys() == [])
Roger E. Masse352e1861997-01-16 22:04:10 +000021 if verbose:
Guido van Rossum41360a41998-03-26 19:42:58 +000022 print 'creation...'
Roger E. Masse352e1861997-01-16 22:04:10 +000023 f['0'] = ''
24 f['a'] = 'Guido'
25 f['b'] = 'van'
26 f['c'] = 'Rossum'
27 f['d'] = 'invented'
28 f['f'] = 'Python'
29 if verbose:
Guido van Rossum41360a41998-03-26 19:42:58 +000030 print '%s %s %s' % (f['a'], f['b'], f['c'])
Roger E. Masse352e1861997-01-16 22:04:10 +000031
32 if what == 'BTree' :
Guido van Rossum41360a41998-03-26 19:42:58 +000033 if verbose:
34 print 'key ordering...'
35 f.set_location(f.first()[0])
36 while 1:
37 try:
38 rec = f.next()
39 except KeyError:
Fred Drake132dce22000-12-12 23:11:42 +000040 if rec != f.last():
41 print 'Error, last != last!'
Guido van Rossum41360a41998-03-26 19:42:58 +000042 f.previous()
43 break
44 if verbose:
45 print rec
46 if not f.has_key('a'):
47 print 'Error, missing key!'
Roger E. Masse352e1861997-01-16 22:04:10 +000048
49 f.sync()
50 f.close()
Anthony Baxter83888952002-04-23 02:11:05 +000051 if ondisk:
52 # if we're using an in-memory only db, we can't reopen it
53 # so finish here.
Guido van Rossum41360a41998-03-26 19:42:58 +000054 if verbose:
Anthony Baxter83888952002-04-23 02:11:05 +000055 print 'modification...'
56 f = openmethod(fname, 'w')
57 f['d'] = 'discovered'
Roger E. Masse352e1861997-01-16 22:04:10 +000058
Anthony Baxter83888952002-04-23 02:11:05 +000059 if verbose:
60 print 'access...'
61 for key in f.keys():
62 word = f[key]
63 if verbose:
64 print word
65
66 f.close()
67 try:
68 os.remove(fname)
69 except os.error:
70 pass
Roger E. Masse352e1861997-01-16 22:04:10 +000071
72types = [(bsddb.btopen, 'BTree'),
Guido van Rossum41360a41998-03-26 19:42:58 +000073 (bsddb.hashopen, 'Hash Table'),
Anthony Baxter83888952002-04-23 02:11:05 +000074 (bsddb.btopen, 'BTree', 0),
75 (bsddb.hashopen, 'Hash Table', 0),
Guido van Rossum41360a41998-03-26 19:42:58 +000076 # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85
Roger E. Masse352e1861997-01-16 22:04:10 +000077 # appears broken... at least on
Guido van Rossum41360a41998-03-26 19:42:58 +000078 # Solaris Intel - rmasse 1/97
79 ]
Roger E. Masse352e1861997-01-16 22:04:10 +000080
81for type in types:
Anthony Baxter83888952002-04-23 02:11:05 +000082 test(*type)