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

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

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 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
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 import functools
6 import operator
7 import time
8 import unittest
9
10 import mock
11
12 from infra_libs.ts_mon.common import interface
13 from infra_libs.ts_mon.common import errors
14 from infra_libs.ts_mon.common import metric_store
15 from infra_libs.ts_mon.common import metrics
16 from infra_libs.ts_mon.common import targets
17 from infra_libs.ts_mon.common.test import stubs
18
19
20 class DefaultModifyFnTest(unittest.TestCase):
21 def test_adds(self):
22 fn = metric_store.default_modify_fn('foo')
23 self.assertEquals(5, fn(2, 3))
24 self.assertEquals(5, fn(3, 2))
25
26 def test_negative(self):
27 fn = metric_store.default_modify_fn('foo')
28 with self.assertRaises(errors.MonitoringDecreasingValueError) as cm:
29 fn(2, -1)
30 self.assertIn('"foo"', str(cm.exception))
31
32
33 class MetricFieldsValuesTest(unittest.TestCase):
34 def test_iteritems(self):
35 mfv = metric_store.MetricFieldsValues()
36 fields = (('field', 'value'),)
37 mfv.set_value(fields, 84)
38 self.assertEqual([(fields, 84)], list(mfv.iteritems()))
39
40
41 class MetricStoreTestBase(object):
42 """Abstract base class for testing MetricStore implementations.
43
44 This class doesn't inherit from unittest.TestCase to prevent it from being
45 run automatically by expect_tests.
46
47 Your subclass should inherit from this and unittest.TestCase, and set
48 METRIC_STORE_CLASS to the implementation you want to test. See
49 InProcessMetricStoreTest in this file for an example.
50 """
51
52 METRIC_STORE_CLASS = None
53
54 def setUp(self):
55 super(MetricStoreTestBase, self).setUp()
56
57 self.mock_time = mock.create_autospec(time.time, spec_set=True)
58 self.mock_time.return_value = 1234
59
60 target = targets.TaskTarget(
61 'test_service', 'test_job', 'test_region', 'test_host')
62 self.state = interface.State(store_ctor=self.create_store, target=target)
63 mock.patch('infra_libs.ts_mon.common.interface.state',
64 new=self.state).start()
65
66 self.store = self.state.store
67
68 self.metric = metrics.Metric('foo')
69
70 def create_store(self, *args, **kwargs):
71 kwargs['time_fn'] = self.mock_time
72 return self.METRIC_STORE_CLASS(*args, **kwargs)
73
74 def tearDown(self):
75 super(MetricStoreTestBase, self).tearDown()
76
77 mock.patch.stopall()
78
79 def test_sets_start_time(self):
80 self.metric._start_time = None
81 self.mock_time.return_value = 1234
82
83 self.store.set('foo', (('field', 'value'),), None, 42)
84 self.store.set('foo', (('field', 'value2'),), None, 43)
85
86 all_metrics = list(self.store.get_all())
87 self.assertEqual(1, len(all_metrics))
88 self.assertEqual('foo', all_metrics[0][1].name)
89 self.assertEqual(1234, all_metrics[0][2])
90
91 self.mock_time.assert_called_once_with()
92
93 def test_uses_start_time_from_metric(self):
94 self.metric._start_time = 5678
95
96 self.store.set('foo', (('field', 'value'),), None, 42)
97 self.store.set('foo', (('field', 'value2'),), None, 43)
98
99 all_metrics = list(self.store.get_all())
100 self.assertEqual(1, len(all_metrics))
101 self.assertEqual('foo', all_metrics[0][1].name)
102 self.assertEqual(5678, all_metrics[0][2])
103
104 self.assertFalse(self.mock_time.called)
105
106 def test_get(self):
107 fields1 = (('field', 'value'),)
108 fields2 = (('field', 'value2'),)
109 fields3 = (('field', 'value3'),)
110 target_fields1 = {'region': 'rrr'}
111 target_fields2 = {'region': 'rrr', 'hostname': 'hhh'}
112
113 self.store.set('foo', fields1, None, 42)
114 self.store.set('foo', fields2, None, 43)
115 self.store.set('foo', fields1, target_fields1, 24)
116 self.store.set('foo', fields2, target_fields2, 34)
117
118 self.assertEquals(42, self.store.get('foo', fields1, None))
119 self.assertEquals(43, self.store.get('foo', fields2, None))
120 self.assertEquals(24, self.store.get('foo', fields1, target_fields1))
121 self.assertEquals(34, self.store.get('foo', fields2, target_fields2))
122
123 self.assertIsNone(self.store.get('foo', fields3, None))
124 self.assertIsNone(self.store.get('foo', (), None))
125 self.assertIsNone(self.store.get('foo', fields1, target_fields2))
126 self.assertEquals(44, self.store.get('foo', fields3, None, default=44))
127
128 self.assertIsNone(self.store.get('bar', (), None))
129
130 def test_iter_field_values(self):
131 fields1 = (('field', 'value'),)
132 fields2 = (('field', 'value2'),)
133 target_fields1 = {'region': 'rrr'}
134
135 self.store.set('foo', fields1, None, 42)
136 self.store.set('foo', fields2, None, 43)
137 self.store.set('foo', fields2, target_fields1, 44)
138
139 field_values = list(self.store.iter_field_values('foo'))
140 self.assertEquals([
141 ((('field', 'value'),), 42),
142 ((('field', 'value2'),), 43),
143 ((('field', 'value2'),), 44),
144 ], sorted(field_values))
145
146 def test_set_enforce_ge(self):
147 self.store.set('foo', (('field', 'value'),), None, 42, enforce_ge=True)
148 self.store.set('foo', (('field', 'value'),), None, 43, enforce_ge=True)
149
150 with self.assertRaises(errors.MonitoringDecreasingValueError):
151 self.store.set('foo', (('field', 'value'),), None, 42, enforce_ge=True)
152
153 def test_incr(self):
154 self.store.set('foo', (('field', 'value'),), None, 42)
155 self.store.incr('foo', (('field', 'value'),), None, 4)
156
157 self.assertEquals(46, self.store.get('foo', (('field', 'value'),), None))
158
159 with self.assertRaises(errors.MonitoringDecreasingValueError):
160 self.store.incr('foo', (('field', 'value'),), None, -1)
161
162 def test_incr_modify_fn(self):
163 def spec_fn(n, i): # pragma: no cover
164 return n+i
165 modify_fn = mock.create_autospec(spec_fn, spec_set=True)
166 modify_fn.return_value = 7
167
168 self.store.set('foo', (('field', 'value'),), None, 42)
169 self.store.incr('foo', (('field', 'value'),), None, 3, modify_fn=modify_fn)
170
171 self.assertEquals(7, self.store.get('foo', (('field', 'value'),), None))
172 modify_fn.assert_called_once_with(42, 3)
173
174 def test_reset_for_unittest(self):
175 self.store.set('foo', (('field', 'value'),), None, 42)
176 self.store.reset_for_unittest()
177 self.assertIsNone(self.store.get('foo', (('field', 'value'),), None))
178
179 def test_reset_for_unittest_name(self):
180 self.store.set('foo', (('field', 'value'),), None, 42)
181 self.store.reset_for_unittest(name='bar')
182 self.assertEquals(42, self.store.get('foo', (('field', 'value'),), None))
183
184 self.store.reset_for_unittest(name='foo')
185 self.assertIsNone(self.store.get('foo', (('field', 'value'),), None))
186
187 def test_unregister_metric(self):
188 fields = (('field', 'value'),)
189 self.store.set('foo', fields, None, 42) # Registered in setUp().
190 self.store.set('bar', fields, None, 24) # Unregistered.
191 all_metrics = list(self.store.get_all())
192 self.assertEqual(1, len(all_metrics))
193 self.assertEqual('foo', all_metrics[0][1].name)
194
195
196 class InProcessMetricStoreTest(MetricStoreTestBase, unittest.TestCase):
197 METRIC_STORE_CLASS = metric_store.InProcessMetricStore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698