| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  | """Miscellaneous bsddb module test cases
 | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2007-01-05 15:51:24 +00:00
										 |  |  | import tempfile | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-28 17:20:44 +00:00
										 |  |  | try: | 
					
						
							| 
									
										
										
										
											2003-09-21 00:08:14 +00:00
										 |  |  |     # For Pythons w/distutils pybsddb | 
					
						
							| 
									
										
										
										
											2006-02-19 01:21:11 +00:00
										 |  |  |     from bsddb3 import db, dbshelve, hashopen | 
					
						
							| 
									
										
										
										
											2003-09-21 00:08:14 +00:00
										 |  |  | except ImportError: | 
					
						
							| 
									
										
										
										
											2003-01-28 17:20:44 +00:00
										 |  |  |     # For Python 2.3 | 
					
						
							| 
									
										
										
										
											2006-02-19 01:21:11 +00:00
										 |  |  |     from bsddb import db, dbshelve, hashopen | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MiscTestCase(unittest.TestCase): | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.filename = self.__class__.__name__ + '.db' | 
					
						
							| 
									
										
										
										
											2007-01-05 15:51:24 +00:00
										 |  |  |         homeDir = os.path.join(tempfile.gettempdir(), 'db_home') | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  |         self.homeDir = homeDir | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             os.mkdir(homeDir) | 
					
						
							|  |  |  |         except OSError: | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             os.remove(self.filename) | 
					
						
							|  |  |  |         except OSError: | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  |         import glob | 
					
						
							|  |  |  |         files = glob.glob(os.path.join(self.homeDir, '*')) | 
					
						
							|  |  |  |         for file in files: | 
					
						
							|  |  |  |             os.remove(file) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test01_badpointer(self): | 
					
						
							|  |  |  |         dbs = dbshelve.open(self.filename) | 
					
						
							|  |  |  |         dbs.close() | 
					
						
							|  |  |  |         self.assertRaises(db.DBError, dbs.get, "foo") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test02_db_home(self): | 
					
						
							|  |  |  |         env = db.DBEnv() | 
					
						
							|  |  |  |         # check for crash fixed when db_home is used before open() | 
					
						
							|  |  |  |         assert env.db_home is None | 
					
						
							|  |  |  |         env.open(self.homeDir, db.DB_CREATE) | 
					
						
							|  |  |  |         assert self.homeDir == env.db_home | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-02-19 01:21:11 +00:00
										 |  |  |     def test03_repr_closed_db(self): | 
					
						
							|  |  |  |         db = hashopen(self.filename) | 
					
						
							|  |  |  |         db.close() | 
					
						
							|  |  |  |         rp = repr(db) | 
					
						
							|  |  |  |         self.assertEquals(rp, "{}") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-09 06:50:43 +00:00
										 |  |  |     # http://sourceforge.net/tracker/index.php?func=detail&aid=1708868&group_id=13900&atid=313900 | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # See the bug report for details. | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # The problem was that make_key_dbt() was not allocating a copy of | 
					
						
							|  |  |  |     # string keys but FREE_DBT() was always being told to free it when the | 
					
						
							|  |  |  |     # database was opened with DB_THREAD. | 
					
						
							|  |  |  |     def test04_double_free_make_key_dbt(self): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             db1 = db.DB() | 
					
						
							|  |  |  |             db1.open(self.filename, None, db.DB_BTREE, | 
					
						
							|  |  |  |                      db.DB_CREATE | db.DB_THREAD) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             curs = db1.cursor() | 
					
						
							|  |  |  |             t = curs.get("/foo", db.DB_SET) | 
					
						
							|  |  |  |             # double free happened during exit from DBC_get | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             db1.close() | 
					
						
							|  |  |  |             os.unlink(self.filename) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | #---------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  | def test_suite(): | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  |     return unittest.makeSuite(MiscTestCase) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  |     unittest.main(defaultTest='test_suite') |