1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
import pytest
from unittest import TestCase, mock
import core.config
import core.widget
import modules.core.memory
def build_module(args = []):
config = core.config.Config(args)
return modules.core.memory.Module(config=config, theme=None)
def memory_widget(module):
return module.widgets()[0]
def meminfo_mock(
total,
available,
unit = 'kB',
free = 0,
buffers = 0,
cached = 0,
slab = 0
):
data = []
states = [
('MemTotal', total),
('MemAvailable', available),
('MemFree', free),
('Buffers', buffers),
('Cached', cached),
('Slab', slab)
]
for i, (key, value) in enumerate(states):
data.append('{}: {} {}'.format(key, value, unit))
return '\n'.join(data)
class TestMemory(TestCase):
def test_load_module(self):
__import__("modules.core.memory")
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(2048, 1024)))
def test_default_healthy_state(self):
module = build_module()
module.update()
widget = memory_widget(module)
assert widget.full_text() == '1.00MiB/2.00MiB (50.00%)'
assert module.state(widget) == None
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(8196, 1024)))
def test_default_warning_state(self):
module = build_module()
module.update()
widget = memory_widget(module)
assert widget.full_text() == '7.00MiB/8.00MiB (87.51%)'
assert module.state(widget) == 'warning'
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(2048, 0)))
def test_default_critical_state(self):
module = build_module()
module.update()
widget = memory_widget(module)
assert widget.full_text() == '2.00MiB/2.00MiB (100.00%)'
assert module.state(widget) == 'critical'
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(4096, 3068)))
def test_custom_warning_parameter(self):
module = build_module(['-p', 'memory.warning=20'])
module.update()
widget = memory_widget(module)
assert widget.full_text() == '1.00MiB/4.00MiB (25.10%)'
assert module.state(widget) == 'warning'
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(8196, 4096)))
def test_custom_critical_parameter(self):
module = build_module(['-p', 'memory.critical=50'])
module.update()
widget = memory_widget(module)
assert widget.full_text() == '4.00MiB/8.00MiB (50.02%)'
assert module.state(widget) == 'critical'
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(2048, 1024)))
def test_usedonly_parameter(self):
module = build_module(['-p', 'memory.usedonly=true'])
module.update()
widget = memory_widget(module)
assert widget.full_text() == '1.00MiB'
assert module.state(widget) == None
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(2048, 1024)))
def test_format_parameter(self):
module = build_module(['-p', 'memory.format={used}.{total}'])
module.update()
widget = memory_widget(module)
assert widget.full_text() == '1.00MiB.2.00MiB'
assert module.state(widget) == None
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(2048, 1024)))
def test_format_parameter_with_percent(self):
module = build_module(['-p', 'memory.format={percent}%'])
module.update()
widget = memory_widget(module)
assert widget.full_text() == '50.0%'
assert module.state(widget) == None
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(8196, 4096, 'mB')))
def test_mb_unit(self):
module = build_module()
module.update()
widget = memory_widget(module)
assert widget.full_text() == '4.00GiB/8.00GiB (50.02%)'
assert module.state(widget) == None
@mock.patch('builtins.open', mock.mock_open(read_data=meminfo_mock(2, 1, 'gB')))
def test_gb_unit(self):
module = build_module()
module.update()
widget = memory_widget(module)
assert widget.full_text() == '1.00GiB/2.00GiB (50.00%)'
assert module.state(widget) == None
|