Sunil Mohan Adapa b253166f6d
*: Use action_utils.run instead of subprocess.check_output
- This is to capture stdout and stderr and transmit that from privileged daemon
back to the service to be displayed in HTML.

Tests:

- Unit tests and code checks pass.

- Some of the modified actions work as expected.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2025-09-29 16:58:56 +03:00

96 lines
3.3 KiB
Python

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Test various upgrade related utilities.
"""
from unittest.mock import patch
from .. import utils
def test_get_sources_list_codename(tmp_path):
"""Test retrieving codename from sources.list file."""
list1 = '''
deb http://deb.debian.org/debian bookworm main non-free-firmware
deb-src http://deb.debian.org/debian bookworm main non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main non-free-firmware
deb http://security.debian.org/debian-security/ bookworm-security main non-free-firmware
deb-src http://security.debian.org/debian-security/ bookworm-security main non-free-firmware
''' # noqa: E501
list2 = '''
deb http://deb.debian.org/debian stable main non-free-firmware
deb-src http://deb.debian.org/debian stable main non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main non-free-firmware
deb-src http://deb.debian.org/debian bookworm-updates main non-free-firmware
deb http://security.debian.org/debian-security/ bookworm-security main non-free-firmware
deb-src http://security.debian.org/debian-security/ bookworm-security main non-free-firmware
''' # noqa: E501
list3 = '''
deb http://deb.debian.org/debian unstable main
deb http://deb.debian.org/debian trixie main
'''
list4 = '''
deb http://deb.debian.org/debian sid main
deb http://deb.debian.org/debian trixie main
'''
list5 = '''
deb http://deb.debian.org/debian testing main
deb http://deb.debian.org/debian trixie main
'''
sources_list = tmp_path / 'sources.list'
module = 'plinth.modules.upgrades.utils'
with patch(f'{module}.sources_list', sources_list):
sources_list.write_text(list1)
assert utils.get_sources_list_codename() == 'bookworm'
sources_list.write_text(list2)
assert utils.get_sources_list_codename() is None
sources_list.write_text(list3)
assert utils.get_sources_list_codename() == 'unstable'
sources_list.write_text(list4)
assert utils.get_sources_list_codename() == 'unstable'
sources_list.write_text(list5)
assert utils.get_sources_list_codename() == 'testing'
@patch('subprocess.run')
def test_get_current_release(run):
"""Test that getting current release works."""
run.return_value.stdout = b'test-release\ntest-codename\n\n'
assert utils.get_current_release() == ('test-release', 'test-codename')
@patch('plinth.modules.upgrades.utils.get_sources_list_codename')
def test_is_distribution_unstable(get_sources_list_codename):
"""Test that checking for unstable distribution works."""
get_sources_list_codename.return_value = 'unstable'
assert utils.is_distribution_unstable()
get_sources_list_codename.return_value = 'sid'
assert utils.is_distribution_unstable()
get_sources_list_codename.return_value = 'testing'
assert not utils.is_distribution_unstable()
@patch('plinth.modules.upgrades.utils.get_current_release')
def test_is_distribution_rolling(get_current_release):
"""Test that checking for testing/unstable distribution works."""
for value in ['unstable', 'testing', 'n/a']:
get_current_release.return_value = (value, None)
assert utils.is_distribution_rolling()
get_current_release.return_value = ('forky', None)
assert not utils.is_distribution_rolling()