Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / src / nas,5.n2.os.2 / lib / python / lib / python2.4 / bsddb / test / test_join.py
CommitLineData
86530b38
AT
1"""TestCases for using the DB.join and DBCursor.join_item methods.
2"""
3
4import sys, os, string
5import tempfile
6import time
7from pprint import pprint
8
9try:
10 from threading import Thread, currentThread
11 have_threads = 1
12except ImportError:
13 have_threads = 0
14
15import unittest
16from test_all import verbose
17
18try:
19 # For Pythons w/distutils pybsddb
20 from bsddb3 import db, dbshelve
21except ImportError:
22 # For Python 2.3
23 from bsddb import db, dbshelve
24
25
26#----------------------------------------------------------------------
27
28ProductIndex = [
29 ('apple', "Convenience Store"),
30 ('blueberry', "Farmer's Market"),
31 ('shotgun', "S-Mart"), # Aisle 12
32 ('pear', "Farmer's Market"),
33 ('chainsaw', "S-Mart"), # "Shop smart. Shop S-Mart!"
34 ('strawberry', "Farmer's Market"),
35]
36
37ColorIndex = [
38 ('blue', "blueberry"),
39 ('red', "apple"),
40 ('red', "chainsaw"),
41 ('red', "strawberry"),
42 ('yellow', "peach"),
43 ('yellow', "pear"),
44 ('black', "shotgun"),
45]
46
47class JoinTestCase(unittest.TestCase):
48 keytype = ''
49
50 def setUp(self):
51 self.filename = self.__class__.__name__ + '.db'
52 homeDir = os.path.join(os.path.dirname(sys.argv[0]), 'db_home')
53 self.homeDir = homeDir
54 try: os.mkdir(homeDir)
55 except os.error: pass
56 self.env = db.DBEnv()
57 self.env.open(homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK )
58
59 def tearDown(self):
60 self.env.close()
61 import glob
62 files = glob.glob(os.path.join(self.homeDir, '*'))
63 for file in files:
64 os.remove(file)
65
66 def test01_join(self):
67 if verbose:
68 print '\n', '-=' * 30
69 print "Running %s.test01_join..." % \
70 self.__class__.__name__
71
72 # create and populate primary index
73 priDB = db.DB(self.env)
74 priDB.open(self.filename, "primary", db.DB_BTREE, db.DB_CREATE)
75 map(lambda t, priDB=priDB: apply(priDB.put, t), ProductIndex)
76
77 # create and populate secondary index
78 secDB = db.DB(self.env)
79 secDB.set_flags(db.DB_DUP | db.DB_DUPSORT)
80 secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE)
81 map(lambda t, secDB=secDB: apply(secDB.put, t), ColorIndex)
82
83 sCursor = None
84 jCursor = None
85 try:
86 # lets look up all of the red Products
87 sCursor = secDB.cursor()
88 # Don't do the .set() in an assert, or you can get a bogus failure
89 # when running python -O
90 tmp = sCursor.set('red')
91 assert tmp
92
93 # FIXME: jCursor doesn't properly hold a reference to its
94 # cursors, if they are closed before jcursor is used it
95 # can cause a crash.
96 jCursor = priDB.join([sCursor])
97
98 if jCursor.get(0) != ('apple', "Convenience Store"):
99 self.fail("join cursor positioned wrong")
100 if jCursor.join_item() != 'chainsaw':
101 self.fail("DBCursor.join_item returned wrong item")
102 if jCursor.get(0)[0] != 'strawberry':
103 self.fail("join cursor returned wrong thing")
104 if jCursor.get(0): # there were only three red items to return
105 self.fail("join cursor returned too many items")
106 finally:
107 if jCursor:
108 jCursor.close()
109 if sCursor:
110 sCursor.close()
111 priDB.close()
112 secDB.close()
113
114
115def test_suite():
116 suite = unittest.TestSuite()
117
118 suite.addTest(unittest.makeSuite(JoinTestCase))
119
120 return suite