blob: 86d5a53257404e9e2ce3240705f7c7cd962403a0 [file] [log] [blame]
Mike Frysingere58c0e22017-10-04 15:43:30 -04001# -*- coding: utf-8 -*-
Allen Lieb107022017-05-04 13:19:17 -07002# Copyright 2017 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
Allen Lia9c52e32017-07-13 12:26:39 -07006"""Unit tests for net_metrics."""
7
8# pylint: disable=protected-access
Allen Lieb107022017-05-04 13:19:17 -07009
10from __future__ import absolute_import
11from __future__ import print_function
Allen Lieb107022017-05-04 13:19:17 -070012
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070013import socket
Allen Lia9c52e32017-07-13 12:26:39 -070014
Mike Frysinger6db648e2018-07-24 19:57:58 -040015import mock
Mike Frysingercb56b642019-08-25 15:33:08 -040016import psutil # pylint: disable=import-error
Allen Lia9c52e32017-07-13 12:26:39 -070017
Allen Lieb107022017-05-04 13:19:17 -070018from chromite.lib import cros_test_lib
19from chromite.scripts.sysmon import net_metrics
20
Allen Lia9c52e32017-07-13 12:26:39 -070021snetio = psutil._common.snetio
22snicstats = psutil._common.snicstats
Greg Edelstona4c9b3b2020-01-07 17:51:13 -070023snic = getattr(psutil._common, 'snic', None)
24
25pytestmark = cros_test_lib.pytestmark_skipif(snic is None,
26 reason='Wrong version of psutil')
Allen Lieb107022017-05-04 13:19:17 -070027
Allen Lia9c52e32017-07-13 12:26:39 -070028
29class TestNetMetrics(cros_test_lib.TestCase):
30 """Tests for net_metrics."""
31
32 def setUp(self):
33 patcher = mock.patch('infra_libs.ts_mon.common.interface.state.store',
34 autospec=True)
35 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': [
56 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))