blob: 53f6c7c34f566731b61629c052d5e6317f0552c4 [file] [log] [blame]
Will Bradley7e5b8c12019-07-30 12:44:15 -06001# Copyright 2019 The Chromium OS 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"""Tests for the api/metrics library."""
6
Mike Frysinger166fea02021-02-12 05:30:33 -05007from unittest import mock
8
Will Bradley7e5b8c12019-07-30 12:44:15 -06009from chromite.api import metrics
10from chromite.api.gen.chromite.api import build_api_test_pb2
11from chromite.lib import cros_test_lib
Will Bradley333d22c2019-09-11 15:04:59 -060012from chromite.utils.metrics import (MetricEvent, OP_GAUGE, OP_NAMED_EVENT,
13 OP_START_TIMER, OP_STOP_TIMER)
Will Bradley7e5b8c12019-07-30 12:44:15 -060014
15
16class MetricsTest(cros_test_lib.TestCase):
17 """Test Metrics deserialization functionality at the API layer."""
18
19 def testDeserializeTimer(self):
20 """Test timer math and deserialization into proto objects."""
21 response = build_api_test_pb2.TestResultMessage()
22 mock_events = [
Will Bradley333d22c2019-09-11 15:04:59 -060023 MetricEvent(600, 'a.b', OP_START_TIMER, arg='100'),
24 MetricEvent(1000, 'a.b', OP_STOP_TIMER, arg='100'),
Will Bradley7e5b8c12019-07-30 12:44:15 -060025 ]
26 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
27 return_value=mock_events):
28 metrics.deserialize_metrics_log(response.events)
29 self.assertEqual(len(response.events), 1)
30 self.assertEqual(response.events[0].name, 'a.b')
31 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
32 self.assertEqual(response.events[0].duration_milliseconds, 1000-600)
33
34 def testDeserializeNamedEvent(self):
35 """Test deserialization of a named event.
36
37 This test also includes a prefix to test for proper prepending.
38 """
39 response = build_api_test_pb2.TestResultMessage()
40 mock_events = [
Will Bradley333d22c2019-09-11 15:04:59 -060041 MetricEvent(1000, 'a.named_event', OP_NAMED_EVENT, arg=None),
Will Bradley7e5b8c12019-07-30 12:44:15 -060042 ]
43 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
44 return_value=mock_events):
45 metrics.deserialize_metrics_log(response.events, prefix='prefix')
46 self.assertEqual(len(response.events), 1)
47 self.assertEqual(response.events[0].name, 'prefix.a.named_event')
48 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
49 self.assertFalse(response.events[0].duration_milliseconds)
Will Bradley333d22c2019-09-11 15:04:59 -060050
51 def testDeserializeGauge(self):
52 """Test deserialization of a gauge."""
53 response = build_api_test_pb2.TestResultMessage()
54 mock_events = [
55 MetricEvent(1000, 'a.gauge', OP_GAUGE, arg=17),
56 ]
57 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
58 return_value=mock_events):
59 metrics.deserialize_metrics_log(response.events)
60 self.assertEqual(len(response.events), 1)
61 self.assertEqual(response.events[0].name, 'a.gauge')
62 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
63 self.assertEqual(response.events[0].gauge, 17)