blob: fbec3a5ce7604abd481fa3c3363c861518df9fc9 [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
Allen Lia9c52e32017-07-13 12:26:39 -070012
Mike Frysingercb56b642019-08-25 15:33:08 -040013import psutil # pylint: disable=import-error
Allen Lia9c52e32017-07-13 12:26:39 -070014
Allen Lieb107022017-05-04 13:19:17 -070015from chromite.lib import cros_test_lib
16from chromite.scripts.sysmon import net_metrics
Mike Frysinger40ffb532021-02-12 07:36:08 -050017from chromite.third_party import mock
Allen Lieb107022017-05-04 13:19:17 -070018
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):
32 patcher = mock.patch('infra_libs.ts_mon.common.interface.state.store',
33 autospec=True)
34 self.store = patcher.start()
35 self.addCleanup(patcher.stop)
36
37 def test_collect(self):
38 with mock.patch('psutil.net_io_counters', autospec=True) \
39 as net_io_counters, \
Allen Lib6bb5f82017-08-21 15:11:57 -070040 mock.patch('psutil.net_if_stats', autospec=True) as net_if_stats, \
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070041 mock.patch('socket.getfqdn', autospec=True) as getfqdn, \
42 mock.patch('psutil.net_if_addrs', autospec=True) as net_if_addrs:
Allen Lia9c52e32017-07-13 12:26:39 -070043 net_io_counters.return_value = {
44 'lo': snetio(
45 bytes_sent=17247495681, bytes_recv=172474956,
46 packets_sent=109564455, packets_recv=1095644,
47 errin=10, errout=1, dropin=20, dropout=2),
48 }
49 net_if_stats.return_value = {
50 'lo': snicstats(isup=True, duplex=0, speed=0, mtu=65536),
51 }
Allen Lib6bb5f82017-08-21 15:11:57 -070052 getfqdn.return_value = 'foo.example.com'
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070053 net_if_addrs.return_value = {
54 'lo': [
Mike Frysingerabb7d812020-05-15 00:13:10 -040055 # pylint: disable=not-callable
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070056 snic(family=psutil.AF_LINK, address='11:22:33:44:55:66',
57 netmask=None, broadcast=None, ptp=None),
58 snic(family=socket.AF_INET, address='10.1.1.1', netmask=None,
59 broadcast=None, ptp=None),
60 snic(family=socket.AF_INET6,
61 address='fc00:0000:0000:0000:0000:0000:0000:0001',
62 netmask=None, broadcast=None, ptp=None),
63 ],
64 }
Allen Lia9c52e32017-07-13 12:26:39 -070065 net_metrics.collect_net_info()
66
67 setter = self.store.set
68 calls = [
Allen Lia9c52e32017-07-13 12:26:39 -070069 mock.call('dev/net/bytes', ('up', 'lo'), None,
70 17247495681, enforce_ge=mock.ANY),
71 mock.call('dev/net/bytes', ('down', 'lo'), None,
72 172474956, enforce_ge=mock.ANY),
73 mock.call('dev/net/packets', ('up', 'lo'), None,
74 109564455, enforce_ge=mock.ANY),
75 mock.call('dev/net/packets', ('down', 'lo'), None,
76 1095644, enforce_ge=mock.ANY),
77 mock.call('dev/net/errors', ('up', 'lo'), None,
78 1, enforce_ge=mock.ANY),
79 mock.call('dev/net/errors', ('down', 'lo'), None,
80 10, enforce_ge=mock.ANY),
81 mock.call('dev/net/dropped', ('up', 'lo'), None,
82 2, enforce_ge=mock.ANY),
83 mock.call('dev/net/dropped', ('down', 'lo'), None,
84 20, enforce_ge=mock.ANY),
85 mock.call('dev/net/isup', ('lo',), None,
86 True, enforce_ge=mock.ANY),
87 mock.call('dev/net/duplex', ('lo',), None,
88 0, enforce_ge=mock.ANY),
89 mock.call('dev/net/speed', ('lo',), None,
90 0, enforce_ge=mock.ANY),
91 mock.call('dev/net/mtu', ('lo',), None,
92 65536, enforce_ge=mock.ANY),
Allen Lib6bb5f82017-08-21 15:11:57 -070093 mock.call('net/fqdn', (), None,
94 'foo.example.com', enforce_ge=mock.ANY),
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070095 mock.call('dev/net/address', ('AF_LINK', 'lo'), None,
96 '11:22:33:44:55:66', enforce_ge=mock.ANY),
97 mock.call('dev/net/address', ('AF_INET', 'lo',), None,
98 '10.1.1.1', enforce_ge=mock.ANY),
99 mock.call('dev/net/address', ('AF_INET6', 'lo'), None,
100 'fc00:0000:0000:0000:0000:0000:0000:0001',
101 enforce_ge=mock.ANY),
Allen Lia9c52e32017-07-13 12:26:39 -0700102 ]
103 setter.assert_has_calls(calls)
104 self.assertEqual(len(setter.mock_calls), len(calls))