host_file_system_iterator_test.py revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
1#!/usr/bin/env python 2# Copyright 2013 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import unittest 7 8from host_file_system_creator import HostFileSystemCreator 9from host_file_system_creator_test import ConstructorForTest 10from host_file_system_iterator import HostFileSystemIterator 11from object_store_creator import ObjectStoreCreator 12from test_branch_utility import TestBranchUtility 13 14 15def _GetIterationTracker(version): 16 '''Adds the ChannelInfo object from each iteration to a list, and signals the 17 loop to stop when |version| is reached. 18 ''' 19 iterations = [] 20 def callback(file_system, channel_info): 21 if channel_info.version == version: 22 return False 23 iterations.append(channel_info) 24 return True 25 return (iterations, callback) 26 27 28class HostFileSystemIteratorTest(unittest.TestCase): 29 30 def setUp(self): 31 host_file_system_creator = HostFileSystemCreator( 32 ObjectStoreCreator.ForTest(), 33 constructor_for_test=ConstructorForTest) 34 self._branch_utility = TestBranchUtility.CreateWithCannedData() 35 self._iterator = HostFileSystemIterator( 36 host_file_system_creator, 37 host_file_system_creator.Create('trunk'), 38 self._branch_utility) 39 40 def _GetStableChannelInfo(self,version): 41 return self._branch_utility.GetStableChannelInfo(version) 42 43 def _GetChannelInfo(self, channel_name): 44 return self._branch_utility.GetChannelInfo(channel_name) 45 46 def testAscending(self): 47 # Start at |stable| version 5, and move up towards |trunk|. 48 # Total: 25 file systems. 49 iterations, callback = _GetIterationTracker(0) 50 self.assertEqual( 51 self._iterator.Ascending(self._GetStableChannelInfo(5), callback), 52 self._GetChannelInfo('trunk')) 53 self.assertEqual(len(iterations), 25) 54 55 # Start at |stable| version 5, and move up towards |trunk|. The callback 56 # fails at |beta|, so the last successful callback was the latest version 57 # of |stable|. Total: 22 file systems. 58 iterations, callback = _GetIterationTracker( 59 self._GetChannelInfo('beta').version) 60 self.assertEqual( 61 self._iterator.Ascending(self._GetStableChannelInfo(5), callback), 62 self._GetChannelInfo('stable')) 63 self.assertEqual(len(iterations), 22) 64 65 # Start at |stable| version 5, and the callback fails immediately. Since 66 # no file systems are successfully processed, expect a return of None. 67 iterations, callback = _GetIterationTracker(5) 68 self.assertEqual( 69 self._iterator.Ascending(self._GetStableChannelInfo(5), callback), 70 None) 71 self.assertEqual([], iterations) 72 73 # Start at |stable| version 5, and the callback fails at version 6. 74 # The return should represent |stable| version 5. 75 iterations, callback = _GetIterationTracker(6) 76 self.assertEqual( 77 self._iterator.Ascending(self._GetStableChannelInfo(5), callback), 78 self._GetStableChannelInfo(5)) 79 self.assertEqual([self._GetStableChannelInfo(5)], iterations) 80 81 # Start at the latest version of |stable|, and the callback fails at 82 # |trunk|. Total: 3 file systems. 83 iterations, callback = _GetIterationTracker('trunk') 84 self.assertEqual( 85 self._iterator.Ascending(self._GetChannelInfo('stable'), callback), 86 self._GetChannelInfo('dev')) 87 self.assertEqual([self._GetChannelInfo('stable'), 88 self._GetChannelInfo('beta'), 89 self._GetChannelInfo('dev')], iterations) 90 91 # Start at |stable| version 10, and the callback fails at |trunk|. 92 iterations, callback = _GetIterationTracker('trunk') 93 self.assertEqual( 94 self._iterator.Ascending(self._GetStableChannelInfo(10), callback), 95 self._GetChannelInfo('dev')) 96 self.assertEqual([self._GetStableChannelInfo(10), 97 self._GetStableChannelInfo(11), 98 self._GetStableChannelInfo(12), 99 self._GetStableChannelInfo(13), 100 self._GetStableChannelInfo(14), 101 self._GetStableChannelInfo(15), 102 self._GetStableChannelInfo(16), 103 self._GetStableChannelInfo(17), 104 self._GetStableChannelInfo(18), 105 self._GetStableChannelInfo(19), 106 self._GetStableChannelInfo(20), 107 self._GetStableChannelInfo(21), 108 self._GetStableChannelInfo(22), 109 self._GetStableChannelInfo(23), 110 self._GetStableChannelInfo(24), 111 self._GetStableChannelInfo(25), 112 self._GetChannelInfo('stable'), 113 self._GetChannelInfo('beta'), 114 self._GetChannelInfo('dev')], iterations) 115 116 def testDescending(self): 117 # Start at |trunk|, and the callback fails immediately. No file systems 118 # are successfully processed, so Descending() will return None. 119 iterations, callback = _GetIterationTracker('trunk') 120 self.assertEqual( 121 self._iterator.Descending(self._GetChannelInfo('trunk'), callback), 122 None) 123 self.assertEqual([], iterations) 124 125 # Start at |trunk|, and the callback fails at |dev|. Last good iteration 126 # should be |trunk|. 127 iterations, callback = _GetIterationTracker( 128 self._GetChannelInfo('dev').version) 129 self.assertEqual( 130 self._iterator.Descending(self._GetChannelInfo('trunk'), callback), 131 self._GetChannelInfo('trunk')) 132 self.assertEqual([self._GetChannelInfo('trunk')], iterations) 133 134 # Start at |trunk|, and then move from |dev| down to |stable| at version 5. 135 # Total: 25 file systems. 136 iterations, callback = _GetIterationTracker(0) 137 self.assertEqual( 138 self._iterator.Descending(self._GetChannelInfo('trunk'), callback), 139 self._GetStableChannelInfo(5)) 140 self.assertEqual(len(iterations), 25) 141 142 # Start at the latest version of |stable|, and move down to |stable| at 143 # version 5. Total: 22 file systems. 144 iterations, callback = _GetIterationTracker(0) 145 self.assertEqual( 146 self._iterator.Descending(self._GetChannelInfo('stable'), callback), 147 self._GetStableChannelInfo(5)) 148 self.assertEqual(len(iterations), 22) 149 150 # Start at |dev| and iterate down through |stable| versions. The callback 151 # fails at version 10. Total: 18 file systems. 152 iterations, callback = _GetIterationTracker(10) 153 self.assertEqual( 154 self._iterator.Descending(self._GetChannelInfo('dev'), callback), 155 self._GetStableChannelInfo(11)) 156 self.assertEqual([self._GetChannelInfo('dev'), 157 self._GetChannelInfo('beta'), 158 self._GetStableChannelInfo(26), 159 self._GetStableChannelInfo(25), 160 self._GetStableChannelInfo(24), 161 self._GetStableChannelInfo(23), 162 self._GetStableChannelInfo(22), 163 self._GetStableChannelInfo(21), 164 self._GetStableChannelInfo(20), 165 self._GetStableChannelInfo(19), 166 self._GetStableChannelInfo(18), 167 self._GetStableChannelInfo(17), 168 self._GetStableChannelInfo(16), 169 self._GetStableChannelInfo(15), 170 self._GetStableChannelInfo(14), 171 self._GetStableChannelInfo(13), 172 self._GetStableChannelInfo(12), 173 self._GetStableChannelInfo(11)], iterations) 174 175 176if __name__ == '__main__': 177 unittest.main() 178