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

Side by Side Diff: dashboard/dashboard/add_histograms_test.py

Issue 3000853002: Make add_histograms use reserved GenericSet names. (Closed)
Patch Set: rebase Created 3 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 | « dashboard/dashboard/add_histograms_queue_test.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 # Copyright 2017 The Chromium Authors. All rights reserved. 1 # Copyright 2017 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import base64 5 import base64
6 import json 6 import json
7 import mock 7 import mock
8 import sys 8 import sys
9 import urlparse 9 import urlparse
10 import webapp2 10 import webapp2
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 testing_common.SetIsInternalUser('foo@bar.com', True) 45 testing_common.SetIsInternalUser('foo@bar.com', True)
46 self.SetCurrentUser('foo@bar.com', is_admin=True) 46 self.SetCurrentUser('foo@bar.com', is_admin=True)
47 oauth_patcher = mock.patch.object(api_auth, 'oauth') 47 oauth_patcher = mock.patch.object(api_auth, 'oauth')
48 self.addCleanup(oauth_patcher.stop) 48 self.addCleanup(oauth_patcher.stop)
49 mock_oauth = oauth_patcher.start() 49 mock_oauth = oauth_patcher.start()
50 SetGooglerOAuth(mock_oauth) 50 SetGooglerOAuth(mock_oauth)
51 51
52 def testPostHistogramEndToEnd(self): 52 def testPostHistogramEndToEnd(self):
53 data = json.dumps([ 53 data = json.dumps([
54 { 54 {
55 'benchmarkName': 'benchmark', 55 'values': ['benchmark'],
56 'canonicalUrl': '',
57 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 56 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
58 'label': '', 57 'type': 'GenericSet',
59 'legacyTIRLabel': '',
60 'storyDisplayName': 'story',
61 'type': 'TelemetryInfo'
62 }, { 58 }, {
63 'values': [424242], 59 'values': [424242],
64 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 60 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
65 'type': 'GenericSet', 61 'type': 'GenericSet',
66 }, { 62 }, {
67 'buildNumber': 0, 63 'values': ['master'],
68 'buildbotMasterName': '',
69 'buildbotName': '',
70 'displayBotName': 'bot',
71 'displayMasterName': 'master',
72 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 64 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
73 'logUri': '', 65 'type': 'GenericSet'
74 'type': 'BuildbotInfo' 66 }, {
67 'values': ['bot'],
68 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
69 'type': 'GenericSet'
75 }, { 70 }, {
76 'binBoundaries': [1, [1, 1000, 20]], 71 'binBoundaries': [1, [1, 1000, 20]],
77 'diagnostics': { 72 'diagnostics': {
78 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 73 reserved_infos.MASTERS.name:
74 'e9c2891d-2b04-413f-8cf4-099827e67626',
75 reserved_infos.BOTS.name:
76 '53fb5448-9f8d-407a-8891-e7233fe1740f',
79 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 77 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
80 '25f0a111-9bb4-4cea-b0c1-af2609623160', 78 '25f0a111-9bb4-4cea-b0c1-af2609623160',
81 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 79 reserved_infos.BENCHMARKS.name:
80 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
82 }, 81 },
83 'guid': '2a714c36-f4ef-488d-8bee-93c7e3149388', 82 'guid': '2a714c36-f4ef-488d-8bee-93c7e3149388',
84 'name': 'foo2', 83 'name': 'foo2',
85 'unit': 'count' 84 'unit': 'count'
86 } 85 }
87 ]) 86 ])
88 self.testapp.post('/add_histograms', {'data': data}) 87 self.testapp.post('/add_histograms', {'data': data})
89 self.ExecuteTaskQueueTasks('/add_histograms_queue', 88 self.ExecuteTaskQueueTasks('/add_histograms_queue',
90 add_histograms.TASK_QUEUE_NAME) 89 add_histograms.TASK_QUEUE_NAME)
91 diagnostics = histogram.SparseDiagnostic.query().fetch() 90 diagnostics = histogram.SparseDiagnostic.query().fetch()
92 self.assertEqual(2, len(diagnostics)) 91 self.assertEqual(3, len(diagnostics))
93 histograms = histogram.Histogram.query().fetch() 92 histograms = histogram.Histogram.query().fetch()
94 self.assertEqual(1, len(histograms)) 93 self.assertEqual(1, len(histograms))
95 94
96 class AddHistogramsTest(testing_common.TestCase): 95 class AddHistogramsTest(testing_common.TestCase):
97 96
98 def setUp(self): 97 def setUp(self):
99 super(AddHistogramsTest, self).setUp() 98 super(AddHistogramsTest, self).setUp()
100 app = webapp2.WSGIApplication([ 99 app = webapp2.WSGIApplication([
101 ('/add_histograms', add_histograms.AddHistogramsHandler)]) 100 ('/add_histograms', add_histograms.AddHistogramsHandler)])
102 self.testapp = webtest.TestApp(app) 101 self.testapp = webtest.TestApp(app)
103 testing_common.SetIsInternalUser('foo@bar.com', True) 102 testing_common.SetIsInternalUser('foo@bar.com', True)
104 self.SetCurrentUser('foo@bar.com', is_admin=True) 103 self.SetCurrentUser('foo@bar.com', is_admin=True)
105 oauth_patcher = mock.patch.object(api_auth, 'oauth') 104 oauth_patcher = mock.patch.object(api_auth, 'oauth')
106 self.addCleanup(oauth_patcher.stop) 105 self.addCleanup(oauth_patcher.stop)
107 mock_oauth = oauth_patcher.start() 106 mock_oauth = oauth_patcher.start()
108 SetGooglerOAuth(mock_oauth) 107 SetGooglerOAuth(mock_oauth)
109 108
110 def TaskParamsByGuid(self): 109 def TaskParamsByGuid(self):
111 tasks = self.GetTaskQueueTasks(add_histograms.TASK_QUEUE_NAME) 110 tasks = self.GetTaskQueueTasks(add_histograms.TASK_QUEUE_NAME)
112 params_by_guid = {} 111 params_by_guid = {}
113 for task in tasks: 112 for task in tasks:
114 params = urlparse.parse_qs(base64.b64decode(task['body'])) 113 params = urlparse.parse_qs(base64.b64decode(task['body']))
115 guid = json.loads(params['data'][0])['guid'] 114 guid = json.loads(params['data'][0])['guid']
116 params_by_guid[guid] = params 115 params_by_guid[guid] = params
117 return params_by_guid 116 return params_by_guid
118 117
119 def testPostHistogramSetsTestPathAndRevision(self): 118 def testPostHistogramSetsTestPathAndRevision(self):
120 data = json.dumps([ 119 data = json.dumps([
121 { 120 {
122 'benchmarkName': 'benchmark', 121 'values': ['benchmark'],
123 'canonicalUrl': '',
124 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 122 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
125 'label': '', 123 'type': 'GenericSet',
126 'legacyTIRLabel': '',
127 'storyDisplayName': 'story',
128 'type': 'TelemetryInfo'
129 }, { 124 }, {
130 'values': [424242], 125 'values': [424242],
131 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 126 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
132 'type': 'GenericSet', 127 'type': 'GenericSet',
133 }, { 128 }, {
134 'buildNumber': 0, 129 'values': ['master'],
135 'buildbotMasterName': '',
136 'buildbotName': '',
137 'displayBotName': 'bot',
138 'displayMasterName': 'master',
139 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 130 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
140 'logUri': '', 131 'type': 'GenericSet'
141 'type': 'BuildbotInfo' 132 }, {
133 'values': ['bot'],
134 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
135 'type': 'GenericSet'
136 }, {
137 'values': ['story'],
138 'guid': 'dc894bd9-0b73-4400-9d95-b21ee371031d',
139 'type': 'GenericSet',
142 }, { 140 }, {
143 'binBoundaries': [1, [1, 1000, 20]], 141 'binBoundaries': [1, [1, 1000, 20]],
144 'diagnostics': { 142 'diagnostics': {
145 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 143 reserved_infos.STORIES.name:
144 'dc894bd9-0b73-4400-9d95-b21ee371031d',
145 reserved_infos.MASTERS.name:
146 'e9c2891d-2b04-413f-8cf4-099827e67626',
147 reserved_infos.BOTS.name:
148 '53fb5448-9f8d-407a-8891-e7233fe1740f',
146 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 149 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
147 '25f0a111-9bb4-4cea-b0c1-af2609623160', 150 '25f0a111-9bb4-4cea-b0c1-af2609623160',
148 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 151 reserved_infos.BENCHMARKS.name:
152 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
149 }, 153 },
150 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 154 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
151 'name': 'foo', 155 'name': 'foo',
152 'unit': 'count' 156 'unit': 'count'
153 }, { 157 }, {
154 'binBoundaries': [1, [1, 1000, 20]], 158 'binBoundaries': [1, [1, 1000, 20]],
155 'diagnostics': { 159 'diagnostics': {
156 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 160 reserved_infos.MASTERS.name:
161 'e9c2891d-2b04-413f-8cf4-099827e67626',
162 reserved_infos.BOTS.name:
163 '53fb5448-9f8d-407a-8891-e7233fe1740f',
157 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 164 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
158 '25f0a111-9bb4-4cea-b0c1-af2609623160', 165 '25f0a111-9bb4-4cea-b0c1-af2609623160',
159 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 166 reserved_infos.BENCHMARKS.name:
167 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
168 reserved_infos.STORIES.name:
169 'dc894bd9-0b73-4400-9d95-b21ee371031d',
160 }, 170 },
161 'guid': '2a714c36-f4ef-488d-8bee-93c7e3149388', 171 'guid': '2a714c36-f4ef-488d-8bee-93c7e3149388',
162 'name': 'foo2', 172 'name': 'foo2',
163 'unit': 'count' 173 'unit': 'count'
164 } 174 }
165 ]) 175 ])
166 self.testapp.post('/add_histograms', {'data': data}) 176 self.testapp.post('/add_histograms', {'data': data})
167 params_by_guid = self.TaskParamsByGuid() 177 params_by_guid = self.TaskParamsByGuid()
168 178
169 self.assertEqual(2, len(params_by_guid)) 179 self.assertEqual(2, len(params_by_guid))
170 self.assertEqual( 180 self.assertEqual(
171 'master/bot/benchmark/foo/story', 181 'master/bot/benchmark/foo/story',
172 params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']['test_path'][0]) 182 params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']['test_path'][0])
173 self.assertEqual( 183 self.assertEqual(
174 '424242', 184 '424242',
175 params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']['revision'][0]) 185 params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']['revision'][0])
176 self.assertEqual( 186 self.assertEqual(
177 'master/bot/benchmark/foo2/story', 187 'master/bot/benchmark/foo2/story',
178 params_by_guid['2a714c36-f4ef-488d-8bee-93c7e3149388']['test_path'][0]) 188 params_by_guid['2a714c36-f4ef-488d-8bee-93c7e3149388']['test_path'][0])
179 self.assertEqual( 189 self.assertEqual(
180 '424242', 190 '424242',
181 params_by_guid['2a714c36-f4ef-488d-8bee-93c7e3149388']['revision'][0]) 191 params_by_guid['2a714c36-f4ef-488d-8bee-93c7e3149388']['revision'][0])
182 192
183 def testPostHistogramPassesHistogramLevelSparseDiagnostics(self): 193 def testPostHistogramPassesHistogramLevelSparseDiagnostics(self):
184 data = json.dumps([ 194 data = json.dumps([
185 { 195 {
186 'benchmarkName': 'benchmark', 196 'values': ['benchmark'],
187 'canonicalUrl': '', 197 'guid': '876d0fba-1d12-4c00-a7e9-5fed467e19e3',
198 'type': 'GenericSet',
199 }, {
200 'values': [],
188 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 201 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
189 'label': '', 202 'type': 'GenericSet',
190 'legacyTIRLabel': '',
191 'storyDisplayName': 'story',
192 'type': 'TelemetryInfo'
193 }, { 203 }, {
194 'values': [424242], 204 'values': [424242],
195 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 205 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
196 'type': 'GenericSet', 206 'type': 'GenericSet',
197 }, { 207 }, {
198 'buildNumber': 0, 208 'values': ['master'],
199 'buildbotMasterName': '',
200 'buildbotName': '',
201 'displayBotName': 'bot',
202 'displayMasterName': 'master',
203 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 209 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
204 'logUri': '', 210 'type': 'GenericSet'
205 'type': 'BuildbotInfo' 211 }, {
212 'values': ['bot'],
213 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
214 'type': 'GenericSet'
206 }, { 215 }, {
207 'binBoundaries': [1, [1, 1000, 20]], 216 'binBoundaries': [1, [1, 1000, 20]],
208 'diagnostics': { 217 'diagnostics': {
209 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 218 reserved_infos.MASTERS.name:
219 'e9c2891d-2b04-413f-8cf4-099827e67626',
220 reserved_infos.BOTS.name:
221 '53fb5448-9f8d-407a-8891-e7233fe1740f',
210 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 222 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
211 '25f0a111-9bb4-4cea-b0c1-af2609623160', 223 '25f0a111-9bb4-4cea-b0c1-af2609623160',
212 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 224 reserved_infos.BENCHMARKS.name:
225 '876d0fba-1d12-4c00-a7e9-5fed467e19e3',
213 }, 226 },
214 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 227 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
215 'name': 'foo', 228 'name': 'foo',
216 'unit': 'count' 229 'unit': 'count'
217 }, { 230 }, {
218 'binBoundaries': [1, [1, 1000, 20]], 231 'binBoundaries': [1, [1, 1000, 20]],
219 'diagnostics': { 232 'diagnostics': {
220 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 233 reserved_infos.MASTERS.name:
234 'e9c2891d-2b04-413f-8cf4-099827e67626',
235 reserved_infos.BOTS.name:
236 '53fb5448-9f8d-407a-8891-e7233fe1740f',
237 reserved_infos.GPUS.name:
238 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
221 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 239 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
222 '25f0a111-9bb4-4cea-b0c1-af2609623160', 240 '25f0a111-9bb4-4cea-b0c1-af2609623160',
223 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 241 reserved_infos.BENCHMARKS.name:
242 '876d0fba-1d12-4c00-a7e9-5fed467e19e3',
224 }, 243 },
225 'guid': '2a714c36-f4ef-488d-8bee-93c7e3149388', 244 'guid': '2a714c36-f4ef-488d-8bee-93c7e3149388',
226 'name': 'foo2', 245 'name': 'foo2',
227 'unit': 'count' 246 'unit': 'count'
228 } 247 }
229 ]) 248 ])
230 self.testapp.post('/add_histograms', {'data': data}) 249 self.testapp.post('/add_histograms', {'data': data})
231 250
232 params_by_guid = self.TaskParamsByGuid() 251 params_by_guid = self.TaskParamsByGuid()
233 params = params_by_guid['2a714c36-f4ef-488d-8bee-93c7e3149388'] 252 params = params_by_guid['2a714c36-f4ef-488d-8bee-93c7e3149388']
234 diagnostics = json.loads(params['diagnostics'][0]) 253 diagnostics = json.loads(params['diagnostics'][0])
235 254
236 self.assertEqual(1, len(diagnostics)) 255 self.assertEqual(1, len(diagnostics))
237 self.assertEqual( 256 self.assertEqual(
238 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', diagnostics[0]['guid']) 257 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', diagnostics[0]['guid'])
239 258
240 def testPostHistogram_AddsNewSparseDiagnostic(self): 259 def testPostHistogram_AddsNewSparseDiagnostic(self):
241 diag_dict = { 260 diag_dict = {
242 'buildNumber': 0, 261 'values': ['master'],
243 'buildbotMasterName': '', 262 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
244 'buildbotName': 'buildbotmaster0', 263 'type': 'GenericSet'
245 'displayBotName': 'bot',
246 'displayMasterName': 'master',
247 'guid': '6ce177ab-3fdb-44cb-aa8d-9ed49765d810',
248 'logUri': '',
249 'type': 'BuildbotInfo'
250 } 264 }
251 diag = histogram.SparseDiagnostic( 265 diag = histogram.SparseDiagnostic(
252 data=diag_dict, start_revision=1, end_revision=sys.maxint, 266 data=diag_dict, start_revision=1, end_revision=sys.maxint,
253 test=utils.TestKey('master/bot/benchmark')) 267 test=utils.TestKey('master/bot/benchmark'))
254 diag.put() 268 diag.put()
255 data = json.dumps([ 269 data = json.dumps([
256 { 270 {
257 'benchmarkName': 'benchmark', 271 'values': ['benchmark'],
258 'canonicalUrl': '',
259 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 272 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
260 'label': '', 273 'type': 'GenericSet',
261 'legacyTIRLabel': '',
262 'storyDisplayName': 'story',
263 'type': 'TelemetryInfo'
264 }, { 274 }, {
265 'values': [424242], 275 'values': [424242],
266 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 276 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
267 'type': 'GenericSet', 277 'type': 'GenericSet',
268 }, { 278 }, {
269 'buildNumber': 0, 279 'values': ['master'],
270 'buildbotMasterName': '',
271 'buildbotName': 'buildbotmaster1',
272 'displayBotName': 'bot',
273 'displayMasterName': 'master',
274 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 280 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
275 'logUri': '', 281 'type': 'GenericSet'
276 'type': 'BuildbotInfo' 282 }, {
283 'values': ['bot'],
284 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
285 'type': 'GenericSet'
277 }, { 286 }, {
278 'binBoundaries': [1, [1, 1000, 20]], 287 'binBoundaries': [1, [1, 1000, 20]],
279 'diagnostics': { 288 'diagnostics': {
280 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 289 reserved_infos.MASTERS.name:
290 'e9c2891d-2b04-413f-8cf4-099827e67626',
291 reserved_infos.BOTS.name:
292 '53fb5448-9f8d-407a-8891-e7233fe1740f',
281 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 293 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
282 '25f0a111-9bb4-4cea-b0c1-af2609623160', 294 '25f0a111-9bb4-4cea-b0c1-af2609623160',
283 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 295 reserved_infos.BENCHMARKS.name:
296 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
284 }, 297 },
285 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 298 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
286 'name': 'foo', 299 'name': 'foo',
287 'unit': 'count'} 300 'unit': 'count'}
288 ]) 301 ])
289 self.testapp.post('/add_histograms', {'data': data}) 302 self.testapp.post('/add_histograms', {'data': data})
290 303
291 diagnostics = histogram.SparseDiagnostic.query().fetch() 304 diagnostics = histogram.SparseDiagnostic.query().fetch()
292 params_by_guid = self.TaskParamsByGuid() 305 params_by_guid = self.TaskParamsByGuid()
293 params = params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0'] 306 params = params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']
294 hist = json.loads(params['data'][0]) 307 hist = json.loads(params['data'][0])
295 buildbot_info = hist['diagnostics']['buildbot']
296 308
297 self.assertEqual(2, len(diagnostics)) 309 self.assertEqual(4, len(diagnostics))
298 self.assertEqual('e9c2891d-2b04-413f-8cf4-099827e67626', buildbot_info) 310 self.assertEqual(
311 'e9c2891d-2b04-413f-8cf4-099827e67626',
312 hist['diagnostics'][reserved_infos.MASTERS.name])
299 313
300 def testPostHistogram_DeduplicatesSameSparseDiagnostic(self): 314 def testPostHistogram_DeduplicatesSameSparseDiagnostic(self):
301 diag_dict = { 315 diag_dict = {
302 'buildNumber': 0, 316 'values': ['master'],
303 'buildbotMasterName': '', 317 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
304 'buildbotName': 'buildbotmaster', 318 'type': 'GenericSet'
305 'displayBotName': 'bot',
306 'displayMasterName': 'master',
307 'guid': '6ce177ab-3fdb-44cb-aa8d-9ed49765d810',
308 'logUri': '',
309 'type': 'BuildbotInfo'
310 } 319 }
311 diag = histogram.SparseDiagnostic( 320 diag = histogram.SparseDiagnostic(
312 id='e9c2891d-2b04-413f-8cf4-099827e67626', data=diag_dict, 321 id='e9c2891d-2b04-413f-8cf4-099827e67626', data=diag_dict,
313 start_revision=1, end_revision=sys.maxint, 322 start_revision=1, end_revision=sys.maxint,
314 test=utils.TestKey('master/bot/benchmark')) 323 test=utils.TestKey('master/bot/benchmark'))
315 diag.put() 324 diag.put()
316 data = json.dumps([ 325 data = json.dumps([
317 { 326 {
318 'benchmarkName': 'benchmark', 327 'values': ['benchmark'],
319 'canonicalUrl': '',
320 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 328 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
321 'label': '', 329 'type': 'GenericSet',
322 'legacyTIRLabel': '',
323 'storyDisplayName': 'story',
324 'type': 'TelemetryInfo'
325 }, { 330 }, {
326 'values': [424242], 331 'values': [424242],
327 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 332 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
328 'type': 'GenericSet', 333 'type': 'GenericSet',
329 }, { 334 }, {
330 'buildNumber': 0, 335 'values': ['master'],
331 'buildbotMasterName': '',
332 'buildbotName': 'buildbotmaster',
333 'displayBotName': 'bot',
334 'displayMasterName': 'master',
335 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 336 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
336 'logUri': '', 337 'type': 'GenericSet'
337 'type': 'BuildbotInfo' 338 }, {
339 'values': ['bot'],
340 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
341 'type': 'GenericSet'
338 }, { 342 }, {
339 'binBoundaries': [1, [1, 1000, 20]], 343 'binBoundaries': [1, [1, 1000, 20]],
340 'diagnostics': { 344 'diagnostics': {
341 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 345 reserved_infos.MASTERS.name:
346 'e9c2891d-2b04-413f-8cf4-099827e67626',
347 reserved_infos.BOTS.name:
348 '53fb5448-9f8d-407a-8891-e7233fe1740f',
342 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 349 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
343 '25f0a111-9bb4-4cea-b0c1-af2609623160', 350 '25f0a111-9bb4-4cea-b0c1-af2609623160',
344 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 351 reserved_infos.BENCHMARKS.name:
352 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
345 }, 353 },
346 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 354 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
347 'name': 'foo', 355 'name': 'foo',
348 'unit': 'count' 356 'unit': 'count'
349 } 357 }
350 ]) 358 ])
351 self.testapp.post('/add_histograms', {'data': data}) 359 self.testapp.post('/add_histograms', {'data': data})
352 360
353 diagnostics = histogram.SparseDiagnostic.query().fetch() 361 diagnostics = histogram.SparseDiagnostic.query().fetch()
354 params_by_guid = self.TaskParamsByGuid() 362 params_by_guid = self.TaskParamsByGuid()
355 params = params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0'] 363 params = params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']
356 hist = json.loads(params['data'][0]) 364 hist = json.loads(params['data'][0])
357 buildbot_info = hist['diagnostics']['buildbot']
358 365
359 self.assertEqual(1, len(diagnostics)) 366 self.assertEqual(3, len(diagnostics))
360 self.assertEqual('6ce177ab-3fdb-44cb-aa8d-9ed49765d810', buildbot_info) 367 self.assertEqual(
368 'e9c2891d-2b04-413f-8cf4-099827e67626',
369 hist['diagnostics'][reserved_infos.MASTERS.name])
361 370
362 def testPostHistogramFailsWithoutHistograms(self): 371 def testPostHistogramFailsWithoutHistograms(self):
363 data = json.dumps([ 372 data = json.dumps([
364 { 373 {
365 'benchmarkName': 'benchmark', 374 'values': ['benchmark'],
366 'canonicalUrl': '',
367 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 375 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
368 'label': '', 376 'type': 'GenericSet',
369 'legacyTIRLabel': '',
370 'storyDisplayName': 'story',
371 'type': 'TelemetryInfo'
372 }, { 377 }, {
373 'buildNumber': 0, 378 'values': ['master'],
374 'buildbotMasterName': '',
375 'buildbotName': 'buildbotmaster1',
376 'displayBotName': 'bot',
377 'displayMasterName': 'master',
378 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 379 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
379 'logUri': '', 380 'type': 'GenericSet'
380 'type': 'BuildbotInfo' 381 }, {
382 'values': ['bot'],
383 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
384 'type': 'GenericSet'
381 } 385 }
382 ]) 386 ])
383 self.testapp.post('/add_histograms', {'data': data}, status=400) 387 self.testapp.post('/add_histograms', {'data': data}, status=400)
384 388
385 def testPostHistogramFailsWithoutBuildbotInfo(self): 389 def testPostHistogramFailsWithoutBuildbotInfo(self):
386 data = json.dumps([ 390 data = json.dumps([
387 { 391 {
388 'benchmarkName': 'benchmark', 392 'values': ['benchmark'],
389 'canonicalUrl': '',
390 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 393 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
391 'label': '', 394 'type': 'GenericSet'
392 'legacyTIRLabel': '',
393 'storyDisplayName': 'story',
394 'type': 'TelemetryInfo'
395 }, { 395 }, {
396 'values': [424242], 396 'values': [424242],
397 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 397 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
398 'type': 'GenericSet', 398 'type': 'GenericSet',
399 }, { 399 }, {
400 'binBoundaries': [1, [1, 1000, 20]], 400 'binBoundaries': [1, [1, 1000, 20]],
401 'diagnostics': { 401 'diagnostics': {
402 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 402 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
403 '25f0a111-9bb4-4cea-b0c1-af2609623160', 403 '25f0a111-9bb4-4cea-b0c1-af2609623160',
404 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 404 reserved_infos.BENCHMARKS.name:
405 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
405 }, 406 },
406 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 407 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
407 'name': 'foo', 408 'name': 'foo',
408 'unit': 'count' 409 'unit': 'count'
409 } 410 }
410 ]) 411 ])
411 self.testapp.post('/add_histograms', {'data': data}, status=400) 412 self.testapp.post('/add_histograms', {'data': data}, status=400)
412 413
413 def testPostHistogramFailsWithoutChromiumCommit(self): 414 def testPostHistogramFailsWithoutChromiumCommit(self):
414 data = json.dumps([ 415 data = json.dumps([
415 { 416 {
416 'benchmarkName': 'benchmark', 417 'values': ['benchmark'],
417 'canonicalUrl': '',
418 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 418 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
419 'label': '', 419 'type': 'GenericSet',
420 'legacyTIRLabel': '',
421 'storyDisplayName': 'story',
422 'type': 'TelemetryInfo'
423 }, { 420 }, {
424 'buildNumber': 0, 421 'values': ['master'],
425 'buildbotMasterName': '',
426 'buildbotName': 'buildbotmaster1',
427 'displayBotName': 'bot',
428 'displayMasterName': 'master',
429 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 422 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
430 'logUri': '', 423 'type': 'GenericSet'
431 'type': 'BuildbotInfo' 424 }, {
425 'values': ['bot'],
426 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
427 'type': 'GenericSet'
432 }, { 428 }, {
433 'binBoundaries': [1, [1, 1000, 20]], 429 'binBoundaries': [1, [1, 1000, 20]],
434 'diagnostics': { 430 'diagnostics': {
435 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 431 reserved_infos.MASTERS.name:
436 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae' 432 'e9c2891d-2b04-413f-8cf4-099827e67626',
433 reserved_infos.BOTS.name:
434 '53fb5448-9f8d-407a-8891-e7233fe1740f',
435 reserved_infos.BENCHMARKS.name:
436 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
437 }, 437 },
438 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 438 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
439 'name': 'foo', 439 'name': 'foo',
440 'unit': 'count'} 440 'unit': 'count'}
441 ]) 441 ])
442 self.testapp.post('/add_histograms', {'data': data}, status=400) 442 self.testapp.post('/add_histograms', {'data': data}, status=400)
443 443
444 def testPostHistogramFailsWithoutTelemetryInfo(self): 444 def testPostHistogramFailsWithoutBenchmark(self):
445 data = json.dumps([ 445 data = json.dumps([
446 { 446 {
447 'values': [424242], 447 'values': [424242],
448 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 448 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
449 'type': 'GenericSet', 449 'type': 'GenericSet',
450 }, { 450 }, {
451 'buildNumber': 0, 451 'values': ['master'],
452 'buildbotMasterName': '',
453 'buildbotName': '',
454 'displayBotName': 'bot',
455 'displayMasterName': 'master',
456 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 452 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
457 'logUri': '', 453 'type': 'GenericSet'
458 'type': 'BuildbotInfo' 454 }, {
455 'values': ['bot'],
456 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
457 'type': 'GenericSet'
459 }, { 458 }, {
460 'binBoundaries': [1, [1, 1000, 20]], 459 'binBoundaries': [1, [1, 1000, 20]],
461 'diagnostics': { 460 'diagnostics': {
462 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 461 reserved_infos.MASTERS.name:
462 'e9c2891d-2b04-413f-8cf4-099827e67626',
463 reserved_infos.BOTS.name:
464 '53fb5448-9f8d-407a-8891-e7233fe1740f',
463 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 465 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
464 '25f0a111-9bb4-4cea-b0c1-af2609623160' 466 '25f0a111-9bb4-4cea-b0c1-af2609623160'
465 }, 467 },
466 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 468 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
467 'name': 'foo', 469 'name': 'foo',
468 'unit': 'count' 470 'unit': 'count'
469 } 471 }
470 ]) 472 ])
471 self.testapp.post('/add_histograms', {'data': data}, status=400) 473 self.testapp.post('/add_histograms', {'data': data}, status=400)
472 474
473 def testPostHistogram_AddsSparseDiagnosticByName(self): 475 def testPostHistogram_AddsSparseDiagnosticByName(self):
474 data = json.dumps([ 476 data = json.dumps([
475 { 477 {
476 'type': 'GenericSet', 478 'type': 'GenericSet',
477 'guid': 'cabb59fe-4bcf-4512-881c-d038c7a80635', 479 'guid': 'cabb59fe-4bcf-4512-881c-d038c7a80635',
478 'values': ['alice@chromium.org'] 480 'values': ['alice@chromium.org']
479 }, 481 },
480 { 482 {
481 'benchmarkName': 'benchmark', 483 'values': ['benchmark'],
482 'canonicalUrl': '',
483 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 484 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
484 'label': '', 485 'type': 'GenericSet',
485 'legacyTIRLabel': '',
486 'storyDisplayName': 'story',
487 'type': 'TelemetryInfo'
488 }, { 486 }, {
489 'values': [424242], 487 'values': [424242],
490 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 488 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
491 'type': 'GenericSet', 489 'type': 'GenericSet',
492 }, { 490 }, {
493 'buildNumber': 0, 491 'values': ['master'],
494 'buildbotMasterName': '',
495 'buildbotName': 'buildbotmaster1',
496 'displayBotName': 'bot',
497 'displayMasterName': 'master',
498 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 492 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
499 'logUri': '', 493 'type': 'GenericSet'
500 'type': 'BuildbotInfo' 494 }, {
495 'values': ['bot'],
496 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
497 'type': 'GenericSet'
501 }, { 498 }, {
502 'binBoundaries': [1, [1, 1000, 20]], 499 'binBoundaries': [1, [1, 1000, 20]],
503 'diagnostics': { 500 'diagnostics': {
504 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 501 reserved_infos.OWNERS.name:
502 'cabb59fe-4bcf-4512-881c-d038c7a80635',
503 reserved_infos.MASTERS.name:
504 'e9c2891d-2b04-413f-8cf4-099827e67626',
505 reserved_infos.BOTS.name:
506 '53fb5448-9f8d-407a-8891-e7233fe1740f',
505 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 507 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
506 '25f0a111-9bb4-4cea-b0c1-af2609623160', 508 '25f0a111-9bb4-4cea-b0c1-af2609623160',
507 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 509 reserved_infos.BENCHMARKS.name:
508 reserved_infos.OWNERS.name: 510 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
509 'cabb59fe-4bcf-4512-881c-d038c7a80635'
510 }, 511 },
511 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 512 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
512 'name': 'foo', 513 'name': 'foo',
513 'unit': 'count'} 514 'unit': 'count'}
514 ]) 515 ])
515 516
516 self.testapp.post('/add_histograms', {'data': data}) 517 self.testapp.post('/add_histograms', {'data': data})
517 518
518 diagnostics = histogram.SparseDiagnostic.query().fetch() 519 diagnostics = histogram.SparseDiagnostic.query().fetch()
519 params_by_guid = self.TaskParamsByGuid() 520 params_by_guid = self.TaskParamsByGuid()
520 521
521 params = params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0'] 522 params = params_by_guid['4989617a-14d6-4f80-8f75-dafda2ff13b0']
522 hist = json.loads(params['data'][0]) 523 hist = json.loads(params['data'][0])
523 owners_info = hist['diagnostics'][reserved_infos.OWNERS.name] 524 owners_info = hist['diagnostics'][reserved_infos.OWNERS.name]
524 self.assertEqual(2, len(diagnostics)) 525 self.assertEqual(4, len(diagnostics))
525 self.assertEqual(reserved_infos.OWNERS.name, diagnostics[0].name) 526 self.assertEqual(reserved_infos.BENCHMARKS.name, diagnostics[0].name)
526 self.assertEqual(['alice@chromium.org'], diagnostics[0].data['values']) 527 self.assertEqual(reserved_infos.BOTS.name, diagnostics[1].name)
528 self.assertEqual(reserved_infos.OWNERS.name, diagnostics[2].name)
529 self.assertEqual(reserved_infos.MASTERS.name, diagnostics[3].name)
530 self.assertEqual(['benchmark'], diagnostics[0].data['values'])
531 self.assertEqual(['bot'], diagnostics[1].data['values'])
532 self.assertEqual(['alice@chromium.org'], diagnostics[2].data['values'])
533 self.assertEqual(['master'], diagnostics[3].data['values'])
527 self.assertEqual('cabb59fe-4bcf-4512-881c-d038c7a80635', owners_info) 534 self.assertEqual('cabb59fe-4bcf-4512-881c-d038c7a80635', owners_info)
528 535
529 def testPostHistogram_AddsSparseDiagnosticByName_OnlyOnce(self): 536 def testPostHistogram_AddsSparseDiagnosticByName_OnlyOnce(self):
530 data = json.dumps([ 537 data = json.dumps([
531 { 538 {
532 'type': 'GenericSet', 539 'type': 'GenericSet',
533 'guid': 'cabb59fe-4bcf-4512-881c-d038c7a80635', 540 'guid': 'cabb59fe-4bcf-4512-881c-d038c7a80635',
534 'values': ['alice@chromium.org'] 541 'values': ['alice@chromium.org']
535 }, 542 },
536 { 543 {
537 'benchmarkName': 'benchmark', 544 'values': ['benchmark'],
538 'canonicalUrl': '',
539 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 545 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
540 'label': '', 546 'type': 'GenericSet',
541 'legacyTIRLabel': '',
542 'storyDisplayName': 'story',
543 'type': 'TelemetryInfo'
544 }, { 547 }, {
545 'values': [424242], 548 'values': [424242],
546 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 549 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
547 'type': 'GenericSet' 550 'type': 'GenericSet'
548 }, { 551 }, {
549 'buildNumber': 0, 552 'values': ['master'],
550 'buildbotMasterName': '',
551 'buildbotName': 'buildbotmaster1',
552 'displayBotName': 'bot',
553 'displayMasterName': 'master',
554 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 553 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
555 'logUri': '', 554 'type': 'GenericSet'
556 'type': 'BuildbotInfo' 555 }, {
556 'values': ['bot'],
557 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
558 'type': 'GenericSet'
557 }, { 559 }, {
558 'binBoundaries': [1, [1, 1000, 20]], 560 'binBoundaries': [1, [1, 1000, 20]],
559 'diagnostics': { 561 'diagnostics': {
560 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 562 reserved_infos.MASTERS.name:
563 'e9c2891d-2b04-413f-8cf4-099827e67626',
564 reserved_infos.BOTS.name:
565 '53fb5448-9f8d-407a-8891-e7233fe1740f',
561 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 566 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
562 '25f0a111-9bb4-4cea-b0c1-af2609623160', 567 '25f0a111-9bb4-4cea-b0c1-af2609623160',
563 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 568 reserved_infos.BENCHMARKS.name:
569 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
564 reserved_infos.OWNERS.name: 570 reserved_infos.OWNERS.name:
565 'cabb59fe-4bcf-4512-881c-d038c7a80635' 571 'cabb59fe-4bcf-4512-881c-d038c7a80635'
566 }, 572 },
567 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 573 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
568 'name': 'foo', 574 'name': 'foo',
569 'unit': 'count' 575 'unit': 'count'
570 }, { 576 }, {
571 'binBoundaries': [1, [1, 1000, 20]], 577 'binBoundaries': [1, [1, 1000, 20]],
572 'diagnostics': { 578 'diagnostics': {
573 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 579 reserved_infos.MASTERS.name:
580 'e9c2891d-2b04-413f-8cf4-099827e67626',
581 reserved_infos.BOTS.name:
582 '53fb5448-9f8d-407a-8891-e7233fe1740f',
574 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 583 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
575 '25f0a111-9bb4-4cea-b0c1-af2609623160', 584 '25f0a111-9bb4-4cea-b0c1-af2609623160',
576 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
577 reserved_infos.OWNERS.name: 585 reserved_infos.OWNERS.name:
578 'cabb59fe-4bcf-4512-881c-d038c7a80635' 586 'cabb59fe-4bcf-4512-881c-d038c7a80635',
587 reserved_infos.BENCHMARKS.name:
588 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
579 }, 589 },
580 'guid': '5239617a-14d6-4f80-8f75-dafda2ff13b1', 590 'guid': '5239617a-14d6-4f80-8f75-dafda2ff13b1',
581 'name': 'bar', 591 'name': 'bar',
582 'unit': 'count' 592 'unit': 'count'
583 }]) 593 }])
584 594
585 self.testapp.post('/add_histograms', {'data': data}) 595 self.testapp.post('/add_histograms', {'data': data})
586 596
587 diagnostics = histogram.SparseDiagnostic.query().fetch() 597 diagnostics = histogram.SparseDiagnostic.query().fetch()
588 598
589 self.assertEqual(2, len(diagnostics)) 599 self.assertEqual(4, len(diagnostics))
590 self.assertEqual(reserved_infos.OWNERS.name, diagnostics[0].name) 600 self.assertEqual(reserved_infos.BOTS.name, diagnostics[1].name)
591 self.assertNotEqual(reserved_infos.OWNERS.name, diagnostics[1].name) 601 self.assertNotEqual(reserved_infos.BOTS.name, diagnostics[0].name)
592 602
593 def testPostHistogram_AddsSparseDiagnosticByName_ErrorsIfDiverging(self): 603 def testPostHistogram_AddsSparseDiagnosticByName_ErrorsIfDiverging(self):
594 data = json.dumps([ 604 data = json.dumps([
595 { 605 {
596 'type': 'GenericSet', 606 'type': 'GenericSet',
597 'guid': 'cabb59fe-4bcf-4512-881c-d038c7a80635', 607 'guid': 'cabb59fe-4bcf-4512-881c-d038c7a80635',
598 'values': ['alice@chromium.org'] 608 'values': ['alice@chromium.org']
599 }, { 609 }, {
600 'type': 'GenericSet', 610 'type': 'GenericSet',
601 'guid': '7c5bd92f-4146-411b-9192-248ffc1be92c', 611 'guid': '7c5bd92f-4146-411b-9192-248ffc1be92c',
602 'values': ['bob@chromium.org'] 612 'values': ['bob@chromium.org']
603 }, { 613 }, {
604 'benchmarkName': 'benchmark', 614 'values': ['benchmark'],
605 'canonicalUrl': '',
606 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 615 'guid': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
607 'label': '', 616 'type': 'GenericSet'
608 'legacyTIRLabel': '',
609 'storyDisplayName': 'story',
610 'type': 'TelemetryInfo'
611 }, { 617 }, {
612 'values': [424242], 618 'values': [424242],
613 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160', 619 'guid': '25f0a111-9bb4-4cea-b0c1-af2609623160',
614 'type': 'GenericSet' 620 'type': 'GenericSet'
615 }, { 621 }, {
616 'buildNumber': 0, 622 'values': ['master'],
617 'buildbotMasterName': '',
618 'buildbotName': 'buildbotmaster1',
619 'displayBotName': 'bot',
620 'displayMasterName': 'master',
621 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 623 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
622 'logUri': '', 624 'type': 'GenericSet'
623 'type': 'BuildbotInfo' 625 }, {
626 'values': ['bot'],
627 'guid': '53fb5448-9f8d-407a-8891-e7233fe1740f',
628 'type': 'GenericSet'
624 }, { 629 }, {
625 'binBoundaries': [1, [1, 1000, 20]], 630 'binBoundaries': [1, [1, 1000, 20]],
626 'diagnostics': { 631 'diagnostics': {
627 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 632 reserved_infos.MASTERS.name:
633 'e9c2891d-2b04-413f-8cf4-099827e67626',
634 reserved_infos.BOTS.name:
635 '53fb5448-9f8d-407a-8891-e7233fe1740f',
628 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 636 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
629 '25f0a111-9bb4-4cea-b0c1-af2609623160', 637 '25f0a111-9bb4-4cea-b0c1-af2609623160',
630 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 638 reserved_infos.BENCHMARKS.name:
639 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
631 reserved_infos.OWNERS.name: 640 reserved_infos.OWNERS.name:
632 'cabb59fe-4bcf-4512-881c-d038c7a80635' 641 'cabb59fe-4bcf-4512-881c-d038c7a80635'
633 }, 642 },
634 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0', 643 'guid': '4989617a-14d6-4f80-8f75-dafda2ff13b0',
635 'name': 'foo', 644 'name': 'foo',
636 'unit': 'count' 645 'unit': 'count'
637 }, { 646 }, {
638 'binBoundaries': [1, [1, 1000, 20]], 647 'binBoundaries': [1, [1, 1000, 20]],
639 'diagnostics': { 648 'diagnostics': {
640 'buildbot': 'e9c2891d-2b04-413f-8cf4-099827e67626', 649 reserved_infos.MASTERS.name:
650 'e9c2891d-2b04-413f-8cf4-099827e67626',
651 reserved_infos.BOTS.name:
652 '53fb5448-9f8d-407a-8891-e7233fe1740f',
641 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name: 653 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name:
642 '25f0a111-9bb4-4cea-b0c1-af2609623160', 654 '25f0a111-9bb4-4cea-b0c1-af2609623160',
643 'telemetry': '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae', 655 reserved_infos.BENCHMARKS.name:
656 '0bc1021b-8107-4db7-bc8c-49d7cf53c5ae',
644 reserved_infos.OWNERS.name: 657 reserved_infos.OWNERS.name:
645 '7c5bd92f-4146-411b-9192-248ffc1be92c' 658 '7c5bd92f-4146-411b-9192-248ffc1be92c'
646 }, 659 },
647 'guid': 'bda61ae3-0178-43f8-8aec-3ab78b9a2e18', 660 'guid': 'bda61ae3-0178-43f8-8aec-3ab78b9a2e18',
648 'name': 'foo', 661 'name': 'foo',
649 'unit': 'count' 662 'unit': 'count'
650 }]) 663 }])
651 664
652 self.assertRaises( 665 self.assertRaises(
653 Exception, 666 Exception,
654 self.testapp.post, '/add_histograms', {'data': data}) 667 self.testapp.post, '/add_histograms', {'data': data})
655 668
656 def testFindHistogramLevelSparseDiagnostics(self): 669 def testFindHistogramLevelSparseDiagnostics(self):
657 hist = histogram_module.Histogram('hist', 'count') 670 hist = histogram_module.Histogram('hist', 'count')
658 histograms = histogram_set.HistogramSet([hist]) 671 histograms = histogram_set.HistogramSet([hist])
659 histograms.AddSharedDiagnostic('foo', histogram_module.GenericSet(['bar'])) 672 histograms.AddSharedDiagnostic('foo', histogram_module.GenericSet(['bar']))
660 histograms.AddSharedDiagnostic( 673 histograms.AddSharedDiagnostic(
661 'telemetry', histogram_module.TelemetryInfo()) 674 reserved_infos.GPUS.name,
675 histogram_module.GenericSet([]))
662 diagnostics = add_histograms.FindHistogramLevelSparseDiagnostics( 676 diagnostics = add_histograms.FindHistogramLevelSparseDiagnostics(
663 hist.guid, histograms) 677 hist.guid, histograms)
664 678
665 self.assertEqual(1, len(diagnostics)) 679 self.assertEqual(1, len(diagnostics))
666 self.assertIsInstance(diagnostics[0], histogram_module.TelemetryInfo) 680 self.assertIsInstance(diagnostics[0], histogram_module.GenericSet)
667 681
668 def testComputeTestPathWithStory(self): 682 def testComputeTestPathWithStory(self):
669 hist = histogram_module.Histogram('hist', 'count') 683 hist = histogram_module.Histogram('hist', 'count')
670 histograms = histogram_set.HistogramSet([hist]) 684 histograms = histogram_set.HistogramSet([hist])
671 telemetry_info = histogram_module.TelemetryInfo() 685 histograms.AddSharedDiagnostic(
672 telemetry_info.AddInfo({ 686 reserved_infos.MASTERS.name,
673 'storyDisplayName': 'story', 687 histogram_module.GenericSet(['master']))
674 'benchmarkName': 'benchmark' 688 histograms.AddSharedDiagnostic(
675 }) 689 reserved_infos.BOTS.name,
676 histograms.AddSharedDiagnostic('telemetry', telemetry_info) 690 histogram_module.GenericSet(['bot']))
677 buildbot_info = histogram_module.BuildbotInfo({ 691 histograms.AddSharedDiagnostic(
678 'displayMasterName': 'master', 692 reserved_infos.BENCHMARKS.name,
679 'displayBotName': 'bot' 693 histogram_module.GenericSet(['benchmark']))
680 }) 694 histograms.AddSharedDiagnostic(
681 histograms.AddSharedDiagnostic('buildbot', buildbot_info) 695 reserved_infos.STORIES.name,
696 histogram_module.GenericSet(['story']))
682 hist = histograms.GetFirstHistogram() 697 hist = histograms.GetFirstHistogram()
683 test_path = add_histograms.ComputeTestPath(hist.guid, histograms) 698 test_path = add_histograms.ComputeTestPath(hist.guid, histograms)
684 self.assertEqual('master/bot/benchmark/hist/story', test_path) 699 self.assertEqual('master/bot/benchmark/hist/story', test_path)
685 700
686 def testComputeTestPathWithoutStory(self): 701 def testComputeTestPathWithoutStory(self):
687 hist = histogram_module.Histogram('hist', 'count') 702 hist = histogram_module.Histogram('hist', 'count')
688 histograms = histogram_set.HistogramSet([hist]) 703 histograms = histogram_set.HistogramSet([hist])
689 telemetry_info = histogram_module.TelemetryInfo() 704 histograms.AddSharedDiagnostic(
690 telemetry_info.AddInfo({ 705 reserved_infos.MASTERS.name,
691 'benchmarkName': 'benchmark' 706 histogram_module.GenericSet(['master']))
692 }) 707 histograms.AddSharedDiagnostic(
693 histograms.AddSharedDiagnostic('telemetry', telemetry_info) 708 reserved_infos.BOTS.name,
694 buildbot_info = histogram_module.BuildbotInfo({ 709 histogram_module.GenericSet(['bot']))
695 'displayMasterName': 'master', 710 histograms.AddSharedDiagnostic(
696 'displayBotName': 'bot' 711 reserved_infos.BENCHMARKS.name,
697 }) 712 histogram_module.GenericSet(['benchmark']))
698 histograms.AddSharedDiagnostic('buildbot', buildbot_info)
699 hist = histograms.GetFirstHistogram() 713 hist = histograms.GetFirstHistogram()
700 test_path = add_histograms.ComputeTestPath(hist.guid, histograms) 714 test_path = add_histograms.ComputeTestPath(hist.guid, histograms)
701 self.assertEqual('master/bot/benchmark/hist', test_path) 715 self.assertEqual('master/bot/benchmark/hist', test_path)
702 716
703 def testComputeRevision(self): 717 def testComputeRevision(self):
704 hist = histogram_module.Histogram('hist', 'count') 718 hist = histogram_module.Histogram('hist', 'count')
705 histograms = histogram_set.HistogramSet([hist]) 719 histograms = histogram_set.HistogramSet([hist])
706 chromium_commit = histogram_module.GenericSet([424242]) 720 chromium_commit = histogram_module.GenericSet([424242])
707 histograms.AddSharedDiagnostic( 721 histograms.AddSharedDiagnostic(
708 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name, chromium_commit) 722 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name, chromium_commit)
709 self.assertEqual(424242, add_histograms.ComputeRevision(histograms)) 723 self.assertEqual(424242, add_histograms.ComputeRevision(histograms))
710 724
711 def testComputeRevision_RaisesOnError(self): 725 def testComputeRevision_RaisesOnError(self):
712 hist = histogram_module.Histogram('hist', 'count') 726 hist = histogram_module.Histogram('hist', 'count')
713 histograms = histogram_set.HistogramSet([hist]) 727 histograms = histogram_set.HistogramSet([hist])
714 chromium_commit = histogram_module.GenericSet([424242, 0]) 728 chromium_commit = histogram_module.GenericSet([424242, 0])
715 histograms.AddSharedDiagnostic( 729 histograms.AddSharedDiagnostic(
716 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name, chromium_commit) 730 reserved_infos.CHROMIUM_COMMIT_POSITIONS.name, chromium_commit)
717 with self.assertRaises(api_request_handler.BadRequestError): 731 with self.assertRaises(api_request_handler.BadRequestError):
718 add_histograms.ComputeRevision(histograms) 732 add_histograms.ComputeRevision(histograms)
719 733
720 def testSparseDiagnosticsAreNotInlined(self): 734 def testSparseDiagnosticsAreNotInlined(self):
721 hist = histogram_module.Histogram('hist', 'count') 735 hist = histogram_module.Histogram('hist', 'count')
722 histograms = histogram_set.HistogramSet([hist]) 736 histograms = histogram_set.HistogramSet([hist])
723 histograms.AddSharedDiagnostic('foo', histogram_module.BuildbotInfo({ 737 histograms.AddSharedDiagnostic(
724 'displayMasterName': 'dmn', 738 reserved_infos.BENCHMARKS.name,
725 'displayBotName': 'dbn', 739 histogram_module.GenericSet(['benchmark']))
726 'buildbotMasterName': 'bbmn',
727 'buildbotName': 'bbn',
728 'buildNumber': 42,
729 'logUri': 'uri',
730 }))
731 add_histograms.InlineDenseSharedDiagnostics(histograms) 740 add_histograms.InlineDenseSharedDiagnostics(histograms)
732 self.assertTrue(hist.diagnostics['foo'].has_guid) 741 self.assertTrue(hist.diagnostics[reserved_infos.BENCHMARKS.name].has_guid)
733 742
734 def testDeduplicateAndPut_Same(self): 743 def testDeduplicateAndPut_Same(self):
735 d = { 744 d = {
736 'buildNumber': 0, 745 'values': ['master'],
737 'buildbotMasterName': '',
738 'buildbotName': '',
739 'displayBotName': 'bot',
740 'displayMasterName': 'master',
741 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 746 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
742 'logUri': '', 747 'type': 'GenericSet'
743 'type': 'BuildbotInfo'
744 } 748 }
745 test_key = utils.TestKey('Chromium/win7/foo') 749 test_key = utils.TestKey('Chromium/win7/foo')
746 entity = histogram.SparseDiagnostic( 750 entity = histogram.SparseDiagnostic(
747 data=d, test=test_key, start_revision=1, 751 data=d, test=test_key, start_revision=1,
748 end_revision=sys.maxint, id='abc') 752 end_revision=sys.maxint, id='abc')
749 entity.put() 753 entity.put()
750 d2 = d.copy() 754 d2 = d.copy()
751 d2['guid'] = 'def' 755 d2['guid'] = 'def'
752 entity2 = histogram.SparseDiagnostic( 756 entity2 = histogram.SparseDiagnostic(
753 data=d2, test=test_key, 757 data=d2, test=test_key,
754 start_revision=2, end_revision=sys.maxint, id='def') 758 start_revision=2, end_revision=sys.maxint, id='def')
755 add_histograms.DeduplicateAndPut([entity2], test_key, 2) 759 add_histograms.DeduplicateAndPut([entity2], test_key, 2)
756 sparse = histogram.SparseDiagnostic.query().fetch() 760 sparse = histogram.SparseDiagnostic.query().fetch()
757 self.assertEqual(1, len(sparse)) 761 self.assertEqual(2, len(sparse))
758 762
759 def testDeduplicateAndPut_Different(self): 763 def testDeduplicateAndPut_Different(self):
760 d = { 764 d = {
761 'buildNumber': 0, 765 'values': ['master'],
762 'buildbotMasterName': '',
763 'buildbotName': '',
764 'displayBotName': 'bot',
765 'displayMasterName': 'master',
766 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 766 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
767 'logUri': '', 767 'type': 'GenericSet'
768 'type': 'BuildbotInfo'
769 } 768 }
770 test_key = utils.TestKey('Chromium/win7/foo') 769 test_key = utils.TestKey('Chromium/win7/foo')
771 entity = histogram.SparseDiagnostic( 770 entity = histogram.SparseDiagnostic(
772 data=d, test=test_key, start_revision=1, 771 data=d, test=test_key, start_revision=1,
773 end_revision=sys.maxint, id='abc') 772 end_revision=sys.maxint, id='abc')
774 entity.put() 773 entity.put()
775 d2 = d.copy() 774 d2 = d.copy()
776 d2['guid'] = 'def' 775 d2['guid'] = 'def'
777 d2['displayBotName'] = 'mac' 776 d2['displayBotName'] = 'mac'
778 entity2 = histogram.SparseDiagnostic( 777 entity2 = histogram.SparseDiagnostic(
779 data=d2, test=test_key, 778 data=d2, test=test_key,
780 start_revision=1, end_revision=sys.maxint, id='def') 779 start_revision=1, end_revision=sys.maxint, id='def')
781 add_histograms.DeduplicateAndPut([entity2], test_key, 2) 780 add_histograms.DeduplicateAndPut([entity2], test_key, 2)
782 sparse = histogram.SparseDiagnostic.query().fetch() 781 sparse = histogram.SparseDiagnostic.query().fetch()
783 self.assertEqual(2, len(sparse)) 782 self.assertEqual(2, len(sparse))
784 783
785 def testDeduplicateAndPut_New(self): 784 def testDeduplicateAndPut_New(self):
786 d = { 785 d = {
787 'buildNumber': 0, 786 'values': ['master'],
788 'buildbotMasterName': '',
789 'buildbotName': '',
790 'displayBotName': 'bot',
791 'displayMasterName': 'master',
792 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626', 787 'guid': 'e9c2891d-2b04-413f-8cf4-099827e67626',
793 'logUri': '', 788 'type': 'GenericSet'
794 'type': 'BuildbotInfo'
795 } 789 }
796 test_key = utils.TestKey('Chromium/win7/foo') 790 test_key = utils.TestKey('Chromium/win7/foo')
797 entity = histogram.SparseDiagnostic( 791 entity = histogram.SparseDiagnostic(
798 data=d, test=test_key, start_revision=1, 792 data=d, test=test_key, start_revision=1,
799 end_revision=sys.maxint, id='abc') 793 end_revision=sys.maxint, id='abc')
800 entity.put() 794 entity.put()
801 add_histograms.DeduplicateAndPut([entity], test_key, 1) 795 add_histograms.DeduplicateAndPut([entity], test_key, 1)
802 sparse = histogram.SparseDiagnostic.query().fetch() 796 sparse = histogram.SparseDiagnostic.query().fetch()
803 self.assertEqual(1, len(sparse)) 797 self.assertEqual(1, len(sparse))
OLDNEW
« no previous file with comments | « dashboard/dashboard/add_histograms_queue_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698