blob: 2489ff3fb0e3b16858d2ddbbcfbdf78dbb7a5aa1 [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
Mike Frysinger1ca14432020-02-16 00:18:56 -050014import sys
Allen Lia9c52e32017-07-13 12:26:39 -070015
Mike Frysinger6db648e2018-07-24 19:57:58 -040016import mock
Mike Frysingercb56b642019-08-25 15:33:08 -040017import psutil # pylint: disable=import-error
Allen Lia9c52e32017-07-13 12:26:39 -070018
Allen Lieb107022017-05-04 13:19:17 -070019from chromite.lib import cros_test_lib
20from chromite.scripts.sysmon import net_metrics
21
Mike Frysinger1ca14432020-02-16 00:18:56 -050022
23assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
24
25
Allen Lia9c52e32017-07-13 12:26:39 -070026snetio = psutil._common.snetio
27snicstats = psutil._common.snicstats
Greg Edelstona4c9b3b2020-01-07 17:51:13 -070028snic = getattr(psutil._common, 'snic', None)
29
30pytestmark = cros_test_lib.pytestmark_skipif(snic is None,
31 reason='Wrong version of psutil')
Allen Lieb107022017-05-04 13:19:17 -070032
Allen Lia9c52e32017-07-13 12:26:39 -070033
34class TestNetMetrics(cros_test_lib.TestCase):
35 """Tests for net_metrics."""
36
37 def setUp(self):
38 patcher = mock.patch('infra_libs.ts_mon.common.interface.state.store',
39 autospec=True)
40 self.store = patcher.start()
41 self.addCleanup(patcher.stop)
42
43 def test_collect(self):
44 with mock.patch('psutil.net_io_counters', autospec=True) \
45 as net_io_counters, \
Allen Lib6bb5f82017-08-21 15:11:57 -070046 mock.patch('psutil.net_if_stats', autospec=True) as net_if_stats, \
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070047 mock.patch('socket.getfqdn', autospec=True) as getfqdn, \
48 mock.patch('psutil.net_if_addrs', autospec=True) as net_if_addrs:
Allen Lia9c52e32017-07-13 12:26:39 -070049 net_io_counters.return_value = {
50 'lo': snetio(
51 bytes_sent=17247495681, bytes_recv=172474956,
52 packets_sent=109564455, packets_recv=1095644,
53 errin=10, errout=1, dropin=20, dropout=2),
54 }
55 net_if_stats.return_value = {
56 'lo': snicstats(isup=True, duplex=0, speed=0, mtu=65536),
57 }
Allen Lib6bb5f82017-08-21 15:11:57 -070058 getfqdn.return_value = 'foo.example.com'
Prathmesh Prabhu07f80872017-08-21 15:09:33 -070059 net_if_addrs.return_value = {
60 'lo': [
61 snic(family=psutil.AF_LINK, address='11:22:33:44:55:66',
62 netmask=None, broadcast=None, ptp=None),
63 snic(family=socket.AF_INET, address='10.1.1.1', netmask=None,
64 broadcast=None, ptp=None),
65 snic(family=socket.AF_INET6,
66 address='fc00:0000:0000:0000:0000:0000:0000:0001',
67 netmask=None, broadcast=None, ptp=None),
68 ],
69 }
Allen Lia9c52e32017-07-13 12:26:39 -070070 net_metrics.collect_net_info()
71
72 setter = self.store.set
73 calls = [
Allen Lia9c52e32017-07-13 12:26:39 -070074 mock.call('dev/net/bytes', ('up', 'lo'), None,
75 17247495681, enforce_ge=mock.ANY),
76 mock.call('dev/net/bytes', ('down', 'lo'), None,
77 172474956, enforce_ge=mock.ANY),
78 mock.call('dev/net/packets', ('up', 'lo'), None,
79 109564455, enforce_ge=mock.ANY),
80 mock.call('dev/net/packets', ('down', 'lo'), None,
81 1095644, enforce_ge=mock.ANY),
82 mock.call('dev/net/errors', ('up', 'lo'), None,
83 1, enforce_ge=mock.ANY),
84 mock.call('dev/net/errors', ('down', 'lo'), None,
85 10, enforce_ge=mock.ANY),
86 mock.call('dev/net/dropped', ('up', 'lo'), None,
87 2, enforce_ge=mock.ANY),
88 mock.call('dev/net/dropped', ('down', 'lo'), None,
89 20, enforce_ge=mock.ANY),
90 mock.call('dev/net/isup', ('lo',), None,
91 True, enforce_ge=mock.ANY),
92 mock.call('dev/net/duplex', ('lo',), None,
93 0, enforce_ge=mock.ANY),
94 mock.call('dev/net/speed', ('lo',), None,
95 0, enforce_ge=mock.ANY),
96 mock.call('dev/net/mtu', ('lo',), None,
97 65536, enforce_ge=mock.ANY),
Allen Lib6bb5f82017-08-21 15:11:57 -070098 mock.call('net/fqdn', (), None,
99 'foo.example.com', enforce_ge=mock.ANY),
Prathmesh Prabhu07f80872017-08-21 15:09:33 -0700100 mock.call('dev/net/address', ('AF_LINK', 'lo'), None,
101 '11:22:33:44:55:66', enforce_ge=mock.ANY),
102 mock.call('dev/net/address', ('AF_INET', 'lo',), None,
103 '10.1.1.1', enforce_ge=mock.ANY),
104 mock.call('dev/net/address', ('AF_INET6', 'lo'), None,
105 'fc00:0000:0000:0000:0000:0000:0000:0001',
106 enforce_ge=mock.ANY),
Allen Lia9c52e32017-07-13 12:26:39 -0700107 ]
108 setter.assert_has_calls(calls)
109 self.assertEqual(len(setter.mock_calls), len(calls))