267 lines
6.8 KiB
Python
267 lines
6.8 KiB
Python
|
import pytest
|
||
|
from argparse import Namespace
|
||
|
from unittest.mock import call, mock_open, patch
|
||
|
|
||
|
import spoc
|
||
|
|
||
|
@patch('builtins.open', new_callable=mock_open, read_data='foo\0arg1\0arg2\n')
|
||
|
def test_print_lock(cmdline_open, capsys):
|
||
|
spoc.print_lock('123')
|
||
|
|
||
|
cmdline_open.assert_called_once_with('/proc/123/cmdline')
|
||
|
captured = capsys.readouterr()
|
||
|
assert captured.out == 'Waiting for lock currently held by process 123 - foo arg1 arg2\n'
|
||
|
|
||
|
@patch('spoc.podman.get_apps', return_value={'anotherapp': '0.1', 'someapp': '0.1'})
|
||
|
def test_listing_installed(get_apps, capsys):
|
||
|
spoc.listing('installed')
|
||
|
|
||
|
get_apps.assert_called_once()
|
||
|
|
||
|
# Order is important here
|
||
|
captured = capsys.readouterr()
|
||
|
assert captured.out == 'anotherapp 0.1\nsomeapp 0.1\n'
|
||
|
|
||
|
@patch('spoc.repo.get_apps')
|
||
|
def test_listing_online(get_apps):
|
||
|
spoc.listing('online')
|
||
|
|
||
|
get_apps.assert_called_once()
|
||
|
|
||
|
@patch('spoc.repo.get_apps',
|
||
|
return_value={'someapp': {'version': '0.2'}, 'anotherapp': {'version': '0.1'}})
|
||
|
@patch('spoc.podman.get_apps', return_value={'someapp': '0.1'})
|
||
|
def test_listing_updates(repo_get_apps, podman_get_apps, capsys):
|
||
|
spoc.listing('updates')
|
||
|
|
||
|
repo_get_apps.assert_called_once()
|
||
|
podman_get_apps.assert_called_once()
|
||
|
|
||
|
captured = capsys.readouterr()
|
||
|
assert captured.out == 'someapp 0.1 -> 0.2\n'
|
||
|
|
||
|
@patch('spoc.repo.get_apps')
|
||
|
@patch('spoc.podman.get_apps')
|
||
|
def test_listing_invalid(repo_get_apps, podman_get_apps, capsys):
|
||
|
spoc.listing('invalid')
|
||
|
|
||
|
repo_get_apps.assert_not_called()
|
||
|
podman_get_apps.assert_not_called()
|
||
|
|
||
|
captured = capsys.readouterr()
|
||
|
assert captured.out == ''
|
||
|
|
||
|
@patch('spoc.app.install')
|
||
|
def test_install(app_install):
|
||
|
spoc.install('someapp')
|
||
|
|
||
|
app_install.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('spoc.app.update')
|
||
|
def test_update(app_update):
|
||
|
spoc.update('someapp')
|
||
|
|
||
|
app_update.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('spoc.app.uninstall')
|
||
|
def test_uninstall(app_uninstall):
|
||
|
spoc.uninstall('someapp')
|
||
|
|
||
|
app_uninstall.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('spoc.podman.start_pod')
|
||
|
def test_start(start_pod):
|
||
|
spoc.start('someapp')
|
||
|
|
||
|
start_pod.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('spoc.podman.stop_pod')
|
||
|
def test_stop(stop_pod):
|
||
|
spoc.stop('someapp')
|
||
|
|
||
|
stop_pod.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('spoc.podman.get_pod_status', return_value='RESULT')
|
||
|
def test_status(get_pod_status, capsys):
|
||
|
spoc.status('someapp')
|
||
|
|
||
|
get_pod_status.assert_called_once_with('someapp')
|
||
|
captured = capsys.readouterr()
|
||
|
assert captured.out == 'RESULT\n'
|
||
|
|
||
|
@pytest.mark.parametrize('value,expected',[
|
||
|
('1', True),
|
||
|
('on', True),
|
||
|
('Enable', True),
|
||
|
('TRUE', True),
|
||
|
('whatever', False),
|
||
|
])
|
||
|
@patch('spoc.autostart.set_app')
|
||
|
def test_set_autostart(set_app, value, expected):
|
||
|
spoc.set_autostart('someapp', value)
|
||
|
|
||
|
set_app.assert_called_once_with('someapp', expected)
|
||
|
|
||
|
@patch('spoc.autostart.get_apps', return_value={'someapp', 'anotherapp'})
|
||
|
@patch('spoc.podman.start_pod')
|
||
|
def test_start_autostarted(start_pod, get_apps):
|
||
|
spoc.start_autostarted()
|
||
|
|
||
|
get_apps.assert_called_once()
|
||
|
start_pod.assert_has_calls([
|
||
|
call('someapp'),
|
||
|
call('anotherapp'),
|
||
|
], any_order=True)
|
||
|
|
||
|
@patch('spoc.podman.get_apps', return_value={'someapp': '0.1', 'anotherapp': '0.1'})
|
||
|
@patch('spoc.podman.stop_pod')
|
||
|
def test_stop_all(stop_pod, get_apps):
|
||
|
spoc.stop_all()
|
||
|
|
||
|
get_apps.assert_called_once()
|
||
|
stop_pod.assert_has_calls([
|
||
|
call('someapp'),
|
||
|
call('anotherapp'),
|
||
|
], any_order=True)
|
||
|
|
||
|
@patch('spoc.podman.prune')
|
||
|
def test_prune(prune):
|
||
|
spoc.prune()
|
||
|
|
||
|
prune.assert_called_once()
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'list'])
|
||
|
@patch('spoc.listing')
|
||
|
def test_main_listing(listing):
|
||
|
spoc.main()
|
||
|
|
||
|
listing.assert_called_once_with('installed')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'list', 'online'])
|
||
|
@patch('spoc.listing')
|
||
|
def test_main_listing_online(listing):
|
||
|
spoc.main()
|
||
|
|
||
|
listing.assert_called_once_with('online')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'install', 'someapp'])
|
||
|
@patch('spoc.install')
|
||
|
def test_main_install(install):
|
||
|
spoc.main()
|
||
|
|
||
|
install.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'update', 'someapp'])
|
||
|
@patch('spoc.update')
|
||
|
def test_main_update(update):
|
||
|
spoc.main()
|
||
|
|
||
|
update.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'uninstall', 'someapp'])
|
||
|
@patch('spoc.uninstall')
|
||
|
def test_main_uninstall(uninstall):
|
||
|
spoc.main()
|
||
|
|
||
|
uninstall.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'start', 'someapp'])
|
||
|
@patch('spoc.start')
|
||
|
def test_main_start(start):
|
||
|
spoc.main()
|
||
|
|
||
|
start.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'stop', 'someapp'])
|
||
|
@patch('spoc.stop')
|
||
|
def test_main_stop(stop):
|
||
|
spoc.main()
|
||
|
|
||
|
stop.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'status', 'someapp'])
|
||
|
@patch('spoc.status')
|
||
|
def test_main_status(status):
|
||
|
spoc.main()
|
||
|
|
||
|
status.assert_called_once_with('someapp')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'status'])
|
||
|
@patch('spoc.status')
|
||
|
def test_main_status_all(status):
|
||
|
spoc.main()
|
||
|
|
||
|
status.assert_called_once_with(None)
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'autostart', 'someapp', 'on'])
|
||
|
@patch('spoc.set_autostart')
|
||
|
def test_main_autostart(autostart):
|
||
|
spoc.main()
|
||
|
|
||
|
autostart.assert_called_once_with('someapp', 'on')
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'start-autostarted'])
|
||
|
@patch('spoc.start_autostarted')
|
||
|
def test_main_start_autostarted(start_autostarted):
|
||
|
spoc.main()
|
||
|
|
||
|
start_autostarted.assert_called_once()
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'stop-all'])
|
||
|
@patch('spoc.stop_all')
|
||
|
def test_main_stop_all(stop_all):
|
||
|
spoc.main()
|
||
|
|
||
|
stop_all.assert_called_once()
|
||
|
|
||
|
@patch('sys.argv', ['foo', 'prune'])
|
||
|
@patch('spoc.prune')
|
||
|
def test_main_prune(prune):
|
||
|
spoc.main()
|
||
|
|
||
|
prune.assert_called_once()
|
||
|
|
||
|
@patch('spoc.parse_args', return_value=Namespace(action=None))
|
||
|
@patch('spoc.listing')
|
||
|
@patch('spoc.install')
|
||
|
@patch('spoc.update')
|
||
|
@patch('spoc.uninstall')
|
||
|
@patch('spoc.start')
|
||
|
@patch('spoc.stop')
|
||
|
@patch('spoc.status')
|
||
|
@patch('spoc.start_autostarted')
|
||
|
@patch('spoc.stop_all')
|
||
|
@patch('spoc.prune')
|
||
|
def test_main_invalid(prune, stop_all, start_autostarted, status, stop, start,
|
||
|
uninstall, update, install, listing, parse_args):
|
||
|
spoc.main()
|
||
|
|
||
|
parse_args.assert_called_once()
|
||
|
listing.assert_not_called()
|
||
|
install.assert_not_called()
|
||
|
update.assert_not_called()
|
||
|
uninstall.assert_not_called()
|
||
|
start.assert_not_called()
|
||
|
stop.assert_not_called()
|
||
|
status.assert_not_called()
|
||
|
start_autostarted.assert_not_called()
|
||
|
stop_all.assert_not_called()
|
||
|
prune.assert_not_called()
|
||
|
|
||
|
@pytest.mark.parametrize('argv', [
|
||
|
['list', 'invalid'],
|
||
|
['install'],
|
||
|
['update'],
|
||
|
['uninstall'],
|
||
|
['start'],
|
||
|
['stop'],
|
||
|
['autostart'],
|
||
|
['autostart', 'someapp'],
|
||
|
['invalid'],
|
||
|
])
|
||
|
def test_main_systemexit(argv):
|
||
|
argv.insert(0, 'foo')
|
||
|
with patch('sys.argv', argv):
|
||
|
with pytest.raises(SystemExit):
|
||
|
spoc.main()
|