blob: d89448eeedaa5dc97ca9b741ce5372bad333b26b [file] [log] [blame]
Allen Lieb107022017-05-04 13:19:17 -07001# Copyright 2017 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
Allen Lia9c52e32017-07-13 12:26:39 -07005"""Unit tests for net_metrics."""
6
7# pylint: disable=protected-access
Allen Lieb107022017-05-04 13:19:17 -07008
9from __future__ import absolute_import
Allen Lieb107022017-05-04 13:19:17 -070010
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070011import socket
Mike Frysinger166fea02021-02-12 05:30:33 -050012from unittest import mock
Allen Lia9c52e32017-07-13 12:26:39 -070013
Mike Frysingercb56b642019-08-25 15:33:08 -040014import psutil # pylint: disable=import-error
Allen Lia9c52e32017-07-13 12:26:39 -070015
Allen Lieb107022017-05-04 13:19:17 -070016from chromite.lib import cros_test_lib
17from chromite.scripts.sysmon import net_metrics
18
Mike Frysinger1ca14432020-02-16 00:18:56 -050019
Allen Lia9c52e32017-07-13 12:26:39 -070020snetio = psutil._common.snetio
21snicstats = psutil._common.snicstats
Greg Edelstona4c9b3b2020-01-07 17:51:13 -070022snic = getattr(psutil._common, 'snic', None)
23
24pytestmark = cros_test_lib.pytestmark_skipif(snic is None,
25 reason='Wrong version of psutil')
Allen Lieb107022017-05-04 13:19:17 -070026
Allen Lia9c52e32017-07-13 12:26:39 -070027
28class TestNetMetrics(cros_test_lib.TestCase):
29 """Tests for net_metrics."""
30
31 def setUp(self):
Mike Frysinger8d6a51d2021-02-12 07:40:03 -050032 patcher = mock.patch(
33 'chromite.third_party.infra_libs.ts_mon.common.interface.state.store',
34 autospec=True)
Allen Lia9c52e32017-07-13 12:26:39 -070035 self.store = patcher.start()
36 self.addCleanup(patcher.stop)
37
38 def test_collect(self):
39 with mock.patch('psutil.net_io_counters', autospec=True) \
40 as net_io_counters, \
Allen Lib6bb5f82017-08-21 15:11:57 -070041 mock.patch('psutil.net_if_stats', autospec=True) as net_if_stats, \
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070042 mock.patch('socket.getfqdn', autospec=True) as getfqdn, \
43 mock.patch('psutil.net_if_addrs', autospec=True) as net_if_addrs:
Allen Lia9c52e32017-07-13 12:26:39 -070044 net_io_counters.return_value = {
45 'lo': snetio(
46 bytes_sent=17247495681, bytes_recv=172474956,
47 packets_sent=109564455, packets_recv=1095644,
48 errin=10, errout=1, dropin=20, dropout=2),
49 }
50 net_if_stats.return_value = {
51 'lo': snicstats(isup=True, duplex=0, speed=0, mtu=65536),
52 }
Allen Lib6bb5f82017-08-21 15:11:57 -070053 getfqdn.return_value = 'foo.example.com'
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070054 net_if_addrs.return_value = {
55 'lo': [
Mike Frysingerabb7d812020-05-15 00:13:10 -040056 # pylint: disable=not-callable
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070057 snic(family=psutil.AF_LINK, address='11:22:33:44:55:66',
58 netmask=None, broadcast=None, ptp=None),
59 snic(family=socket.AF_INET, address='10.1.1.1', netmask=None,
60 broadcast=None, ptp=None),
61 snic(family=socket.AF_INET6,
62 address='fc00:0000:0000:0000:0000:0000:0000:0001',
63 netmask=None, broadcast=None, ptp=None),
64 ],
65 }
Allen Lia9c52e32017-07-13 12:26:39 -070066 net_metrics.collect_net_info()
67
68 setter = self.store.set
69 calls = [
Allen Lia9c52e32017-07-13 12:26:39 -070070 mock.call('dev/net/bytes', ('up', 'lo'), None,
71 17247495681, enforce_ge=mock.ANY),
72 mock.call('dev/net/bytes', ('down', 'lo'), None,
73 172474956, enforce_ge=mock.ANY),
74 mock.call('dev/net/packets', ('up', 'lo'), None,
75 109564455, enforce_ge=mock.ANY),
76 mock.call('dev/net/packets', ('down', 'lo'), None,
77 1095644, enforce_ge=mock.ANY),
78 mock.call('dev/net/errors', ('up', 'lo'), None,
79 1, enforce_ge=mock.ANY),
80 mock.call('dev/net/errors', ('down', 'lo'), None,
81 10, enforce_ge=mock.ANY),
82 mock.call('dev/net/dropped', ('up', 'lo'), None,
83 2, enforce_ge=mock.ANY),
84 mock.call('dev/net/dropped', ('down', 'lo'), None,
85 20, enforce_ge=mock.ANY),
86 mock.call('dev/net/isup', ('lo',), None,
87 True, enforce_ge=mock.ANY),
88 mock.call('dev/net/duplex', ('lo',), None,
89 0, enforce_ge=mock.ANY),
90 mock.call('dev/net/speed', ('lo',), None,
91 0, enforce_ge=mock.ANY),
92 mock.call('dev/net/mtu', ('lo',), None,
93 65536, enforce_ge=mock.ANY),
Allen Lib6bb5f82017-08-21 15:11:57 -070094 mock.call('net/fqdn', (), None,
95 'foo.example.com', enforce_ge=mock.ANY),
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070096 mock.call('dev/net/address', ('AF_LINK', 'lo'), None,
97 '11:22:33:44:55:66', enforce_ge=mock.ANY),
98 mock.call('dev/net/address', ('AF_INET', 'lo',), None,
99 '10.1.1.1', enforce_ge=mock.ANY),
100 mock.call('dev/net/address', ('AF_INET6', 'lo'), None,
101 'fc00:0000:0000:0000:0000:0000:0000:0001',
102 enforce_ge=mock.ANY),
Allen Lia9c52e32017-07-13 12:26:39 -0700103 ]
104 setter.assert_has_calls(calls)
105 self.assertEqual(len(setter.mock_calls), len(calls))