blob: e5c78579c97288b88847b1bf4a1eb583aaa6edab [file] [log] [blame]
Will Bradley7e5b8c12019-07-30 12:44:15 -06001# -*- coding: utf-8 -*-
2# Copyright 2019 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Tests for the api/metrics library."""
7
8from __future__ import print_function
9
Mike Frysingeref94e4c2020-02-10 23:59:54 -050010import sys
11
Will Bradley7e5b8c12019-07-30 12:44:15 -060012import mock
13
14from chromite.api import metrics
15from chromite.api.gen.chromite.api import build_api_test_pb2
16from chromite.lib import cros_test_lib
Will Bradley333d22c2019-09-11 15:04:59 -060017from chromite.utils.metrics import (MetricEvent, OP_GAUGE, OP_NAMED_EVENT,
18 OP_START_TIMER, OP_STOP_TIMER)
Will Bradley7e5b8c12019-07-30 12:44:15 -060019
20
Mike Frysingeref94e4c2020-02-10 23:59:54 -050021assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
22
23
Will Bradley7e5b8c12019-07-30 12:44:15 -060024class MetricsTest(cros_test_lib.TestCase):
25 """Test Metrics deserialization functionality at the API layer."""
26
27 def testDeserializeTimer(self):
28 """Test timer math and deserialization into proto objects."""
29 response = build_api_test_pb2.TestResultMessage()
30 mock_events = [
Will Bradley333d22c2019-09-11 15:04:59 -060031 MetricEvent(600, 'a.b', OP_START_TIMER, arg='100'),
32 MetricEvent(1000, 'a.b', OP_STOP_TIMER, arg='100'),
Will Bradley7e5b8c12019-07-30 12:44:15 -060033 ]
34 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
35 return_value=mock_events):
36 metrics.deserialize_metrics_log(response.events)
37 self.assertEqual(len(response.events), 1)
38 self.assertEqual(response.events[0].name, 'a.b')
39 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
40 self.assertEqual(response.events[0].duration_milliseconds, 1000-600)
41
42 def testDeserializeNamedEvent(self):
43 """Test deserialization of a named event.
44
45 This test also includes a prefix to test for proper prepending.
46 """
47 response = build_api_test_pb2.TestResultMessage()
48 mock_events = [
Will Bradley333d22c2019-09-11 15:04:59 -060049 MetricEvent(1000, 'a.named_event', OP_NAMED_EVENT, arg=None),
Will Bradley7e5b8c12019-07-30 12:44:15 -060050 ]
51 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
52 return_value=mock_events):
53 metrics.deserialize_metrics_log(response.events, prefix='prefix')
54 self.assertEqual(len(response.events), 1)
55 self.assertEqual(response.events[0].name, 'prefix.a.named_event')
56 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
57 self.assertFalse(response.events[0].duration_milliseconds)
Will Bradley333d22c2019-09-11 15:04:59 -060058
59 def testDeserializeGauge(self):
60 """Test deserialization of a gauge."""
61 response = build_api_test_pb2.TestResultMessage()
62 mock_events = [
63 MetricEvent(1000, 'a.gauge', OP_GAUGE, arg=17),
64 ]
65 with mock.patch('chromite.api.metrics.metrics.read_metrics_events',
66 return_value=mock_events):
67 metrics.deserialize_metrics_log(response.events)
68 self.assertEqual(len(response.events), 1)
69 self.assertEqual(response.events[0].name, 'a.gauge')
70 self.assertEqual(response.events[0].timestamp_milliseconds, 1000)
71 self.assertEqual(response.events[0].gauge, 17)