10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Test cases for the dircache module 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Nick Mathewson 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport unittest 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom test.test_support import run_unittest, import_module 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidircache = import_module('dircache', deprecated=True) 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport os, time, sys, tempfile 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass DircacheTests(unittest.TestCase): 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def setUp(self): 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.tempdir = tempfile.mkdtemp() 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def tearDown(self): 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for fname in os.listdir(self.tempdir): 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.delTemp(fname) 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.rmdir(self.tempdir) 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def writeTemp(self, fname): 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f = open(os.path.join(self.tempdir, fname), 'w') 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def mkdirTemp(self, fname): 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.mkdir(os.path.join(self.tempdir, fname)) 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def delTemp(self, fname): 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi fname = os.path.join(self.tempdir, fname) 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if os.path.isdir(fname): 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.rmdir(fname) 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi os.unlink(fname) 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_listdir(self): 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ## SUCCESSFUL CASES 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi entries = dircache.listdir(self.tempdir) 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(entries, []) 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Check that cache is actually caching, not just passing through. 410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(dircache.listdir(self.tempdir) is entries) 420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Directories aren't "files" on Windows, and directory mtime has 440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # nothing to do with when files under a directory get created. 450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # That is, this test can't possibly work under Windows -- dircache 460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # is only good for capturing a one-shot snapshot there. 470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if sys.platform[:3] not in ('win', 'os2'): 490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Sadly, dircache has the same granularity as stat.mtime, and so 500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # can't notice any changes that occurred within 1 sec of the last 510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # time it examined a directory. 520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi time.sleep(1) 530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.writeTemp("test1") 540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi entries = dircache.listdir(self.tempdir) 550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(entries, ['test1']) 560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(dircache.listdir(self.tempdir) is entries) 570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ## UNSUCCESSFUL CASES 590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(OSError, dircache.listdir, self.tempdir+"_nonexistent") 600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_annotate(self): 620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.writeTemp("test2") 630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.mkdirTemp("A") 640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi lst = ['A', 'test2', 'test_nonexistent'] 650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dircache.annotate(self.tempdir, lst) 660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(lst, ['A/', 'test2', 'test_nonexistent']) 670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef test_main(): 700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi run_unittest(DircacheTests) 720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi dircache.reset() 740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == "__main__": 770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_main() 78