blob: 7bc29c41a0d61438b09aa8451d1624b3d82e56ae [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
10from __future__ import print_function
Allen Lieb107022017-05-04 13:19:17 -070011
Allen Lia9c52e32017-07-13 12:26:39 -070012import mock
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070013import socket
Allen Lia9c52e32017-07-13 12:26:39 -070014
15import psutil
16
Allen Lieb107022017-05-04 13:19:17 -070017from chromite.lib import cros_test_lib
18from chromite.scripts.sysmon import net_metrics
19
20
Allen Lia9c52e32017-07-13 12:26:39 -070021snetio = psutil._common.snetio
22snicstats = psutil._common.snicstats
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070023snic = psutil._common.snic
Allen Lieb107022017-05-04 13:19:17 -070024
Allen Lia9c52e32017-07-13 12:26:39 -070025
26class TestNetMetrics(cros_test_lib.TestCase):
27 """Tests for net_metrics."""
28
29 def setUp(self):
30 patcher = mock.patch('infra_libs.ts_mon.common.interface.state.store',
31 autospec=True)
32 self.store = patcher.start()
33 self.addCleanup(patcher.stop)
34
35 def test_collect(self):
36 with mock.patch('psutil.net_io_counters', autospec=True) \
37 as net_io_counters, \
Allen Lib6bb5f82017-08-21 15:11:57 -070038 mock.patch('psutil.net_if_stats', autospec=True) as net_if_stats, \
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070039 mock.patch('socket.getfqdn', autospec=True) as getfqdn, \
40 mock.patch('psutil.net_if_addrs', autospec=True) as net_if_addrs:
Allen Lia9c52e32017-07-13 12:26:39 -070041 net_io_counters.return_value = {
42 'lo': snetio(
43 bytes_sent=17247495681, bytes_recv=172474956,
44 packets_sent=109564455, packets_recv=1095644,
45 errin=10, errout=1, dropin=20, dropout=2),
46 }
47 net_if_stats.return_value = {
48 'lo': snicstats(isup=True, duplex=0, speed=0, mtu=65536),
49 }
Allen Lib6bb5f82017-08-21 15:11:57 -070050 getfqdn.return_value = 'foo.example.com'
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070051 net_if_addrs.return_value = {
52 'lo': [
53 snic(family=psutil.AF_LINK, address='11:22:33:44:55:66',
54 netmask=None, broadcast=None, ptp=None),
55 snic(family=socket.AF_INET, address='10.1.1.1', netmask=None,
56 broadcast=None, ptp=None),
57 snic(family=socket.AF_INET6,
58 address='fc00:0000:0000:0000:0000:0000:0000:0001',
59 netmask=None, broadcast=None, ptp=None),
60 ],
61 }
Allen Lia9c52e32017-07-13 12:26:39 -070062 net_metrics.collect_net_info()
63
64 setter = self.store.set
65 calls = [
Allen Lia9c52e32017-07-13 12:26:39 -070066 mock.call('dev/net/bytes', ('up', 'lo'), None,
67 17247495681, enforce_ge=mock.ANY),
68 mock.call('dev/net/bytes', ('down', 'lo'), None,
69 172474956, enforce_ge=mock.ANY),
70 mock.call('dev/net/packets', ('up', 'lo'), None,
71 109564455, enforce_ge=mock.ANY),
72 mock.call('dev/net/packets', ('down', 'lo'), None,
73 1095644, enforce_ge=mock.ANY),
74 mock.call('dev/net/errors', ('up', 'lo'), None,
75 1, enforce_ge=mock.ANY),
76 mock.call('dev/net/errors', ('down', 'lo'), None,
77 10, enforce_ge=mock.ANY),
78 mock.call('dev/net/dropped', ('up', 'lo'), None,
79 2, enforce_ge=mock.ANY),
80 mock.call('dev/net/dropped', ('down', 'lo'), None,
81 20, enforce_ge=mock.ANY),
82 mock.call('dev/net/isup', ('lo',), None,
83 True, enforce_ge=mock.ANY),
84 mock.call('dev/net/duplex', ('lo',), None,
85 0, enforce_ge=mock.ANY),
86 mock.call('dev/net/speed', ('lo',), None,
87 0, enforce_ge=mock.ANY),
88 mock.call('dev/net/mtu', ('lo',), None,
89 65536, enforce_ge=mock.ANY),
Allen Lib6bb5f82017-08-21 15:11:57 -070090 mock.call('net/fqdn', (), None,
91 'foo.example.com', enforce_ge=mock.ANY),
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070092 mock.call('dev/net/address', ('AF_LINK', 'lo'), None,
93 '11:22:33:44:55:66', enforce_ge=mock.ANY),
94 mock.call('dev/net/address', ('AF_INET', 'lo',), None,
95 '10.1.1.1', enforce_ge=mock.ANY),
96 mock.call('dev/net/address', ('AF_INET6', 'lo'), None,
97 'fc00:0000:0000:0000:0000:0000:0000:0001',
98 enforce_ge=mock.ANY),
Allen Lia9c52e32017-07-13 12:26:39 -070099 ]
100 setter.assert_has_calls(calls)
101 self.assertEqual(len(setter.mock_calls), len(calls))