aboutsummaryrefslogtreecommitdiff
path: root/catapult/dependency_manager/dependency_manager/local_path_info_unittest.py
diff options
context:
space:
mode:
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.py136
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())