| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  | import sys, os | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  | import pickle | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | import glob | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     # For Pythons w/distutils pybsddb | 
					
						
							|  |  |  |     from bsddb3 import db | 
					
						
							| 
									
										
										
										
											2007-01-10 16:19:56 +00:00
										 |  |  | except ImportError as e: | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |     # For Python 2.3 | 
					
						
							|  |  |  |     from bsddb import db | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class pickleTestCase(unittest.TestCase): | 
					
						
							|  |  |  |     """Verify that DBError can be pickled and unpickled""" | 
					
						
							|  |  |  |     db_home = 'db_home' | 
					
						
							|  |  |  |     db_name = 'test-dbobj.db' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         homeDir = os.path.join(os.path.dirname(sys.argv[0]), 'db_home') | 
					
						
							|  |  |  |         self.homeDir = homeDir | 
					
						
							|  |  |  |         try: os.mkdir(homeDir) | 
					
						
							|  |  |  |         except os.error: pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         if hasattr(self, 'db'): | 
					
						
							|  |  |  |             del self.db | 
					
						
							|  |  |  |         if hasattr(self, 'env'): | 
					
						
							|  |  |  |             del self.env | 
					
						
							|  |  |  |         files = glob.glob(os.path.join(self.homeDir, '*')) | 
					
						
							|  |  |  |         for file in files: | 
					
						
							|  |  |  |             os.remove(file) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _base_test_pickle_DBError(self, pickle): | 
					
						
							|  |  |  |         self.env = db.DBEnv() | 
					
						
							|  |  |  |         self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL) | 
					
						
							|  |  |  |         self.db = db.DB(self.env) | 
					
						
							|  |  |  |         self.db.open(self.db_name, db.DB_HASH, db.DB_CREATE) | 
					
						
							|  |  |  |         self.db.put('spam', 'eggs') | 
					
						
							|  |  |  |         assert self.db['spam'] == 'eggs' | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             self.db.put('spam', 'ham', flags=db.DB_NOOVERWRITE) | 
					
						
							| 
									
										
										
										
											2007-01-10 16:19:56 +00:00
										 |  |  |         except db.DBError as egg: | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |             pickledEgg = pickle.dumps(egg) | 
					
						
							|  |  |  |             #print repr(pickledEgg) | 
					
						
							|  |  |  |             rottenEgg = pickle.loads(pickledEgg) | 
					
						
							|  |  |  |             if rottenEgg.args != egg.args or type(rottenEgg) != type(egg): | 
					
						
							|  |  |  |                 raise Exception, (rottenEgg, '!=', egg) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             raise Exception, "where's my DBError exception?!?" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.db.close() | 
					
						
							|  |  |  |         self.env.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test01_pickle_DBError(self): | 
					
						
							|  |  |  |         self._base_test_pickle_DBError(pickle=pickle) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_suite(): | 
					
						
							|  |  |  |     return unittest.makeSuite(pickleTestCase) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main(defaultTest='test_suite') |