blob: 96841f56a70f92101217bed39e91d85087d16cb1 [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 net_metrics."""
import socket
from unittest import mock
import psutil # pylint: disable=import-error
from chromite.lib import cros_test_lib
from chromite.scripts.sysmon import net_metrics
# pylint: disable=protected-access
snetio = psutil._common.snetio
snicstats = psutil._common.snicstats
snic = getattr(psutil._common, "snic", None)
pytestmark = cros_test_lib.pytestmark_skipif(
snic is None, reason="Wrong version of psutil"
)
class TestNetMetrics(cros_test_lib.TestCase):
"""Tests for net_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)
def test_collect(self) -> None:
with mock.patch(
"psutil.net_io_counters", autospec=True
) as net_io_counters, mock.patch(
"psutil.net_if_stats", autospec=True
) as net_if_stats, mock.patch(
"socket.getfqdn", autospec=True
) as getfqdn, mock.patch(
"psutil.net_if_addrs", autospec=True
) as net_if_addrs:
net_io_counters.return_value = {
"lo": snetio(
bytes_sent=17247495681,
bytes_recv=172474956,
packets_sent=109564455,
packets_recv=1095644,
errin=10,
errout=1,
dropin=20,
dropout=2,
),
}
net_if_stats.return_value = {
"lo": snicstats(isup=True, duplex=0, speed=0, mtu=65536),
}
getfqdn.return_value = "foo.example.com"
net_if_addrs.return_value = {
"lo": [
# pylint: disable=not-callable
snic(
family=psutil.AF_LINK,
address="11:22:33:44:55:66",
netmask=None,
broadcast=None,
ptp=None,
),
snic(
family=socket.AF_INET,
address="10.1.1.1",
netmask=None,
broadcast=None,
ptp=None,
),
snic(
family=socket.AF_INET6,
address="fc00:0000:0000:0000:0000:0000:0000:0001",
netmask=None,
broadcast=None,
ptp=None,
),
],
}
net_metrics.collect_net_info()
setter = self.store.set
calls = [
mock.call(
"dev/net/bytes",
("up", "lo"),
None,
17247495681,
enforce_ge=mock.ANY,
),
mock.call(
"dev/net/bytes",
("down", "lo"),
None,
172474956,
enforce_ge=mock.ANY,
),
mock.call(
"dev/net/packets",
("up", "lo"),
None,
109564455,
enforce_ge=mock.ANY,
),
mock.call(
"dev/net/packets",
("down", "lo"),
None,
1095644,
enforce_ge=mock.ANY,
),
mock.call(
"dev/net/errors", ("up", "lo"), None, 1, enforce_ge=mock.ANY
),
mock.call(
"dev/net/errors", ("down", "lo"), None, 10, enforce_ge=mock.ANY
),
mock.call(
"dev/net/dropped", ("up", "lo"), None, 2, enforce_ge=mock.ANY
),
mock.call(
"dev/net/dropped", ("down", "lo"), None, 20, enforce_ge=mock.ANY
),
mock.call("dev/net/isup", ("lo",), None, True, enforce_ge=mock.ANY),
mock.call("dev/net/duplex", ("lo",), None, 0, enforce_ge=mock.ANY),
mock.call("dev/net/speed", ("lo",), None, 0, enforce_ge=mock.ANY),
mock.call("dev/net/mtu", ("lo",), None, 65536, enforce_ge=mock.ANY),
mock.call(
"net/fqdn", (), None, "foo.example.com", enforce_ge=mock.ANY
),
mock.call(
"dev/net/address",
("AF_LINK", "lo"),
None,
"11:22:33:44:55:66",
enforce_ge=mock.ANY,
),
mock.call(
"dev/net/address",
(
"AF_INET",
"lo",
),
None,
"10.1.1.1",
enforce_ge=mock.ANY,
),
mock.call(
"dev/net/address",
("AF_INET6", "lo"),
None,
"fc00:0000:0000:0000:0000:0000:0000:0001",
enforce_ge=mock.ANY,
),
]
setter.assert_has_calls(calls)
self.assertEqual(len(setter.mock_calls), len(calls))