diff options
Diffstat (limited to 'catapult/dependency_manager/dependency_manager/local_path_info_unittest.py')
-rw-r--r-- | catapult/dependency_manager/dependency_manager/local_path_info_unittest.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py b/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py new file mode 100644 index 00000000..83921fad --- /dev/null +++ b/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py @@ -0,0 +1,136 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os + +from pyfakefs import fake_filesystem_unittest + +import dependency_manager + +def _CreateFile(path): + """Create file at specific |path|, with specific |content|.""" + with open(path, 'wb') as f: + f.write('x') + + +def _ChangeFileTime(path, time0, days): + new_time = time0 + (days * 24 * 60 * 60) + os.utime(path, (new_time, new_time)) + + +class LocalPathInfoTest(fake_filesystem_unittest.TestCase): + + def setUp(self): + self.setUpPyfakefs() + + def tearDown(self): + self.tearDownPyfakefs() + + def testEmptyInstance(self): + path_info = dependency_manager.LocalPathInfo(None) + self.assertIsNone(path_info.GetLocalPath()) + self.assertFalse(path_info.IsPathInLocalPaths('file.txt')) + + def testSimpleGroupWithOnePath(self): + path_info = dependency_manager.LocalPathInfo(['file.txt']) + self.assertTrue(path_info.IsPathInLocalPaths('file.txt')) + self.assertFalse(path_info.IsPathInLocalPaths('other.txt')) + + # GetLocalPath returns None if the file doesn't exist. + # Otherwise it will return the file path. + self.assertIsNone(path_info.GetLocalPath()) + _CreateFile('file.txt') + self.assertEqual('file.txt', path_info.GetLocalPath()) + + def testSimpleGroupsWithMultiplePaths(self): + path_info = dependency_manager.LocalPathInfo( + [['file1', 'file2', 'file3']]) + self.assertTrue(path_info.IsPathInLocalPaths('file1')) + self.assertTrue(path_info.IsPathInLocalPaths('file2')) + self.assertTrue(path_info.IsPathInLocalPaths('file3')) + + _CreateFile('file1') + _CreateFile('file2') + _CreateFile('file3') + s = os.stat('file1') + time0 = s.st_mtime + + _ChangeFileTime('file1', time0, 4) + _ChangeFileTime('file2', time0, 2) + _ChangeFileTime('file3', time0, 0) + self.assertEqual('file1', path_info.GetLocalPath()) + + _ChangeFileTime('file1', time0, 0) + _ChangeFileTime('file2', time0, 4) + _ChangeFileTime('file3', time0, 2) + self.assertEqual('file2', path_info.GetLocalPath()) + + _ChangeFileTime('file1', time0, 2) + _ChangeFileTime('file2', time0, 0) + _ChangeFileTime('file3', time0, 4) + self.assertEqual('file3', path_info.GetLocalPath()) + + def testMultipleGroupsWithSinglePaths(self): + path_info = dependency_manager.LocalPathInfo( + ['file1', 'file2', 'file3']) + self.assertTrue(path_info.IsPathInLocalPaths('file1')) + self.assertTrue(path_info.IsPathInLocalPaths('file2')) + self.assertTrue(path_info.IsPathInLocalPaths('file3')) + + self.assertIsNone(path_info.GetLocalPath()) + _CreateFile('file3') + self.assertEqual('file3', path_info.GetLocalPath()) + _CreateFile('file2') + self.assertEqual('file2', path_info.GetLocalPath()) + _CreateFile('file1') + self.assertEqual('file1', path_info.GetLocalPath()) + + def testMultipleGroupsWithMultiplePaths(self): + path_info = dependency_manager.LocalPathInfo([ + ['file1', 'file2'], + ['file3', 'file4']]) + self.assertTrue(path_info.IsPathInLocalPaths('file1')) + self.assertTrue(path_info.IsPathInLocalPaths('file2')) + self.assertTrue(path_info.IsPathInLocalPaths('file3')) + self.assertTrue(path_info.IsPathInLocalPaths('file4')) + + _CreateFile('file1') + _CreateFile('file3') + s = os.stat('file1') + time0 = s.st_mtime + + # Check that file1 is always returned, even if it is not the most recent + # file, because it is part of the first group and exists. + _ChangeFileTime('file1', time0, 2) + _ChangeFileTime('file3', time0, 0) + self.assertEqual('file1', path_info.GetLocalPath()) + + _ChangeFileTime('file1', time0, 0) + _ChangeFileTime('file3', time0, 2) + self.assertEqual('file1', path_info.GetLocalPath()) + + def testUpdate(self): + path_info1 = dependency_manager.LocalPathInfo( + [['file1', 'file2']]) # One group with two files. + path_info2 = dependency_manager.LocalPathInfo( + ['file1', 'file2', 'file3']) # Three groups + self.assertTrue(path_info1.IsPathInLocalPaths('file1')) + self.assertTrue(path_info1.IsPathInLocalPaths('file2')) + self.assertFalse(path_info1.IsPathInLocalPaths('file3')) + + _CreateFile('file3') + self.assertIsNone(path_info1.GetLocalPath()) + + path_info1.Update(path_info2) + self.assertTrue(path_info1.IsPathInLocalPaths('file1')) + self.assertTrue(path_info1.IsPathInLocalPaths('file2')) + self.assertTrue(path_info1.IsPathInLocalPaths('file3')) + self.assertEqual('file3', path_info1.GetLocalPath()) + + _CreateFile('file1') + time0 = os.stat('file1').st_mtime + _ChangeFileTime('file3', time0, 2) # Make file3 more recent. + + # Check that file3 is in a later group. + self.assertEqual('file1', path_info1.GetLocalPath()) |