Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: scripts/master/unittests/floating_builder_test.py

Issue 2255643002: Floating builder logic waits at startup. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Fix nits. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « scripts/master/floating_builder.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ Source file for floating builder testcases.""" 6 """ Source file for floating builder testcases."""
7 7
8 import calendar 8 import calendar
9 import datetime 9 import datetime
10 import itertools 10 import itertools
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 def setUp(self): 116 def setUp(self):
117 self._mocks = ( 117 self._mocks = (
118 mock.patch('master.floating_builder._get_now'), 118 mock.patch('master.floating_builder._get_now'),
119 mock.patch('master.floating_builder.PokeBuilderTimer.reset'), 119 mock.patch('master.floating_builder.PokeBuilderTimer.reset'),
120 ) 120 )
121 for patcher in self._mocks: 121 for patcher in self._mocks:
122 patcher.start() 122 patcher.start()
123 123
124 # Mock current date/time. 124 # Mock current date/time.
125 self.now = datetime.datetime(2016, 1, 1, 8, 0, 0) # 1/1/2016 @8:00 125 self.now = datetime.datetime(2016, 1, 1, 8, 0, 0) # 1/1/2016 @8:00
126 fb._get_now.return_value = self.now 126 fb._get_now.side_effect = lambda: self.now
127 127
128 # Mock PokeBuilderTimer to record when the poke builder was set, but not 128 # Mock PokeBuilderTimer to record when the poke builder was set, but not
129 # actually schedule any reactor magic. 129 # actually schedule any reactor magic.
130 self.poke_delta = None 130 self.poke_delta = None
131 def record_poke_delta(delta): 131 def record_poke_delta(delta):
132 self.poke_delta = delta 132 self.poke_delta = delta
133 fb.PokeBuilderTimer.reset.side_effect = record_poke_delta 133 fb.PokeBuilderTimer.reset.side_effect = record_poke_delta
134 134
135 self._slaves = dict((s, _FakeSlave(s)) for s in ( 135 self._slaves = dict((s, _FakeSlave(s)) for s in (
136 'primary-a', 'primary-b', 'floating-a', 'floating-b', 136 'primary-a', 'primary-b', 'floating-a', 'floating-b',
137 )) 137 ))
138 138
139 self.builder = _FakeBuilder( 139 self.builder = _FakeBuilder(
140 'Test Builder', 140 'Test Builder',
141 [s[1] for s in sorted(self._slaves.iteritems())], 141 [s[1] for s in sorted(self._slaves.iteritems())],
142 ) 142 )
143 143
144 def tearDown(self): 144 def tearDown(self):
145 for patcher in reversed(self._mocks): 145 for patcher in reversed(self._mocks):
146 patcher.stop() 146 patcher.stop()
147 147
148 def testJustStartedNoPrimariesOnlineWaits(self):
149 fs = fb.FloatingSet()
150 fs.AddPrimary('primary-a')
151 fs.AddFloating('floating-a', 'floating-b')
152 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
153
154 self.builder.set_online_slaves('floating-a', 'floating-b')
155
156 nsb = fnsf(self.builder, self.builder.slavebuilders)
157 self.assertIsNone(nsb)
158 self.assertEqual(self.poke_delta, datetime.timedelta(seconds=10))
159
160 self.now += datetime.timedelta(seconds=11)
161 nsb = fnsf(self.builder, self.builder.slavebuilders)
162 self.assertIsNotNone(nsb)
163 self.assertEqual(nsb.slave.slavename, 'floating-a')
164
148 def testPrimaryBuilderIsSelectedWhenAvailable(self): 165 def testPrimaryBuilderIsSelectedWhenAvailable(self):
149 fs = fb.FloatingSet() 166 fs = fb.FloatingSet()
150 fs.AddPrimary('primary-a') 167 fs.AddPrimary('primary-a')
151 fs.AddFloating('floating-a', 'floating-b') 168 fs.AddFloating('floating-a', 'floating-b')
169 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
152 170
153 self.builder.set_online_slaves('primary-a', 'floating-a', 'floating-b') 171 self.builder.set_online_slaves('primary-a', 'floating-a', 'floating-b')
154 172
155 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
156 nsb = fnsf(self.builder, self.builder.slavebuilders) 173 nsb = fnsf(self.builder, self.builder.slavebuilders)
157 self.assertIsNotNone(nsb) 174 self.assertIsNotNone(nsb)
158 self.assertEqual(nsb.slave.slavename, 'primary-a') 175 self.assertEqual(nsb.slave.slavename, 'primary-a')
159 176
160 def testPrimaryBuilderIsSelectedWhenOneIsAvailableAndOneIsBusy(self): 177 def testPrimaryBuilderIsSelectedWhenOneIsAvailableAndOneIsBusy(self):
161 fs = fb.FloatingSet() 178 fs = fb.FloatingSet()
162 fs.AddPrimary('primary-a', 'primary-b') 179 fs.AddPrimary('primary-a', 'primary-b')
163 fs.AddFloating('floating-a', 'floating-b') 180 fs.AddFloating('floating-a', 'floating-b')
181 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
164 182
165 self.builder.set_online_slaves('primary-a', 'primary-b', 'floating-a', 183 self.builder.set_online_slaves('primary-a', 'primary-b', 'floating-a',
166 'floating-b') 184 'floating-b')
167 self.builder.set_busy_slaves('primary-a') 185 self.builder.set_busy_slaves('primary-a')
168 186
169 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
170 nsb = fnsf(self.builder, self.builder.slavebuilders) 187 nsb = fnsf(self.builder, self.builder.slavebuilders)
171 self.assertIsNotNone(nsb) 188 self.assertIsNotNone(nsb)
172 self.assertEqual(nsb.slave.slavename, 'primary-b') 189 self.assertEqual(nsb.slave.slavename, 'primary-b')
173 190
174 def testNoBuilderIsSelectedWhenPrimariesAreOfflineWithinGrace(self): 191 def testNoBuilderIsSelectedWhenPrimariesAreOfflineWithinGrace(self):
175 fs = fb.FloatingSet() 192 fs = fb.FloatingSet()
176 fs.AddPrimary('primary-a', 'primary-b') 193 fs.AddPrimary('primary-a', 'primary-b')
177 fs.AddFloating('floating-a', 'floating-b') 194 fs.AddFloating('floating-a', 'floating-b')
195 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
178 196
197 self.now += datetime.timedelta(seconds=30)
179 self.builder.set_online_slaves('floating-a') 198 self.builder.set_online_slaves('floating-a')
180 self._slaves['primary-b']._set_last_seen(self.now, seconds=-1) 199 self._slaves['primary-b']._set_last_seen(self.now, seconds=-1)
181 200
182 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
183 nsb = fnsf(self.builder, self.builder.slavebuilders) 201 nsb = fnsf(self.builder, self.builder.slavebuilders)
184 self.assertIsNone(nsb) 202 self.assertIsNone(nsb)
185 self.assertEqual(self.poke_delta, datetime.timedelta(seconds=9)) 203 self.assertEqual(self.poke_delta, datetime.timedelta(seconds=9))
186 204
187 def testFloatingBuilderIsSelectedWhenPrimariesAreOfflineForAWhile(self): 205 def testFloatingBuilderIsSelectedWhenPrimariesAreOfflineForAWhile(self):
188 fs = fb.FloatingSet() 206 fs = fb.FloatingSet()
189 fs.AddPrimary('primary-a', 'primary-b') 207 fs.AddPrimary('primary-a', 'primary-b')
190 fs.AddFloating('floating-a', 'floating-b') 208 fs.AddFloating('floating-a', 'floating-b')
209 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
191 210
211 self.now += datetime.timedelta(seconds=30)
192 self.builder.set_online_slaves('floating-a') 212 self.builder.set_online_slaves('floating-a')
193 213
194 fnsf = fs.NextSlaveFunc(datetime.timedelta(seconds=10))
195 nsb = fnsf(self.builder, self.builder.slavebuilders) 214 nsb = fnsf(self.builder, self.builder.slavebuilders)
196 self.assertIsNotNone(nsb) 215 self.assertIsNotNone(nsb)
197 self.assertEqual(nsb.slave.slavename, 'floating-a') 216 self.assertEqual(nsb.slave.slavename, 'floating-a')
198 217
199 218
200 if __name__ == '__main__': 219 if __name__ == '__main__':
201 unittest.main() 220 unittest.main()
OLDNEW
« no previous file with comments | « scripts/master/floating_builder.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698