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

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

Issue 1880443004: status_logger: send step results as well (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 4 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 | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2015 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2015 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 import contextlib 6 import contextlib
7 import json 7 import json
8 import os 8 import os
9 import tempfile 9 import tempfile
10 import shutil 10 import shutil
(...skipping 16 matching lines...) Expand all
27 27
28 def getProperty(self, _name): 28 def getProperty(self, _name):
29 return 'whatever' 29 return 'whatever'
30 30
31 31
32 class SourceStamp(object): 32 class SourceStamp(object):
33 changes = [] 33 changes = []
34 34
35 35
36 class Build(object): 36 class Build(object):
37 def __init__(self, steps=None):
38 self.__steps = steps or []
39
37 def getNumber(self): 40 def getNumber(self):
38 return 5 41 return 5
39 42
40 def getBuilder(self): 43 def getBuilder(self):
41 return Builder() 44 return Builder()
42 45
43 def getSlavename(self): 46 def getSlavename(self):
44 return 'cool-m1' 47 return 'cool-m1'
45 48
46 def getProperty(self, _name): 49 def getProperty(self, _name):
47 return 1427929423.0 50 return 1427929423.0
48 51
49 def getProperties(self): 52 def getProperties(self):
50 return Properties() 53 return Properties()
51 54
52 def getSourceStamp(self): 55 def getSourceStamp(self):
53 return SourceStamp() 56 return SourceStamp()
54 57
55 def getSteps(self): 58 def getSteps(self):
56 return [] 59 return self.__steps
57 60
58 def getTimes(self): 61 def getTimes(self):
59 return 5000, 6000 62 return 5000, 6000
60 63
61 64
62 class Step(object): 65 class Step(object):
63 step_number = 8 66 def __init__(self, step_number=8, result=0):
67 self.step_number = step_number
68 self.__result = result
69
64 def getName(self): 70 def getName(self):
65 return 'reticulating_splines' 71 return 'reticulating_splines'
66 72
67 def getTimes(self): 73 def getTimes(self):
68 return 5100, 5500 74 return 5100, 5500
69 75
76 def getResults(self):
77 return (self.__result, None)
78
70 79
71 @contextlib.contextmanager 80 @contextlib.contextmanager
72 def _make_logger(file_content=None): 81 def _make_logger(file_content=None):
73 """Create a status_logger and delete any temp files when done.""" 82 """Create a status_logger and delete any temp files when done."""
74 tempdir = tempfile.mkdtemp(prefix='status-logger') 83 tempdir = tempfile.mkdtemp(prefix='status-logger')
75 84
76 filename = 'logstatus' 85 filename = 'logstatus'
77 if file_content is None: 86 if file_content is None:
78 filename = 'does_not_exist' 87 filename = 'does_not_exist'
79 else: 88 else:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 with open(logger._event_logfile, 'r') as f: 177 with open(logger._event_logfile, 'r') as f:
169 content = f.read() 178 content = f.read()
170 self.assertTrue(content) 179 self.assertTrue(content)
171 json.loads(content) 180 json.loads(content)
172 181
173 def testStopStep(self): 182 def testStopStep(self):
174 config_dict = { 183 config_dict = {
175 'file_logging': True, 184 'file_logging': True,
176 'event_logging': True, 185 'event_logging': True,
177 } 186 }
187 steps = [Step(step_number=1),
188 Step(step_number=2, result=1),
189 Step(step_number=3)]
178 with _make_logger(config_dict) as logger: 190 with _make_logger(config_dict) as logger:
179 logger.stepFinished(Build(), Step(), [0]) 191 logger.stepFinished(Build(steps=steps), steps[-1], [0])
180 self.assertTrue(os.path.exists(logger.logfile)) 192 self.assertTrue(os.path.exists(logger.logfile))
181 self.assertTrue(os.path.isdir(logger._event_logging_dir)) 193 self.assertTrue(os.path.isdir(logger._event_logging_dir))
182 self.assertTrue(os.path.exists(logger._event_logfile)) 194 self.assertTrue(os.path.exists(logger._event_logfile))
195
183 # Ensure we added valid json 196 # Ensure we added valid json
184 with open(logger._event_logfile, 'r') as f: 197 with open(logger._event_logfile, 'r') as f:
185 content = f.read() 198 content = f.read()
186 self.assertTrue(content) 199 self.assertTrue(content)
187 json.loads(content) 200 json.loads(content)
188 201
202 # Ensure we wrote the correct json line.
203 expected = {
204 "slave": "cool-m1",
205 "builder": "coconuts",
206 "timestamp": 5500,
207 "step_result": "success",
208 "subproject_tag": "whatever",
209 "project_id": "whatever",
210 }
211 with open(logger._ts_mon_logfile, 'r') as f:
212 line = f.read()
213 d = json.loads(line)
214 self.assertEqual(expected, d)
215
189 216
190 if __name__ == '__main__': 217 if __name__ == '__main__':
191 unittest.main() 218 unittest.main()
OLDNEW
« scripts/master/status_logger.py ('K') | « scripts/master/status_logger.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698