| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | TestCases for exercising a Queue DB. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-23 17:40:11 +00:00
										 |  |  | import os, string | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | from pprint import pprint | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-28 17:20:44 +00:00
										 |  |  | try: | 
					
						
							| 
									
										
										
										
											2003-09-21 00:08:14 +00:00
										 |  |  |     # For Pythons w/distutils pybsddb | 
					
						
							|  |  |  |     from bsddb3 import db | 
					
						
							|  |  |  | except ImportError: | 
					
						
							| 
									
										
										
										
											2003-01-28 17:20:44 +00:00
										 |  |  |     # For Python 2.3 | 
					
						
							|  |  |  |     from bsddb import db | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  | from test_all import verbose, get_new_database_path | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SimpleQueueTestCase(unittest.TestCase): | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |         self.filename = get_new_database_path() | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.remove(self.filename) | 
					
						
							|  |  |  |         except os.error: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test01_basic(self): | 
					
						
							|  |  |  |         # Basic Queue tests using the deprecated DBCursor.consume method. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print '\n', '-=' * 30 | 
					
						
							|  |  |  |             print "Running %s.test01_basic..." % self.__class__.__name__ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d = db.DB() | 
					
						
							|  |  |  |         d.set_re_len(40)  # Queues must be fixed length | 
					
						
							|  |  |  |         d.open(self.filename, db.DB_QUEUE, db.DB_CREATE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "before appends" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for x in string.letters: | 
					
						
							|  |  |  |             d.append(x * 40) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |         self.assertEqual(len(d), 52) | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         d.put(100, "some more data") | 
					
						
							|  |  |  |         d.put(101, "and some more ") | 
					
						
							|  |  |  |         d.put(75,  "out of order") | 
					
						
							|  |  |  |         d.put(1,   "replacement data") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |         self.assertEqual(len(d), 55) | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "before close" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d.close() | 
					
						
							|  |  |  |         del d | 
					
						
							|  |  |  |         d = db.DB() | 
					
						
							|  |  |  |         d.open(self.filename) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "after open" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d.append("one more") | 
					
						
							|  |  |  |         c = d.cursor() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "after append" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         rec = c.consume() | 
					
						
							|  |  |  |         while rec: | 
					
						
							|  |  |  |             if verbose: | 
					
						
							|  |  |  |                 print rec | 
					
						
							|  |  |  |             rec = c.consume() | 
					
						
							|  |  |  |         c.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "after consume loop" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |         self.assertEqual(len(d), 0, \ | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  |                "if you see this message then you need to rebuild " \ | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |                "Berkeley DB 3.1.17 with the patch in patches/qam_stat.diff") | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         d.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test02_basicPost32(self): | 
					
						
							|  |  |  |         # Basic Queue tests using the new DB.consume method in DB 3.2+ | 
					
						
							|  |  |  |         # (No cursor needed) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print '\n', '-=' * 30 | 
					
						
							|  |  |  |             print "Running %s.test02_basicPost32..." % self.__class__.__name__ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if db.version() < (3, 2, 0): | 
					
						
							|  |  |  |             if verbose: | 
					
						
							|  |  |  |                 print "Test not run, DB not new enough..." | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d = db.DB() | 
					
						
							|  |  |  |         d.set_re_len(40)  # Queues must be fixed length | 
					
						
							|  |  |  |         d.open(self.filename, db.DB_QUEUE, db.DB_CREATE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "before appends" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for x in string.letters: | 
					
						
							|  |  |  |             d.append(x * 40) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |         self.assertEqual(len(d), 52) | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         d.put(100, "some more data") | 
					
						
							|  |  |  |         d.put(101, "and some more ") | 
					
						
							|  |  |  |         d.put(75,  "out of order") | 
					
						
							|  |  |  |         d.put(1,   "replacement data") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 20:57:59 +00:00
										 |  |  |         self.assertEqual(len(d), 55) | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "before close" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d.close() | 
					
						
							|  |  |  |         del d | 
					
						
							|  |  |  |         d = db.DB() | 
					
						
							|  |  |  |         d.open(self.filename) | 
					
						
							|  |  |  |         #d.set_get_returns_none(true) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "after open" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d.append("one more") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "after append" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         rec = d.consume() | 
					
						
							|  |  |  |         while rec: | 
					
						
							|  |  |  |             if verbose: | 
					
						
							|  |  |  |                 print rec | 
					
						
							|  |  |  |             rec = d.consume() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if verbose: | 
					
						
							|  |  |  |             print "after consume loop" + '-' * 30 | 
					
						
							|  |  |  |             pprint(d.stat()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         d.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  | def test_suite(): | 
					
						
							| 
									
										
										
										
											2002-11-19 17:47:07 +00:00
										 |  |  |     return unittest.makeSuite(SimpleQueueTestCase) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							| 
									
										
										
										
											2002-12-30 20:53:52 +00:00
										 |  |  |     unittest.main(defaultTest='test_suite') |