blob: eb7404a67184377ec2687562cf4825a896c4832c [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
Will Bradley7e5b8c12019-07-30 12:44:15 -06007from chromite.api import metrics
8from chromite.api.gen.chromite.api import build_api_test_pb2
9from chromite.lib import cros_test_lib
Will Bradley333d22c2019-09-11 15:04:59 -060010from chromite.utils.metrics import (MetricEvent, OP_GAUGE, OP_NAMED_EVENT,
11 OP_START_TIMER, OP_STOP_TIMER)
Mike Frysinger40ffb532021-02-12 07:36:08 -050012from chromite.third_party import mock
Will Bradley7e5b8c12019-07-30 12:44:15 -060013
14
15class MetricsTest(cros_test_lib.TestCase):
16 """Test Metrics deserialization functionality at the API layer."""
17
18 def testDeserializeTimer(self):
19 """Test timer math and deserialization into proto objects."""
20 response = build_api_test_pb2.TestResultMessage()
21 mock_events = [
Will Bradley333d22c2019-09-11 15:04:59 -060022 MetricEvent(600, 'a.b', OP_START_TIMER, arg='100'),
23 MetricEvent(1000, 'a.b', OP_STOP_TIMER, arg='100'),
Will Bradley7e5b8c12019-07-30 12:44:15 -060024 ]
25 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
26 return_value=mock_events):
27 metrics.deserialize_metrics_log(response.events)
28 self.assertEqual(len(response.events), 1)
29 self.assertEqual(response.events[0].name, 'a.b')
30 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
31 self.assertEqual(response.events[0].duration_milliseconds, 1000-600)
32
33 def testDeserializeNamedEvent(self):
34 """Test deserialization of a named event.
35
36 This test also includes a prefix to test for proper prepending.
37 """
38 response = build_api_test_pb2.TestResultMessage()
39 mock_events = [
Will Bradley333d22c2019-09-11 15:04:59 -060040 MetricEvent(1000, 'a.named_event', OP_NAMED_EVENT, arg=None),
Will Bradley7e5b8c12019-07-30 12:44:15 -060041 ]
42 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
43 return_value=mock_events):
44 metrics.deserialize_metrics_log(response.events, prefix='prefix')
45 self.assertEqual(len(response.events), 1)
46 self.assertEqual(response.events[0].name, 'prefix.a.named_event')
47 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
48 self.assertFalse(response.events[0].duration_milliseconds)
Will Bradley333d22c2019-09-11 15:04:59 -060049
50 def testDeserializeGauge(self):
51 """Test deserialization of a gauge."""
52 response = build_api_test_pb2.TestResultMessage()
53 mock_events = [
54 MetricEvent(1000, 'a.gauge', OP_GAUGE, arg=17),
55 ]
56 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
57 return_value=mock_events):
58 metrics.deserialize_metrics_log(response.events)
59 self.assertEqual(len(response.events), 1)
60 self.assertEqual(response.events[0].name, 'a.gauge')
61 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
62 self.assertEqual(response.events[0].gauge, 17)