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

Side by Side Diff: infra_libs/ts_mon/common/test/metric_store_test.py

Issue 1531573003: Handle multiple modifications to distribution metrics correctly. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Add a missing test for coverage Created 5 years 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 | « infra_libs/ts_mon/common/metrics.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 2015 The Chromium Authors. All rights reserved. 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 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 functools 5 import functools
6 import operator 6 import operator
7 import time 7 import time
8 import unittest 8 import unittest
9 9
10 import mock 10 import mock
11 11
12 from infra_libs.ts_mon.common import errors 12 from infra_libs.ts_mon.common import errors
13 from infra_libs.ts_mon.common import metric_store 13 from infra_libs.ts_mon.common import metric_store
14 from infra_libs.ts_mon.common import metrics 14 from infra_libs.ts_mon.common import metrics
15 from infra_libs.ts_mon.common.test import stubs 15 from infra_libs.ts_mon.common.test import stubs
16 16
17 17
18 class DefaultModifyFnTest(unittest.TestCase):
19 def test_adds(self):
20 fn = metric_store.default_modify_fn('foo')
21 self.assertEquals(5, fn(2, 3))
22 self.assertEquals(5, fn(3, 2))
23
24 def test_negative(self):
25 fn = metric_store.default_modify_fn('foo')
26 with self.assertRaises(errors.MonitoringDecreasingValueError) as cm:
27 fn(2, -1)
28 self.assertIn('"foo"', str(cm.exception))
29
30
18 class MetricStoreTestBase(object): 31 class MetricStoreTestBase(object):
19 """Abstract base class for testing MetricStore implementations. 32 """Abstract base class for testing MetricStore implementations.
20 33
21 This class doesn't inherit from unittest.TestCase to prevent it from being 34 This class doesn't inherit from unittest.TestCase to prevent it from being
22 run automatically by expect_tests. 35 run automatically by expect_tests.
23 36
24 Your subclass should inherit from this and unittest.TestCase, and set 37 Your subclass should inherit from this and unittest.TestCase, and set
25 METRIC_STORE_CLASS to the implementation you want to test. See 38 METRIC_STORE_CLASS to the implementation you want to test. See
26 InProcessMetricStoreTest in this file for an example. 39 InProcessMetricStoreTest in this file for an example.
27 """ 40 """
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 self.store.set('foo', (('field', 'value'),), 42) 139 self.store.set('foo', (('field', 'value'),), 42)
127 self.store.reset_for_unittest(name='bar') 140 self.store.reset_for_unittest(name='bar')
128 self.assertEquals(42, self.store.get('foo', (('field', 'value'),))) 141 self.assertEquals(42, self.store.get('foo', (('field', 'value'),)))
129 142
130 self.store.reset_for_unittest(name='foo') 143 self.store.reset_for_unittest(name='foo')
131 self.assertIsNone(self.store.get('foo', (('field', 'value'),))) 144 self.assertIsNone(self.store.get('foo', (('field', 'value'),)))
132 145
133 146
134 class InProcessMetricStoreTest(MetricStoreTestBase, unittest.TestCase): 147 class InProcessMetricStoreTest(MetricStoreTestBase, unittest.TestCase):
135 METRIC_STORE_CLASS = metric_store.InProcessMetricStore 148 METRIC_STORE_CLASS = metric_store.InProcessMetricStore
136
137
138 class CombineModificationsTest(unittest.TestCase):
139 def test_set_set(self):
140 self.assertEqual(
141 metric_store.Modification('two', (), 'set', (2, False)),
142 metric_store.combine_modifications(
143 metric_store.Modification('one', (), 'set', (1, False)),
144 metric_store.Modification('two', (), 'set', (2, False))))
145
146 def test_set_incr(self):
147 self.assertEqual(
148 metric_store.Modification('one', (), 'set', (3, False)),
149 metric_store.combine_modifications(
150 metric_store.Modification('one', (), 'set', (1, False)),
151 metric_store.Modification('two', (), 'incr', (2, operator.add))))
152
153 def test_incr_set(self):
154 self.assertEqual(
155 metric_store.Modification('two', (), 'set', (2, False)),
156 metric_store.combine_modifications(
157 metric_store.Modification('one', (), 'incr', (1, operator.add)),
158 metric_store.Modification('two', (), 'set', (2, False))))
159
160 def test_incr_incr(self):
161 self.assertEqual(
162 metric_store.Modification('one', (), 'incr', (3, operator.add)),
163 metric_store.combine_modifications(
164 metric_store.Modification('one', (), 'incr', (1, operator.add)),
165 metric_store.Modification('two', (), 'incr', (2, operator.add))))
166
167 def test_none_set(self):
168 self.assertEqual(
169 metric_store.Modification('two', (), 'set', (2, False)),
170 metric_store.combine_modifications(
171 None,
172 metric_store.Modification('two', (), 'set', (2, False))))
173
174 def test_none_incr(self):
175 self.assertEqual(
176 metric_store.Modification('two', (), 'incr', (2, operator.add)),
177 metric_store.combine_modifications(
178 None,
179 metric_store.Modification('two', (), 'incr', (2, operator.add))))
180
181 def test_bad_type(self):
182 with self.assertRaises(errors.UnknownModificationTypeError):
183 metric_store.combine_modifications(
184 metric_store.Modification('one', (), 'set', (1, False)),
185 metric_store.Modification('two', (), 'bad', (2, False)))
OLDNEW
« no previous file with comments | « infra_libs/ts_mon/common/metrics.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698