blob: 783e5935d0fc6cd6e3761f069e94620ec679f1c9 [file] [log] [blame]
# Copyright 2017 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for puppet_metrics."""
import io
import os
from unittest import mock
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.scripts.sysmon import puppet_metrics
# pylint: disable=protected-access
_SUMMARY = """\
---
version:
config: 1499979608
puppet: "3.4.3"
resources:
changed: 7
failed: 0
failed_to_restart: 0
out_of_sync: 7
restarted: 0
scheduled: 0
skipped: 1
total: 218
time:
config_retrieval: 2.862796974
cron: 0.004638468
exec: 11.494792536
file: 0.618018423
file_line: 0.003589435
filebucket: 0.000341392
group: 0.017957332
ini_subsetting: 0.001235189
mount: 0.001416499
package: 4.315027644000001
schedule: 0.001541641
service: 10.242378408
total: 52.958788377
user: 0.001673407
vcsrepo: 23.393381029
last_run: 1499979671
changes:
total: 7
events:
failure: 0
success: 7
total: 7%
"""
class TestPuppetRunSummary(cros_test_lib.TestCase):
"""Tests for _PuppetRunSummary."""
def test_config_version(self) -> None:
summary = puppet_metrics._PuppetRunSummary(io.StringIO(_SUMMARY))
self.assertEqual(summary.config_version, 1499979608)
def test_puppet_version(self) -> None:
summary = puppet_metrics._PuppetRunSummary(io.StringIO(_SUMMARY))
self.assertEqual(summary.puppet_version, "3.4.3")
def test_events(self) -> None:
summary = puppet_metrics._PuppetRunSummary(io.StringIO(_SUMMARY))
self.assertEqual(summary.events, {"failure": 0, "success": 7})
def test_resources(self) -> None:
summary = puppet_metrics._PuppetRunSummary(io.StringIO(_SUMMARY))
self.assertEqual(
summary.resources,
{
"changed": 7,
"failed": 0,
"failed_to_restart": 0,
"out_of_sync": 7,
"restarted": 0,
"scheduled": 0,
"skipped": 1,
"other": 203,
},
)
def test_times(self) -> None:
summary = puppet_metrics._PuppetRunSummary(io.StringIO(_SUMMARY))
self.assertEqual(
summary.times,
{
"config_retrieval": 2.862796974,
"cron": 0.004638468,
"exec": 11.494792536,
"file": 0.618018423,
"file_line": 0.003589435,
"filebucket": 0.000341392,
"group": 0.017957332,
"ini_subsetting": 0.001235189,
"mount": 0.001416499,
"other": 0,
"package": 4.315027644000001,
"schedule": 0.001541641,
"service": 10.242378408,
"user": 0.001673407,
"vcsrepo": 23.393381029,
},
)
def test_last_run_time(self) -> None:
summary = puppet_metrics._PuppetRunSummary(io.StringIO(_SUMMARY))
self.assertEqual(summary.last_run_time, 1499979671)
class TestPuppetMetrics(cros_test_lib.TempDirTestCase):
"""Tests for puppet_metrics."""
def setUp(self) -> None:
patcher = mock.patch(
"chromite.third_party.infra_libs.ts_mon.common.interface.state."
"store",
autospec=True,
)
self.store = patcher.start()
self.addCleanup(patcher.stop)
self.tempfile = os.path.join(self.tempdir, "last_run_summary.yaml")
def test_collect(self) -> None:
osutils.WriteFile(self.tempfile, _SUMMARY)
with mock.patch("time.time", return_value=1500000000):
with mock.patch.object(
puppet_metrics, "LAST_RUN_FILE", self.tempfile
):
puppet_metrics.collect_puppet_summary()
setter = self.store.set
calls = [
mock.call(
"puppet/version/config",
(),
None,
1499979608,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/version/puppet", (), None, "3.4.3", enforce_ge=mock.ANY
),
mock.call(
"puppet/events", ("failure",), None, 0, enforce_ge=mock.ANY
),
mock.call(
"puppet/events", ("success",), None, 7, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources", ("scheduled",), None, 0, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources", ("skipped",), None, 1, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources", ("restarted",), None, 0, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources", ("changed",), None, 7, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources", ("failed",), None, 0, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources", ("other",), None, 203, enforce_ge=mock.ANY
),
mock.call(
"puppet/resources",
("failed_to_restart",),
None,
0,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/resources",
("out_of_sync",),
None,
7,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("vcsrepo",),
None,
23.393381029,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("exec",),
None,
11.494792536,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("cron",),
None,
0.004638468,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("file_line",),
None,
0.003589435,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("config_retrieval",),
None,
2.862796974,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("user",),
None,
0.001673407,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("file",),
None,
0.618018423,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("group",),
None,
0.017957332,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("service",),
None,
10.242378408,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("package",),
None,
4.315027644000001,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("mount",),
None,
0.001416499,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("schedule",),
None,
0.001541641,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times", ("other",), None, 0.0, enforce_ge=mock.ANY
),
mock.call(
"puppet/times",
("ini_subsetting",),
None,
0.001235189,
enforce_ge=mock.ANY,
),
mock.call(
"puppet/times",
("filebucket",),
None,
0.000341392,
enforce_ge=mock.ANY,
),
mock.call("puppet/age", (), None, 20329.0, enforce_ge=mock.ANY),
]
setter.assert_has_calls(calls, any_order=True)
self.assertEqual(len(setter.mock_calls), len(calls))