Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python |
| 2 | """Test script for the bsddb C module |
| 3 | Roger E. Masse |
| 4 | """ |
Guido van Rossum | 4ec2698 | 1999-03-24 19:03:01 +0000 | [diff] [blame] | 5 | import os |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 6 | import bsddb |
Guido van Rossum | a35e2ce | 2001-12-07 16:43:19 +0000 | [diff] [blame] | 7 | import dbhash # Just so we know it's imported |
Guido van Rossum | 3b0a329 | 2002-08-09 16:38:32 +0000 | [diff] [blame] | 8 | from test.test_support import verbose, verify, TESTFN |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 9 | |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 10 | def test(openmethod, what, ondisk=1): |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 11 | |
| 12 | if verbose: |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 13 | print '\nTesting: ', what, (ondisk and "on disk" or "in memory") |
Fred Drake | 004d5e6 | 2000-10-23 17:22:08 +0000 | [diff] [blame] | 14 | |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 15 | if ondisk: |
Guido van Rossum | 3b0a329 | 2002-08-09 16:38:32 +0000 | [diff] [blame] | 16 | fname = TESTFN |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 17 | else: |
| 18 | fname = None |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 19 | f = openmethod(fname, 'c') |
Guido van Rossum | f6e47ad | 2001-03-22 00:40:23 +0000 | [diff] [blame] | 20 | verify(f.keys() == []) |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 21 | if verbose: |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 22 | print 'creation...' |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 23 | 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 Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 30 | print '%s %s %s' % (f['a'], f['b'], f['c']) |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 31 | |
| 32 | if what == 'BTree' : |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 33 | 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 Drake | 132dce2 | 2000-12-12 23:11:42 +0000 | [diff] [blame] | 40 | if rec != f.last(): |
| 41 | print 'Error, last != last!' |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 42 | f.previous() |
| 43 | break |
| 44 | if verbose: |
| 45 | print rec |
| 46 | if not f.has_key('a'): |
| 47 | print 'Error, missing key!' |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 48 | |
| 49 | f.sync() |
| 50 | f.close() |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 51 | if ondisk: |
| 52 | # if we're using an in-memory only db, we can't reopen it |
| 53 | # so finish here. |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 54 | if verbose: |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 55 | print 'modification...' |
| 56 | f = openmethod(fname, 'w') |
| 57 | f['d'] = 'discovered' |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 58 | |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 59 | 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. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 71 | |
| 72 | types = [(bsddb.btopen, 'BTree'), |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 73 | (bsddb.hashopen, 'Hash Table'), |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 74 | (bsddb.btopen, 'BTree', 0), |
| 75 | (bsddb.hashopen, 'Hash Table', 0), |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 76 | # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85 |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 77 | # appears broken... at least on |
Guido van Rossum | 41360a4 | 1998-03-26 19:42:58 +0000 | [diff] [blame] | 78 | # Solaris Intel - rmasse 1/97 |
| 79 | ] |
Roger E. Masse | 352e186 | 1997-01-16 22:04:10 +0000 | [diff] [blame] | 80 | |
| 81 | for type in types: |
Anthony Baxter | 8388895 | 2002-04-23 02:11:05 +0000 | [diff] [blame] | 82 | test(*type) |