blob: 35f275839580946afabdcfc67833ae0eebdedfed [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 Klein238356d2022-04-19 09:37:02 -060012from chromite.utils import metrics
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 = [
Alex Klein238356d2022-04-19 09:37:02 -060022 metrics.MetricEvent(600, 'a.b', metrics.OP_START_TIMER, arg='100'),
23 metrics.MetricEvent(1000, 'a.b', metrics.OP_STOP_TIMER, arg='100'),
Will Bradley7e5b8c12019-07-30 12:44:15 -060024 ]
Alex Klein2a11e7f2022-04-19 09:35:35 -060025 with mock.patch(
26 'chromite.api.metrics.metrics.read_metrics_events',
27 return_value=mock_events):
Alex Klein238356d2022-04-19 09:37:02 -060028 api_metrics.deserialize_metrics_log(response.events)
Will Bradley7e5b8c12019-07-30 12:44:15 -060029 self.assertEqual(len(response.events), 1)
30 self.assertEqual(response.events[0].name, 'a.b')
31 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
Alex Klein2a11e7f2022-04-19 09:35:35 -060032 self.assertEqual(response.events[0].duration_milliseconds, 1000 - 600)
Will Bradley7e5b8c12019-07-30 12:44:15 -060033
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 = [
Alex Klein238356d2022-04-19 09:37:02 -060041 metrics.MetricEvent(
42 1000, 'a.named_event', metrics.OP_NAMED_EVENT, arg=None),
Will Bradley7e5b8c12019-07-30 12:44:15 -060043 ]
Alex Klein2a11e7f2022-04-19 09:35:35 -060044 with mock.patch(
45 'chromite.api.metrics.metrics.read_metrics_events',
46 return_value=mock_events):
Alex Klein238356d2022-04-19 09:37:02 -060047 api_metrics.deserialize_metrics_log(response.events, prefix='prefix')
Will Bradley7e5b8c12019-07-30 12:44:15 -060048 self.assertEqual(len(response.events), 1)
49 self.assertEqual(response.events[0].name, 'prefix.a.named_event')
50 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
51 self.assertFalse(response.events[0].duration_milliseconds)
Will Bradley333d22c2019-09-11 15:04:59 -060052
53 def testDeserializeGauge(self):
54 """Test deserialization of a gauge."""
55 response = build_api_test_pb2.TestResultMessage()
56 mock_events = [
Alex Klein238356d2022-04-19 09:37:02 -060057 metrics.MetricEvent(1000, 'a.gauge', metrics.OP_GAUGE, arg=17),
Will Bradley333d22c2019-09-11 15:04:59 -060058 ]
Alex Klein2a11e7f2022-04-19 09:35:35 -060059 with mock.patch(
60 'chromite.api.metrics.metrics.read_metrics_events',
61 return_value=mock_events):
Alex Klein238356d2022-04-19 09:37:02 -060062 api_metrics.deserialize_metrics_log(response.events)
Will Bradley333d22c2019-09-11 15:04:59 -060063 self.assertEqual(len(response.events), 1)
64 self.assertEqual(response.events[0].name, 'a.gauge')
65 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
66 self.assertEqual(response.events[0].gauge, 17)