mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 10:26:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			174 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| TestCases for exercising a Queue DB.
 | |
| """
 | |
| 
 | |
| import sys, os, string
 | |
| import tempfile
 | |
| from pprint import pprint
 | |
| import unittest
 | |
| 
 | |
| try:
 | |
|     # For Pythons w/distutils pybsddb
 | |
|     from bsddb3 import db
 | |
| except ImportError:
 | |
|     # For Python 2.3
 | |
|     from bsddb import db
 | |
| 
 | |
| from bsddb.test.test_all import verbose
 | |
| 
 | |
| letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| class SimpleQueueTestCase(unittest.TestCase):
 | |
|     def setUp(self):
 | |
|         self.filename = tempfile.mktemp()
 | |
| 
 | |
|     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 letters:
 | |
|             d.append(x.encode('ascii') * 40)
 | |
| 
 | |
|         assert len(d) == 52
 | |
| 
 | |
|         d.put(100, b"some more data")
 | |
|         d.put(101, b"and some more ")
 | |
|         d.put(75,  b"out of order")
 | |
|         d.put(1,   b"replacement data")
 | |
| 
 | |
|         assert len(d) == 55
 | |
| 
 | |
|         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(b"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())
 | |
| 
 | |
|         assert len(d) == 0, \
 | |
|                "if you see this message then you need to rebuild " \
 | |
|                "BerkeleyDB 3.1.17 with the patch in patches/qam_stat.diff"
 | |
| 
 | |
|         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 letters:
 | |
|             d.append(x.encode('ascii') * 40)
 | |
| 
 | |
|         assert len(d) == 52
 | |
| 
 | |
|         d.put(100, b"some more data")
 | |
|         d.put(101, b"and some more ")
 | |
|         d.put(75,  b"out of order")
 | |
|         d.put(1,   b"replacement data")
 | |
| 
 | |
|         assert len(d) == 55
 | |
| 
 | |
|         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(b"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()
 | |
| 
 | |
| 
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| def test_suite():
 | |
|     return unittest.makeSuite(SimpleQueueTestCase)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     unittest.main(defaultTest='test_suite')
 | 
