183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Test driver for bsddb package. 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh""" 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehRun all test cases. 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh""" 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport os 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport sys 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport tempfile 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport time 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport unittest 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test.test_support import requires, run_unittest, import_module 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Skip test if _bsddb module was not built. 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport_module('_bsddb') 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Silence Py3k warning 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport_module('bsddb', deprecated=True) 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# When running as a script instead of within the regrtest framework, skip the 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# requires test, since it's obvious we want to run them. 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ != '__main__': 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh requires('bsddb') 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehverbose = False 2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif 'verbose' in sys.argv: 2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh verbose = True 2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sys.argv.remove('verbose') 2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif 'silent' in sys.argv: # take care of old flag, just in case 2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh verbose = False 2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sys.argv.remove('silent') 3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass TimingCheck(unittest.TestCase): 3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """This class is not a real test. Its purpose is to print a message 3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh periodically when the test runs slowly. This will prevent the buildbots 3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from timing out on slow machines.""" 3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # How much time in seconds before printing a 'Still working' message. 3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Since this is run at most once between each test module, use a smaller 4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # interval than other tests. 4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh _PRINT_WORKING_MSG_INTERVAL = 4 * 60 4283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # next_time is used as a global variable that survives each instance. 4483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # This is necessary since a new instance will be created for each test. 4583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh next_time = time.time() + _PRINT_WORKING_MSG_INTERVAL 4683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def testCheckElapsedTime(self): 4883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Print still working message since these tests can be really slow. 4983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh now = time.time() 5083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.next_time <= now: 5183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh TimingCheck.next_time = now + self._PRINT_WORKING_MSG_INTERVAL 5283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sys.__stdout__.write(' test_bsddb3 still working, be patient...\n') 5383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sys.__stdout__.flush() 5483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 5583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 5683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# For invocation through regrtest 5783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_main(): 5883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from bsddb import db 5983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from bsddb.test import test_all 6083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_all.set_test_path_prefix(os.path.join(tempfile.gettempdir(), 6183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'z-test_bsddb3-%s' % 6283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh os.getpid())) 6383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Please leave this print in, having this show up in the buildbots 6483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # makes diagnosing problems a lot easier. 6583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh print >>sys.stderr, db.DB_VERSION_STRING 6683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh print >>sys.stderr, 'Test path prefix: ', test_all.get_test_path_prefix() 6783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 6883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh run_unittest(test_all.suite(module_prefix='bsddb.test.', 6983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh timing_check=TimingCheck)) 7083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh finally: 7183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # The only reason to remove db_home is in case if there is an old 7283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # one lying around. This might be by a different user, so just 7383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # ignore errors. We should always make a unique name now. 7483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 7583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_all.remove_test_path_directory() 7683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh except: 7783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 7883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 7983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ == '__main__': 8183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_main() 82