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

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: Created 5 years, 8 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 = 900
21
22 def utcnow_handler():
23 return self.utcnow
24 def last_boot_handler(*_args):
25 return self.last_boot
26 def last_no_new_builds_handler(*_args):
27 return self.last_no_new_builds
28 def buildbot_is_running_handler(*_args):
29 return self.buildbot_is_running
30 def accepting_builds_handler(*_args):
31 return self.accepting_builds
32
33 self.mock(timestamp, 'utcnow_ts', utcnow_handler)
34 self.mock(master, 'get_last_boot', last_boot_handler)
35 self.mock(master, 'get_last_no_new_builds', last_no_new_builds_handler)
36 self.mock(master, 'buildbot_is_running', buildbot_is_running_handler)
37 self.mock(master, 'get_accepting_builds', accepting_builds_handler)
38
39 def _get_evidence(self):
40 evidence = buildbot_state.collect_evidence('fake_dir')
41 evidence['desired_buildbot_state'] = {
42 'desired_state': self.desired_buildbot_state,
43 }
44 return evidence
45
46 def _get_state(self):
47 return self.matcher.get_state(self._get_evidence())
48
49 def _get_execution_list(self):
50 return self.matcher.execution_list(self._get_evidence())
51
52 def testPatternMatcherIsSane(self):
53 self.assertTrue(self.matcher.is_correct)
54
55
56 #### Tests.
57
58 def testBuildbotIsOffline(self):
59 self.buildbot_is_running = False
60 state = self._get_state()['buildbot']
61 self.assertEqual(state, 'offline')
62
63 def testBuildbotIsBooting(self):
64 self.utcnow = self.last_boot + 4 * 60
65 self.accepting_builds = None
66 state = self._get_state()['buildbot']
67 self.assertEqual(state, 'booting')
68
69 def testBuildbotIsRunning(self):
70 state = self._get_state()['buildbot']
71 self.assertEqual(state, 'started_serving_accept')
72
73 def testBuildbotIsDraining(self):
74 self.accepting_builds = False
75 self.utcnow = self.last_no_new_builds + 4 * 60
76 state = self._get_state()['buildbot']
77 self.assertEqual(state, 'started_serving_not_accept')
78
79 def testBuildbotIsDrained(self):
80 self.accepting_builds = False
81 state = self._get_state()['buildbot']
82 self.assertEqual(state, 'started_serving_not_accept_drained')
83
84 def testBuildbotIsCrashing(self):
85 self.accepting_builds = None
86 state = self._get_state()['buildbot']
87 self.assertEqual(state, 'started_not_serving')
88
89 def testDesiredUpToDate(self):
90 state = self._get_state()['desired_buildbot_state']
91 self.assertEqual(state, 'up_to_date')
92
93 def testDesiredOffline(self):
94 self.desired_buildbot_state = None
95 state = self._get_state()['desired_buildbot_state']
96 self.assertEqual(state, 'offline')
97
98 def testDesiredFuture(self):
99 self.desired_buildbot_state = 3000
100 state = self._get_state()['desired_buildbot_state']
101 self.assertEqual(state, 'future')
102
103 def testDesiredReboot(self):
104 self.desired_buildbot_state = 1100
105 state = self._get_state()['desired_buildbot_state']
106 self.assertEqual(state, 'needs_reboot')
107
108 def testNoLastBoot(self):
109 self.last_boot = None
110 state = self._get_state()['desired_buildbot_state']
111 self.assertEqual(state, 'needs_reboot')
112
113 def testOfflineStaysOffline(self):
114 self.desired_buildbot_state = None
115 self.buildbot_is_running = False
116 _, _, execution_list = self._get_execution_list()
117 self.assertEqual(execution_list, [])
118
119 def testRestartKickedOff(self):
120 self.desired_buildbot_state = 1100
121 _, _, execution_list = self._get_execution_list()
122 self.assertEqual(execution_list, [master.MakeNoNewBuilds])
123
124 def testTurnDown(self):
125 self.desired_buildbot_state = None
126 self.accepting_builds = False
127 _, _, execution_list = self._get_execution_list()
128 self.assertEqual(execution_list, [master.MakeStop])
129
130 def testStartUp(self):
131 self.buildbot_is_running = False
132 _, _, execution_list = self._get_execution_list()
133 self.assertEqual(execution_list, [master.GclientSync, master.MakeStart])
134
135 def testRestart(self):
136 self.accepting_builds = False
137 _, _, execution_list = self._get_execution_list()
138 self.assertEqual(execution_list, [
139 master.GclientSync,
140 master.MakeStop,
141 master.MakeWait,
142 master.MakeStart])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698