/
kernel-list-11.py
65 lines (41 loc) · 1.94 KB
/
kernel-list-11.py
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
import mock
from sh import uname, dpkg
def filter_packages(dpkg_output, kernel_version):
packages_list = dpkg_output.strip().splitlines()
installed_lines = filter(lambda line: line.startswith('ii'), packages_list)
package_names = [line.split()[1] for line in installed_lines]
return filter(lambda package: kernel_version not in package, package_names)
def main():
dpkg_output = dpkg('-l', 'linux-image-[0-9]*', 'linux-headers-[0-9]*', _env={'COLUMNS': '200'})
uname_output = uname('-r').strip() # like 4.4.0-79-generic
kernel_version = uname_output.rsplit('-', 1)[0]
print('kernel version:', kernel_version)
removed_packages = filter_packages(dpkg_output, kernel_version)
print('\n'.join(removed_packages))
if __name__ == '__main__':
main()
class TestFilterPackages:
def test_installed_filter(self):
dpkg_output = 'rc linux-image-1.1.1-11-generic aaa 111\n' \
'ii linux-image-1.1.1-12-generic aaa 111\n'
packages = filter_packages(dpkg_output, 'abc')
assert list(packages) == ['linux-image-1.1.1-12-generic']
def test_kernel_version_filter(self):
dpkg_output = 'ii linux-image-1.1.1-11-generic aaa 111\n' \
'ii linux-image-1.1.1-12-generic aaa 111\n'
packages = filter_packages(dpkg_output, '1.1.1-11')
assert list(packages) == ['linux-image-1.1.1-12-generic']
class TestMain:
@mock.patch('kernel-list-11.print')
@mock.patch('kernel-list-11.uname')
@mock.patch('kernel-list-11.dpkg')
def test_ok(self, m_dpkg, m_uname, m_print):
dpkg_output = 'ii linux-image-1.1.1-11-generic aaa 111\n' \
'ii linux-image-1.1.1-12-generic aaa 111\n'
m_dpkg.return_value = dpkg_output
m_uname.return_value = '1.1.1-11-generic\n'
main()
assert m_print.mock_calls == [
mock.call('kernel version:', '1.1.1-11'),
mock.call('linux-image-1.1.1-12-generic'),
]