Issue #6845: Add restart support for binary upload in ftplib. The
[python.git] / Lib / bsddb / test / test_join.py
blobd070bf21c4e46258a67c9c7477f2062bfdb2aafd
1 """TestCases for using the DB.join and DBCursor.join_item methods.
2 """
4 import os
6 import unittest
8 from test_all import db, dbshelve, test_support, verbose, \
9 get_new_environment_path, get_new_database_path
11 #----------------------------------------------------------------------
13 ProductIndex = [
14 ('apple', "Convenience Store"),
15 ('blueberry', "Farmer's Market"),
16 ('shotgun', "S-Mart"), # Aisle 12
17 ('pear', "Farmer's Market"),
18 ('chainsaw', "S-Mart"), # "Shop smart. Shop S-Mart!"
19 ('strawberry', "Farmer's Market"),
22 ColorIndex = [
23 ('blue', "blueberry"),
24 ('red', "apple"),
25 ('red', "chainsaw"),
26 ('red', "strawberry"),
27 ('yellow', "peach"),
28 ('yellow', "pear"),
29 ('black', "shotgun"),
32 class JoinTestCase(unittest.TestCase):
33 keytype = ''
35 def setUp(self):
36 self.filename = self.__class__.__name__ + '.db'
37 self.homeDir = get_new_environment_path()
38 self.env = db.DBEnv()
39 self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK )
41 def tearDown(self):
42 self.env.close()
43 test_support.rmtree(self.homeDir)
45 def test01_join(self):
46 if verbose:
47 print '\n', '-=' * 30
48 print "Running %s.test01_join..." % \
49 self.__class__.__name__
51 # create and populate primary index
52 priDB = db.DB(self.env)
53 priDB.open(self.filename, "primary", db.DB_BTREE, db.DB_CREATE)
54 map(lambda t, priDB=priDB: apply(priDB.put, t), ProductIndex)
56 # create and populate secondary index
57 secDB = db.DB(self.env)
58 secDB.set_flags(db.DB_DUP | db.DB_DUPSORT)
59 secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE)
60 map(lambda t, secDB=secDB: apply(secDB.put, t), ColorIndex)
62 sCursor = None
63 jCursor = None
64 try:
65 # lets look up all of the red Products
66 sCursor = secDB.cursor()
67 # Don't do the .set() in an assert, or you can get a bogus failure
68 # when running python -O
69 tmp = sCursor.set('red')
70 self.assert_(tmp)
72 # FIXME: jCursor doesn't properly hold a reference to its
73 # cursors, if they are closed before jcursor is used it
74 # can cause a crash.
75 jCursor = priDB.join([sCursor])
77 if jCursor.get(0) != ('apple', "Convenience Store"):
78 self.fail("join cursor positioned wrong")
79 if jCursor.join_item() != 'chainsaw':
80 self.fail("DBCursor.join_item returned wrong item")
81 if jCursor.get(0)[0] != 'strawberry':
82 self.fail("join cursor returned wrong thing")
83 if jCursor.get(0): # there were only three red items to return
84 self.fail("join cursor returned too many items")
85 finally:
86 if jCursor:
87 jCursor.close()
88 if sCursor:
89 sCursor.close()
90 priDB.close()
91 secDB.close()
94 def test_suite():
95 suite = unittest.TestSuite()
97 suite.addTest(unittest.makeSuite(JoinTestCase))
99 return suite