blob: 6e3bc697ed85457f0510e7f56bf786d98bb8a6d0 [file] [log] [blame]
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for the utils/metrics library."""
import os
from unittest import mock
from chromite.lib import cros_test_lib
from chromite.utils import metrics
class MetricsTest(cros_test_lib.TestCase):
"""Test the utils/Metrics library."""
def testEndToEnd(self):
"""Test the normal usage pattern, end-to-end."""
# We should start in a clean, unmeasured state.
self.assertFalse(os.environ.get(metrics.UTILS_METRICS_LOG_ENVVAR))
with mock.patch('chromite.utils.metrics.current_milli_time') as mock_time:
mock_time.side_effect = [128000, 256000, 512300]
events = []
# Create a fake usage site of the metrics.
@metrics.collect_metrics
def measure_things():
# Now, in here, we should have set up this env-var. This is a bit of
# invasive white-box testing for sanity purposes.
self.assertTrue(os.environ.get(metrics.UTILS_METRICS_LOG_ENVVAR))
# Now, with our pretend timer, let's record some events.
with metrics.timer('test.timer'):
metrics.event('test.named_event')
for event in metrics.read_metrics_events():
events.append(event)
# Run the fake scenario.
measure_things()
self.assertEqual(len(events), 3)
self.assertEqual(events[0].timestamp_epoch_millis, 128000)
self.assertEqual(events[0].op, metrics.OP_START_TIMER)
self.assertEqual(events[0].name, 'test.timer')
self.assertEqual(events[1].timestamp_epoch_millis, 256000)
self.assertEqual(events[1].op, metrics.OP_NAMED_EVENT)
self.assertEqual(events[1].name, 'test.named_event')
self.assertEqual(events[2].timestamp_epoch_millis, 512300)
self.assertEqual(events[2].op, metrics.OP_STOP_TIMER)
self.assertEqual(events[2].name, 'test.timer')