10a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest
20a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport os, glob
30a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
40a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom test_all import db, test_support, get_new_environment_path, \
50a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        get_new_database_path
60a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao#----------------------------------------------------------------------
80a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
90a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass DB(unittest.TestCase):
100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def setUp(self):
110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.path = get_new_database_path()
120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db = db.DB()
130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def tearDown(self):
150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.close()
160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        del self.db
170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        test_support.unlink(self.path)
180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
190a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass DB_general(DB) :
200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_get_open_flags(self) :
210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE)
220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(db.DB_CREATE, self.db.get_open_flags())
230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_get_open_flags2(self) :
250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE |
260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                db.DB_THREAD)
270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(db.DB_CREATE | db.DB_THREAD, self.db.get_open_flags())
280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_get_dbname_filename(self) :
300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE)
310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual((self.path, None), self.db.get_dbname())
320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_get_dbname_filename_database(self) :
340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        name = "jcea-random-name"
350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.open(self.path, dbname=name, dbtype=db.DB_HASH,
360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                flags = db.DB_CREATE)
370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual((self.path, name), self.db.get_dbname())
380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        def test_bt_minkey(self) :
400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            for i in [17, 108, 1030] :
410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.db.set_bt_minkey(i)
420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(i, self.db.get_bt_minkey())
430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        def test_lorder(self) :
450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_lorder(1234)
460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(1234, self.db.get_lorder())
470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_lorder(4321)
480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(4321, self.db.get_lorder())
490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertRaises(db.DBInvalidArgError, self.db.set_lorder, 9182)
500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    if db.version() >= (4, 6) :
520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        def test_priority(self) :
530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            flags = [db.DB_PRIORITY_VERY_LOW, db.DB_PRIORITY_LOW,
540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                    db.DB_PRIORITY_DEFAULT, db.DB_PRIORITY_HIGH,
550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                    db.DB_PRIORITY_VERY_HIGH]
560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            for flag in flags :
570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.db.set_priority(flag)
580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                self.assertEqual(flag, self.db.get_priority())
590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_get_transactional(self) :
610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertFalse(self.db.get_transactional())
620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.open(self.path, dbtype=db.DB_HASH, flags = db.DB_CREATE)
630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertFalse(self.db.get_transactional())
640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
650a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass DB_hash(DB) :
660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_h_ffactor(self) :
670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for ffactor in [4, 16, 256] :
680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_h_ffactor(ffactor)
690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(ffactor, self.db.get_h_ffactor())
700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_h_nelem(self) :
720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for nelem in [1, 2, 4] :
730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            nelem = nelem*1024*1024  # Millions
740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_h_nelem(nelem)
750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(nelem, self.db.get_h_nelem())
760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_pagesize(self) :
780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in xrange(9, 17) :  # From 512 to 65536
790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            i = 1<<i
800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_pagesize(i)
810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(i, self.db.get_pagesize())
820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # The valid values goes from 512 to 65536
840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # Test 131072 bytes...
850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(db.DBInvalidArgError, self.db.set_pagesize, 1<<17)
860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # Test 256 bytes...
870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(db.DBInvalidArgError, self.db.set_pagesize, 1<<8)
880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
890a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass DB_txn(DB) :
900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def setUp(self) :
910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.homeDir = get_new_environment_path()
920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.env = db.DBEnv()
930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL |
940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                db.DB_INIT_LOG | db.DB_INIT_TXN)
950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db = db.DB(self.env)
960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def tearDown(self) :
980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.close()
990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        del self.db
1000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.env.close()
1010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        del self.env
1020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        test_support.rmtree(self.homeDir)
1030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        def test_flags(self) :
1050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_flags(db.DB_CHKSUM)
1060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(db.DB_CHKSUM, self.db.get_flags())
1070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_flags(db.DB_TXN_NOT_DURABLE)
1080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(db.DB_TXN_NOT_DURABLE | db.DB_CHKSUM,
1090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                    self.db.get_flags())
1100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_get_transactional(self) :
1120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertFalse(self.db.get_transactional())
1130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        # DB_AUTO_COMMIT = Implicit transaction
1140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.db.open("XXX", dbtype=db.DB_HASH,
1150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                flags = db.DB_CREATE | db.DB_AUTO_COMMIT)
1160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertTrue(self.db.get_transactional())
1170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1180a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass DB_recno(DB) :
1190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_re_pad(self) :
1200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in [' ', '*'] :  # Check chars
1210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_re_pad(i)
1220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(ord(i), self.db.get_re_pad())
1230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in [97, 65] :  # Check integers
1240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_re_pad(i)
1250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(i, self.db.get_re_pad())
1260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_re_delim(self) :
1280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in [' ', '*'] :  # Check chars
1290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_re_delim(i)
1300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(ord(i), self.db.get_re_delim())
1310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in [97, 65] :  # Check integers
1320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_re_delim(i)
1330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(i, self.db.get_re_delim())
1340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_re_source(self) :
1360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in ["test", "test2", "test3"] :
1370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_re_source(i)
1380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(i, self.db.get_re_source())
1390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1400a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass DB_queue(DB) :
1410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_re_len(self) :
1420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in [33, 65, 300, 2000] :
1430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_re_len(i)
1440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(i, self.db.get_re_len())
1450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test_q_extentsize(self) :
1470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for i in [1, 60, 100] :
1480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.db.set_q_extentsize(i)
1490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            self.assertEqual(i, self.db.get_q_extentsize())
1500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1510a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef test_suite():
1520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    suite = unittest.TestSuite()
1530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    suite.addTest(unittest.makeSuite(DB_general))
1550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    suite.addTest(unittest.makeSuite(DB_txn))
1560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    suite.addTest(unittest.makeSuite(DB_hash))
1570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    suite.addTest(unittest.makeSuite(DB_recno))
1580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    suite.addTest(unittest.makeSuite(DB_queue))
1590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    return suite
1610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
1620a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == '__main__':
1630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    unittest.main(defaultTest='test_suite')
164