mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 7767711f54
			
		
	
	
		7767711f54
		
	
	
	
	
		
			
			svn+ssh://pythondev@svn.python.org/python/trunk ........ r58822 | brett.cannon | 2007-11-02 23:47:02 -0700 (Fri, 02 Nov 2007) | 2 lines Add a missing quotation mark. ........ r58840 | skip.montanaro | 2007-11-04 07:56:52 -0800 (Sun, 04 Nov 2007) | 2 lines Note change to get_dialect semantics in 2.5. Will backport to 2.5. ........ r58844 | georg.brandl | 2007-11-04 09:43:49 -0800 (Sun, 04 Nov 2007) | 2 lines Fix syntax for versionchanged markup. ........ r58850 | gregory.p.smith | 2007-11-04 18:32:26 -0800 (Sun, 04 Nov 2007) | 9 lines Fixes bug 477182 on pybsddb.sf.net. DB objects now load the flags and pay attention to them when opening an existing database. This means that d[] behaves properly even on databases previously created with DB_DUP or DB_DUPSORT flags to allow duplicate keys. http://sourceforge.net/tracker/index.php?func=detail&aid=477182&group_id=13900&atid=113900 Do not backport, this bugfix could be considered an API change. ........ r58851 | gregory.p.smith | 2007-11-04 18:56:31 -0800 (Sun, 04 Nov 2007) | 3 lines Add the bsddb.db.DBEnv.lock_id_free method. Improve test_lock's tempdir creation and cleanup. ........ r58852 | gregory.p.smith | 2007-11-05 01:06:28 -0800 (Mon, 05 Nov 2007) | 3 lines * db->get_types is only available in BerkeleyDB >= 4.2 * get compiling with older versions of python again for a stand alone release. ........ r58853 | gregory.p.smith | 2007-11-05 01:07:40 -0800 (Mon, 05 Nov 2007) | 2 lines * db->get_flags is only available in BerkeleyDB >= 4.2 ........ r58854 | mark.summerfield | 2007-11-05 01:22:48 -0800 (Mon, 05 Nov 2007) | 3 lines Added cross-references between the various archive file formats. ........ r58857 | mark.summerfield | 2007-11-05 06:38:50 -0800 (Mon, 05 Nov 2007) | 5 lines Clarified the fact that you can have comments for individual archive members even though comments to the archive itself aren't currently supported. ........
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Miscellaneous bsddb module test cases
 | |
| """
 | |
| 
 | |
| import os
 | |
| import shutil
 | |
| import sys
 | |
| import unittest
 | |
| import tempfile
 | |
| 
 | |
| try:
 | |
|     # For Pythons w/distutils pybsddb
 | |
|     from bsddb3 import db, dbshelve, hashopen
 | |
| except ImportError:
 | |
|     # For the bundled bsddb
 | |
|     from bsddb import db, dbshelve, hashopen
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| class MiscTestCase(unittest.TestCase):
 | |
|     def setUp(self):
 | |
|         self.filename = self.__class__.__name__ + '.db'
 | |
|         self.homeDir = tempfile.mkdtemp()
 | |
| 
 | |
|     def tearDown(self):
 | |
|         try:
 | |
|             os.remove(self.filename)
 | |
|         except OSError:
 | |
|             pass
 | |
|         shutil.rmtree(self.homeDir)
 | |
| 
 | |
|     def test01_badpointer(self):
 | |
|         dbs = dbshelve.open(self.filename)
 | |
|         dbs.close()
 | |
|         self.assertRaises(db.DBError, dbs.get, b"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
 | |
| 
 | |
|     def test03_repr_closed_db(self):
 | |
|         db = hashopen(self.filename)
 | |
|         db.close()
 | |
|         rp = repr(db)
 | |
|         self.assertEquals(rp, "{}")
 | |
| 
 | |
|     # 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(b"/foo", db.DB_SET)
 | |
|             # double free happened during exit from DBC_get
 | |
|         finally:
 | |
|             db1.close()
 | |
|             os.unlink(self.filename)
 | |
| 
 | |
|     def test05_key_with_null_bytes(self):
 | |
|         try:
 | |
|             db1 = db.DB()
 | |
|             db1.open(self.filename, None, db.DB_HASH, db.DB_CREATE)
 | |
|             db1[b'a'] = b'eh?'
 | |
|             db1[b'a\x00'] = b'eh zed.'
 | |
|             db1[b'a\x00a'] = b'eh zed eh?'
 | |
|             db1[b'aaa'] = b'eh eh eh!'
 | |
|             keys = db1.keys()
 | |
|             keys.sort()
 | |
|             self.assertEqual([b'a', b'a\x00', b'a\x00a', b'aaa'], keys)
 | |
|             self.assertEqual(db1[b'a'], b'eh?')
 | |
|             self.assertEqual(db1[b'a\x00'], b'eh zed.')
 | |
|             self.assertEqual(db1[b'a\x00a'], b'eh zed eh?')
 | |
|             self.assertEqual(db1[b'aaa'], b'eh eh eh!')
 | |
|         finally:
 | |
|             db1.close()
 | |
|             os.unlink(self.filename)
 | |
| 
 | |
|     def test_DB_set_flags_persists(self):
 | |
|         if db.version() < (4,2):
 | |
|             # The get_flags API required for this to work is only available
 | |
|             # in BerkeleyDB >= 4.2
 | |
|             return
 | |
|         try:
 | |
|             db1 = db.DB()
 | |
|             db1.set_flags(db.DB_DUPSORT)
 | |
|             db1.open(self.filename, db.DB_HASH, db.DB_CREATE)
 | |
|             db1[b'a'] = b'eh'
 | |
|             db1[b'a'] = b'A'
 | |
|             self.assertEqual([(b'a', b'A')], db1.items())
 | |
|             db1.put(b'a', b'Aa')
 | |
|             self.assertEqual([(b'a', b'A'), (b'a', b'Aa')], db1.items())
 | |
|             db1.close()
 | |
|             db1 = db.DB()
 | |
|             # no set_flags call, we're testing that it reads and obeys
 | |
|             # the flags on open.
 | |
|             db1.open(self.filename, db.DB_HASH)
 | |
|             self.assertEqual([(b'a', b'A'), (b'a', b'Aa')], db1.items())
 | |
|             # if it read the flags right this will replace all values
 | |
|             # for key b'a' instead of adding a new one.  (as a dict should)
 | |
|             db1[b'a'] = b'new A'
 | |
|             self.assertEqual([(b'a', b'new A')], db1.items())
 | |
|         finally:
 | |
|             db1.close()
 | |
|             os.unlink(self.filename)
 | |
| 
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| def test_suite():
 | |
|     return unittest.makeSuite(MiscTestCase)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     unittest.main(defaultTest='test_suite')
 |