blob: c3378a90d10961980107ff2cda9882d386af37d3 [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
Alex Klein238356d2022-04-19 09:37:02 -06009from chromite.api import metrics as api_metrics
Will Bradley7e5b8c12019-07-30 12:44:15 -060010from chromite.api.gen.chromite.api import build_api_test_pb2
11from chromite.lib import cros_test_lib
Alex Kleinaef41942022-04-19 14:13:17 -060012from chromite.lib import metrics_lib
Will Bradley7e5b8c12019-07-30 12:44:15 -060013
14
15class MetricsTest(cros_test_lib.TestCase):
Alex Klein1699fab2022-09-08 08:46:06 -060016 """Test Metrics deserialization functionality at the API layer."""
Will Bradley7e5b8c12019-07-30 12:44:15 -060017
Alex Klein1699fab2022-09-08 08:46:06 -060018 def testDeserializeTimer(self):
19 """Test timer math and deserialization into proto objects."""
20 response = build_api_test_pb2.TestResultMessage()
21 mock_events = [
22 metrics_lib.MetricEvent(
23 600, "a.b", metrics_lib.OP_START_TIMER, arg="100"
24 ),
25 metrics_lib.MetricEvent(
26 1000, "a.b", metrics_lib.OP_STOP_TIMER, arg="100"
27 ),
28 ]
29 with mock.patch(
30 "chromite.api.metrics.metrics_lib.read_metrics_events",
31 return_value=mock_events,
32 ):
33 api_metrics.deserialize_metrics_log(response.events)
34 self.assertEqual(len(response.events), 1)
35 self.assertEqual(response.events[0].name, "a.b")
36 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
37 self.assertEqual(
38 response.events[0].duration_milliseconds, 1000 - 600
39 )
Will Bradley7e5b8c12019-07-30 12:44:15 -060040
Alex Klein1699fab2022-09-08 08:46:06 -060041 def testDeserializeNamedEvent(self):
42 """Test deserialization of a named event.
Will Bradley7e5b8c12019-07-30 12:44:15 -060043
Alex Klein1699fab2022-09-08 08:46:06 -060044 This test also includes a prefix to test for proper prepending.
45 """
46 response = build_api_test_pb2.TestResultMessage()
47 mock_events = [
48 metrics_lib.MetricEvent(
49 1000, "a.named_event", metrics_lib.OP_NAMED_EVENT, arg=None
50 ),
51 ]
52 with mock.patch(
53 "chromite.api.metrics.metrics_lib.read_metrics_events",
54 return_value=mock_events,
55 ):
56 api_metrics.deserialize_metrics_log(
57 response.events, prefix="prefix"
58 )
59 self.assertEqual(len(response.events), 1)
60 self.assertEqual(response.events[0].name, "prefix.a.named_event")
61 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
62 self.assertFalse(response.events[0].duration_milliseconds)
Will Bradley333d22c2019-09-11 15:04:59 -060063
Alex Klein1699fab2022-09-08 08:46:06 -060064 def testDeserializeGauge(self):
65 """Test deserialization of a gauge."""
66 response = build_api_test_pb2.TestResultMessage()
67 mock_events = [
68 metrics_lib.MetricEvent(
69 1000, "a.gauge", metrics_lib.OP_GAUGE, arg=17
70 ),
71 ]
72 with mock.patch(
73 "chromite.api.metrics.metrics_lib.read_metrics_events",
74 return_value=mock_events,
75 ):
76 api_metrics.deserialize_metrics_log(response.events)
77 self.assertEqual(len(response.events), 1)
78 self.assertEqual(response.events[0].name, "a.gauge")
79 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
80 self.assertEqual(response.events[0].gauge, 17)
Alex Klein9964a1c2022-04-19 09:42:13 -060081
Alex Klein1699fab2022-09-08 08:46:06 -060082 def testDeserializeCounter(self):
83 """Test deserialization of a counter."""
84 response = build_api_test_pb2.TestResultMessage()
85 mock_events = [
86 metrics_lib.MetricEvent(
87 1000, "a.counter", metrics_lib.OP_INCREMENT_COUNTER, arg=1
88 ),
89 metrics_lib.MetricEvent(
90 1001, "a.counter", metrics_lib.OP_INCREMENT_COUNTER, arg=2
91 ),
92 metrics_lib.MetricEvent(
93 1002, "a.counter", metrics_lib.OP_INCREMENT_COUNTER, arg=3
94 ),
95 metrics_lib.MetricEvent(
96 1003, "a.counter", metrics_lib.OP_DECREMENT_COUNTER, arg=4
97 ),
98 ]
99 with mock.patch(
100 "chromite.api.metrics.metrics_lib.read_metrics_events",
101 return_value=mock_events,
102 ):
103 api_metrics.deserialize_metrics_log(response.events)
104 self.assertEqual(len(response.events), 1)
105 self.assertEqual(response.events[0].name, "a.counter")
106 self.assertEqual(response.events[0].timestamp_milliseconds, 1003)
107 self.assertEqual(response.events[0].gauge, 2)