diff --git a/bumblebee_status/modules/contrib/network_traffic.py b/bumblebee_status/modules/contrib/network_traffic.py index bd1a9b6..f9c8c98 100644 --- a/bumblebee_status/modules/contrib/network_traffic.py +++ b/bumblebee_status/modules/contrib/network_traffic.py @@ -38,8 +38,8 @@ class Module(core.module.Module): try: self._bandwidth = BandwidthInfo() - self._rate_recv = "?" - self._rate_sent = "?" + self._rate_recv = 0 + self._rate_sent = 0 self._bytes_recv = self._bandwidth.bytes_recv() self._bytes_sent = self._bandwidth.bytes_sent() except Exception: diff --git a/tests/modules/contrib/test_network_traffic.py b/tests/modules/contrib/test_network_traffic.py index 0dd52a9..1abae72 100644 --- a/tests/modules/contrib/test_network_traffic.py +++ b/tests/modules/contrib/test_network_traffic.py @@ -1,9 +1,91 @@ import pytest +from unittest import TestCase, mock + +import core.config +import core.widget +import modules.contrib.network_traffic + +from types import SimpleNamespace pytest.importorskip("psutil") - pytest.importorskip("netifaces") -def test_load_module(): - __import__("modules.contrib.network_traffic") +def io_counters_mock(recv, sent): + return { + 'lo': SimpleNamespace( + bytes_sent = sent, + bytes_recv = recv + ) + } +def gateways_response(): + return { + 'default': { + 1: ('10.0.0.10', 'lo') + } + } + +def build_module(): + config = core.config.Config([]) + return modules.contrib.network_traffic.Module(config=config, theme=None) + +def download_widget(module): + return module.widgets()[0] + +def upload_widget(module): + return module.widgets()[1] + +def mb_to_bytes(value): + return value*1024**2 + +class TestNetworkTrafficUnit(TestCase): + def test_load_module(self): + __import__("modules.contrib.network_traffic") + + def test_initial_download_rate(self): + module = build_module() + assert download_widget(module).full_text() == '0.00B/s' + + def test_initial_upload_rate(self): + module = build_module() + assert upload_widget(module).full_text() == '0.00B/s' + + @mock.patch('netifaces.gateways') + def test_invalid_gateways(self, gateways_mock): + gateways_mock.return_value = { 'invalid': 'gateways' } + + module = build_module() + + assert download_widget(module).full_text() == '0.00B/s' + assert upload_widget(module).full_text() == '0.00B/s' + + @mock.patch('psutil.net_io_counters') + def test_invalid_io_counters(self, net_io_counters_mock): + net_io_counters_mock.return_value = { 'invalid': 'io_counters' } + + module = build_module() + + assert download_widget(module).full_text() == '0.00B/s' + assert upload_widget(module).full_text() == '0.00B/s' + + @mock.patch('psutil.net_io_counters') + @mock.patch('netifaces.gateways') + @mock.patch('netifaces.AF_INET', 1) + def test_update_rates(self, gateways_mock, net_io_counters_mock): + net_io_counters_mock.return_value = io_counters_mock(0, 0) + gateways_mock.return_value = gateways_response() + + module = build_module() + + assert download_widget(module).full_text() == '0.00B/s' + assert upload_widget(module).full_text() == '0.00B/s' + + net_io_counters_mock.return_value = io_counters_mock( + mb_to_bytes(30), + mb_to_bytes(0.5) + ) + + module.update() + + assert download_widget(module).full_text() == '30.00MiB/s' + assert upload_widget(module).full_text() == '512.00KiB/s'