• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2import os
3import pickle
4import sys
5
6if sys.version_info[0] < 3 :
7    try:
8        import cPickle
9    except ImportError:
10        cPickle = None
11else :
12    cPickle = None
13
14import unittest
15
16from test_all import db, test_support, get_new_environment_path, get_new_database_path
17
18#----------------------------------------------------------------------
19
20class pickleTestCase(unittest.TestCase):
21    """Verify that DBError can be pickled and unpickled"""
22    db_name = 'test-dbobj.db'
23
24    def setUp(self):
25        self.homeDir = get_new_environment_path()
26
27    def tearDown(self):
28        if hasattr(self, 'db'):
29            del self.db
30        if hasattr(self, 'env'):
31            del self.env
32        test_support.rmtree(self.homeDir)
33
34    def _base_test_pickle_DBError(self, pickle):
35        self.env = db.DBEnv()
36        self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL)
37        self.db = db.DB(self.env)
38        self.db.open(self.db_name, db.DB_HASH, db.DB_CREATE)
39        self.db.put('spam', 'eggs')
40        self.assertEqual(self.db['spam'], 'eggs')
41        try:
42            self.db.put('spam', 'ham', flags=db.DB_NOOVERWRITE)
43        except db.DBError, egg:
44            pickledEgg = pickle.dumps(egg)
45            #print repr(pickledEgg)
46            rottenEgg = pickle.loads(pickledEgg)
47            if rottenEgg.args != egg.args or type(rottenEgg) != type(egg):
48                raise Exception, (rottenEgg, '!=', egg)
49        else:
50            raise Exception, "where's my DBError exception?!?"
51
52        self.db.close()
53        self.env.close()
54
55    def test01_pickle_DBError(self):
56        self._base_test_pickle_DBError(pickle=pickle)
57
58    if cPickle:
59        def test02_cPickle_DBError(self):
60            self._base_test_pickle_DBError(pickle=cPickle)
61
62#----------------------------------------------------------------------
63
64def test_suite():
65    return unittest.makeSuite(pickleTestCase)
66
67if __name__ == '__main__':
68    unittest.main(defaultTest='test_suite')
69