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

Side by Side Diff: infra/services/master_lifecycle/test/buildbot_state_test.py

Issue 1108523002: Add buildbot state machine and master_manager tool. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@daemon_bot_lib_merge
Patch Set: Address iannucci's final comments. Created 5 years, 7 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
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from testing_support import auto_stub
6
7 from infra.libs.buildbot import master
8 from infra.libs.time_functions import timestamp
9 from infra.services.master_lifecycle import buildbot_state
10
11 class TestBuildbotState(auto_stub.TestCase):
12 def setUp(self):
13 super(TestBuildbotState, self).setUp()
14 self.matcher = buildbot_state.construct_pattern_matcher()
15 self.utcnow = 2000
16 self.last_boot = 1000
17 self.last_no_new_builds = 1100
18 self.buildbot_is_running = True
19 self.accepting_builds = True
20 self.desired_buildbot_state = 'running'
21 self.desired_transition_time = 900
22
23 def utcnow_handler():
24 return self.utcnow
25 def last_boot_handler(*_args):
26 return self.last_boot
27 def last_no_new_builds_handler(*_args):
28 return self.last_no_new_builds
29 def buildbot_is_running_handler(*_args):
30 return self.buildbot_is_running
31 def accepting_builds_handler(*_args, **_kwargs):
32 return self.accepting_builds
33
34 self.mock(timestamp, 'utcnow_ts', utcnow_handler)
35 self.mock(master, 'get_last_boot', last_boot_handler)
36 self.mock(master, 'get_last_no_new_builds', last_no_new_builds_handler)
37 self.mock(master, 'buildbot_is_running', buildbot_is_running_handler)
38 self.mock(master, 'get_accepting_builds', accepting_builds_handler)
39
40 def _get_evidence(self):
41 evidence = buildbot_state.collect_evidence('fake_dir')
42 evidence['desired_buildbot_state'] = {
43 'desired_state': self.desired_buildbot_state,
44 'transition_time_utc': self.desired_transition_time,
45 }
46 return evidence
47
48 def _get_state(self):
49 return self.matcher.get_state(self._get_evidence())
50
51 def _get_execution_list(self):
52 return self.matcher.execution_list(self._get_evidence())
53
54 def testPatternMatcherIsSane(self):
55 self.assertTrue(self.matcher.is_correct)
56
57
58 #### Tests.
59
60 def testBuildbotIsOffline(self):
61 self.buildbot_is_running = False
62 state = self._get_state()['buildbot']
63 self.assertEqual(state, 'offline')
64
65 def testBuildbotIsStarting(self):
66 self.utcnow = self.last_boot + 4 * 60
67 self.accepting_builds = None
68 state = self._get_state()['buildbot']
69 self.assertEqual(state, 'starting')
70
71 def testBuildbotIsRunning(self):
72 state = self._get_state()['buildbot']
73 self.assertEqual(state, 'running')
74
75 def testBuildbotIsDraining(self):
76 self.accepting_builds = False
77 self.utcnow = self.last_no_new_builds + 4 * 60
78 state = self._get_state()['buildbot']
79 self.assertEqual(state, 'draining')
80
81 def testBuildbotIsDrained(self):
82 self.accepting_builds = False
83 state = self._get_state()['buildbot']
84 self.assertEqual(state, 'drained')
85
86 def testBuildbotIsCrashing(self):
87 self.accepting_builds = None
88 state = self._get_state()['buildbot']
89 self.assertEqual(state, 'crashed')
90
91 def testDesiredOffline(self):
92 self.desired_buildbot_state = 'offline'
93 state = self._get_state()['desired_buildbot_state']
94 self.assertEqual(state, 'offline')
95
96 def testDesiredInvalid(self):
97 self.desired_buildbot_state = 'delicious'
98 with self.assertRaises(ValueError):
99 _ = self._get_state()
100
101 def testDesiredUpToDate(self):
102 state = self._get_state()['desired_transition_time']
103 self.assertEqual(state, 'hold_steady')
104
105 def testDesiredFuture(self):
106 self.desired_transition_time = 3000
107 with self.assertRaises(ValueError):
108 _ = self._get_state()
109
110 def testDesiredReboot(self):
111 self.desired_transition_time = 1100
112 state = self._get_state()['desired_transition_time']
113 self.assertEqual(state, 'ready_to_fire')
114
115 def testNoLastBoot(self):
116 self.last_boot = None
117 state = self._get_state()['desired_transition_time']
118 self.assertEqual(state, 'ready_to_fire')
119
120 def testOfflineStaysOffline(self):
121 self.desired_buildbot_state = 'offline'
122 self.buildbot_is_running = False
123 _, _, execution_list = self._get_execution_list()
124 self.assertEqual(execution_list, [])
125
126 def testRestartKickedOff(self):
127 self.desired_transition_time = 1100
128 _, _, execution_list = self._get_execution_list()
129 self.assertEqual(execution_list, [master.MakeNoNewBuilds])
130
131 def testTurnDown(self):
132 self.desired_buildbot_state = 'offline'
133 self.accepting_builds = False
134 _, _, execution_list = self._get_execution_list()
135 self.assertEqual(execution_list, [master.MakeStop])
136
137 def testStartUp(self):
138 self.buildbot_is_running = False
139 _, _, execution_list = self._get_execution_list()
140 self.assertEqual(execution_list, [master.GclientSync, master.MakeStart])
141
142 def testRestart(self):
143 self.accepting_builds = False
144 _, _, execution_list = self._get_execution_list()
145 self.assertEqual(execution_list, [
146 master.GclientSync,
147 master.MakeStop,
148 master.MakeWait,
149 master.MakeStart])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698