| OLD | NEW |
| 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 json | 5 import json |
| 6 import unittest | 6 import unittest |
| 7 | 7 |
| 8 import mock | 8 import mock |
| 9 | 9 |
| 10 from dashboard.pinpoint.models.quest import read_value | 10 from dashboard.pinpoint.models.quest import read_value |
| 11 | 11 |
| 12 | 12 |
| 13 class _ReadValueTest(unittest.TestCase): | 13 class _ReadValueTest(unittest.TestCase): |
| 14 | 14 |
| 15 def assertReadValueError(self, execution): | 15 def assertReadValueError(self, execution): |
| 16 self.assertTrue(execution.completed) | 16 self.assertTrue(execution.completed) |
| 17 self.assertTrue(execution.failed) | 17 self.assertTrue(execution.failed) |
| 18 self.assertIsInstance(execution.exception, basestring) | 18 self.assertIsInstance(execution.exception, basestring) |
| 19 last_exception_line = execution.exception.splitlines()[-1] | 19 last_exception_line = execution.exception.splitlines()[-1] |
| 20 self.assertTrue(last_exception_line.startswith('ReadValueError')) | 20 self.assertTrue(last_exception_line.startswith('ReadValueError')) |
| 21 | 21 |
| 22 | 22 |
| 23 @mock.patch('dashboard.services.isolate_service.Retrieve') | 23 @mock.patch('dashboard.services.isolate_service.Retrieve') |
| 24 class ReadChartJsonValueTest(_ReadValueTest): | 24 class ReadChartJsonValueTest(_ReadValueTest): |
| 25 | 25 |
| 26 def testReadChartJsonValue(self, retrieve): | 26 def testReadChartJsonValue(self, retrieve): |
| 27 retrieve.side_effect = ( | 27 retrieve.side_effect = ( |
| 28 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, | 28 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, |
| 29 json.dumps({'charts': {'tir_label@@chart': {'trace': { | 29 json.dumps({'charts': { |
| 30 'type': 'list_of_scalar_values', | 30 'tir_label@@chart': {'trace name': { |
| 31 'values': [0, 1, 2], | 31 'type': 'list_of_scalar_values', |
| 32 }}}}), | 32 'values': [0, 1, 2], |
| 33 }}, |
| 34 'trace': {'trace name': {'cloud_url': 'trace url'}}, |
| 35 }}), |
| 33 ) | 36 ) |
| 34 | 37 |
| 35 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace') | 38 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace name') |
| 36 execution = quest.Start(None, 'output hash') | 39 execution = quest.Start(None, 'output hash') |
| 37 execution.Poll() | 40 execution.Poll() |
| 38 | 41 |
| 39 self.assertTrue(execution.completed) | 42 self.assertTrue(execution.completed) |
| 40 self.assertFalse(execution.failed) | 43 self.assertFalse(execution.failed) |
| 41 self.assertEqual(execution.result_values, (0, 1, 2)) | 44 self.assertEqual(execution.result_values, (0, 1, 2)) |
| 42 self.assertEqual(execution.result_arguments, {}) | 45 self.assertEqual(execution.result_arguments, {}) |
| 43 | 46 |
| 44 expected_calls = [mock.call('output hash'), mock.call('chartjson hash')] | 47 expected_calls = [mock.call('output hash'), mock.call('chartjson hash')] |
| 45 self.assertEqual(retrieve.mock_calls, expected_calls) | 48 self.assertEqual(retrieve.mock_calls, expected_calls) |
| 46 | 49 |
| 47 def testReadChartJsonValueWithNoTirLabel(self, retrieve): | 50 def testReadChartJsonValueWithNoTirLabel(self, retrieve): |
| 48 retrieve.side_effect = ( | 51 retrieve.side_effect = ( |
| 49 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, | 52 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, |
| 50 json.dumps({'charts': {'chart': {'trace': { | 53 json.dumps({'charts': { |
| 51 'type': 'list_of_scalar_values', | 54 'chart': {'trace name': { |
| 52 'values': [0, 1, 2], | 55 'type': 'list_of_scalar_values', |
| 53 }}}}), | 56 'values': [0, 1, 2], |
| 57 }}, |
| 58 'trace': {'trace name': {'cloud_url': 'trace url'}}, |
| 59 }}), |
| 54 ) | 60 ) |
| 55 | 61 |
| 56 quest = read_value.ReadChartJsonValue('chart', None, 'trace') | 62 quest = read_value.ReadChartJsonValue('chart', None, 'trace name') |
| 57 execution = quest.Start(None, 'output hash') | 63 execution = quest.Start(None, 'output hash') |
| 58 execution.Poll() | 64 execution.Poll() |
| 59 | 65 |
| 60 self.assertTrue(execution.completed) | 66 self.assertTrue(execution.completed) |
| 61 self.assertFalse(execution.failed) | 67 self.assertFalse(execution.failed) |
| 62 self.assertEqual(execution.result_values, (0, 1, 2)) | 68 self.assertEqual(execution.result_values, (0, 1, 2)) |
| 63 self.assertEqual(execution.result_arguments, {}) | 69 self.assertEqual(execution.result_arguments, {}) |
| 64 | 70 |
| 65 expected_calls = [mock.call('output hash'), mock.call('chartjson hash')] | 71 expected_calls = [mock.call('output hash'), mock.call('chartjson hash')] |
| 66 self.assertEqual(retrieve.mock_calls, expected_calls) | 72 self.assertEqual(retrieve.mock_calls, expected_calls) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 self.assertFalse(execution.failed) | 121 self.assertFalse(execution.failed) |
| 116 self.assertEqual(execution.result_values, (0, 1, 2)) | 122 self.assertEqual(execution.result_values, (0, 1, 2)) |
| 117 self.assertEqual(execution.result_arguments, {}) | 123 self.assertEqual(execution.result_arguments, {}) |
| 118 | 124 |
| 119 expected_calls = [mock.call('output hash'), mock.call('chartjson hash')] | 125 expected_calls = [mock.call('output hash'), mock.call('chartjson hash')] |
| 120 self.assertEqual(retrieve.mock_calls, expected_calls) | 126 self.assertEqual(retrieve.mock_calls, expected_calls) |
| 121 | 127 |
| 122 def testHistogram(self, retrieve): | 128 def testHistogram(self, retrieve): |
| 123 retrieve.side_effect = ( | 129 retrieve.side_effect = ( |
| 124 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, | 130 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, |
| 125 json.dumps({'charts': {'tir_label@@chart': {'trace': { | 131 json.dumps({'charts': { |
| 126 'type': 'histogram', | 132 'tir_label@@chart': {'trace name': { |
| 127 'buckets': [ | 133 'type': 'histogram', |
| 128 {'low': 0, 'count': 2}, | 134 'buckets': [ |
| 129 {'low': 0, 'high': 2, 'count': 3}, | 135 {'low': 0, 'count': 2}, |
| 130 ], | 136 {'low': 0, 'high': 2, 'count': 3}, |
| 131 }}}}), | 137 ], |
| 138 }}, |
| 139 'trace': {'trace name': {'cloud_url': 'trace url'}}, |
| 140 }}), |
| 132 ) | 141 ) |
| 133 | 142 |
| 134 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace') | 143 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace name') |
| 135 execution = quest.Start(None, 'output hash') | 144 execution = quest.Start(None, 'output hash') |
| 136 execution.Poll() | 145 execution.Poll() |
| 137 | 146 |
| 138 self.assertEqual(execution.result_values, (0, 0, 1, 1, 1)) | 147 self.assertEqual(execution.result_values, (0, 0, 1, 1, 1)) |
| 139 | 148 |
| 140 def testHistogramWithLargeSample(self, retrieve): | 149 def testHistogramWithLargeSample(self, retrieve): |
| 141 retrieve.side_effect = ( | 150 retrieve.side_effect = ( |
| 142 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, | 151 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, |
| 143 json.dumps({'charts': {'tir_label@@chart': {'trace': { | 152 json.dumps({'charts': { |
| 144 'type': 'histogram', | 153 'tir_label@@chart': {'trace name': { |
| 145 'buckets': [ | 154 'type': 'histogram', |
| 146 {'low': 0, 'count': 20000}, | 155 'buckets': [ |
| 147 {'low': 0, 'high': 2, 'count': 30000}, | 156 {'low': 0, 'count': 20000}, |
| 148 ], | 157 {'low': 0, 'high': 2, 'count': 30000}, |
| 149 }}}}), | 158 ], |
| 159 }}, |
| 160 'trace': {'trace name': {'cloud_url': 'trace url'}}, |
| 161 }}), |
| 150 ) | 162 ) |
| 151 | 163 |
| 152 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace') | 164 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace name') |
| 153 execution = quest.Start(None, 'output hash') | 165 execution = quest.Start(None, 'output hash') |
| 154 execution.Poll() | 166 execution.Poll() |
| 155 | 167 |
| 156 self.assertEqual(execution.result_values, tuple([0] * 4000 + [1] * 6000)) | 168 self.assertEqual(execution.result_values, tuple([0] * 4000 + [1] * 6000)) |
| 157 | 169 |
| 158 def testScalar(self, retrieve): | 170 def testScalar(self, retrieve): |
| 159 retrieve.side_effect = ( | 171 retrieve.side_effect = ( |
| 160 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, | 172 {'files': {'chartjson-output.json': {'h': 'chartjson hash'}}}, |
| 161 json.dumps({'charts': {'tir_label@@chart': {'trace': { | 173 json.dumps({'charts': { |
| 162 'type': 'scalar', | 174 'tir_label@@chart': {'trace name': { |
| 163 'value': 2.5, | 175 'type': 'scalar', |
| 164 }}}}), | 176 'value': 2.5, |
| 177 }}, |
| 178 'trace': {'trace name': {'cloud_url': 'trace url'}}, |
| 179 }}), |
| 165 ) | 180 ) |
| 166 | 181 |
| 167 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace') | 182 quest = read_value.ReadChartJsonValue('chart', 'tir_label', 'trace name') |
| 168 execution = quest.Start(None, 'output hash') | 183 execution = quest.Start(None, 'output hash') |
| 169 execution.Poll() | 184 execution.Poll() |
| 170 | 185 |
| 171 self.assertEqual(execution.result_values, (2.5,)) | 186 self.assertEqual(execution.result_values, (2.5,)) |
| 172 | 187 |
| 173 | 188 |
| 174 @mock.patch('dashboard.services.isolate_service.Retrieve') | 189 @mock.patch('dashboard.services.isolate_service.Retrieve') |
| 175 class ReadGraphJsonValueTest(_ReadValueTest): | 190 class ReadGraphJsonValueTest(_ReadValueTest): |
| 176 | 191 |
| 177 def testReadGraphJsonValue(self, retrieve): | 192 def testReadGraphJsonValue(self, retrieve): |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 retrieve.side_effect = ( | 232 retrieve.side_effect = ( |
| 218 {'files': {'chartjson-output.json': {'h': 'graphjson hash'}}}, | 233 {'files': {'chartjson-output.json': {'h': 'graphjson hash'}}}, |
| 219 json.dumps({'chart': {'traces': {}}}), | 234 json.dumps({'chart': {'traces': {}}}), |
| 220 ) | 235 ) |
| 221 | 236 |
| 222 quest = read_value.ReadGraphJsonValue('metric', 'test') | 237 quest = read_value.ReadGraphJsonValue('metric', 'test') |
| 223 execution = quest.Start(None, 'output hash') | 238 execution = quest.Start(None, 'output hash') |
| 224 execution.Poll() | 239 execution.Poll() |
| 225 | 240 |
| 226 self.assertReadValueError(execution) | 241 self.assertReadValueError(execution) |
| OLD | NEW |