diff --git a/plinth/modules/tor/tests/test_functional.py b/plinth/modules/tor/tests/test_functional.py index ae159ca46..3ccaa539e 100644 --- a/plinth/modules/tor/tests/test_functional.py +++ b/plinth/modules/tor/tests/test_functional.py @@ -3,7 +3,7 @@ Functional, browser based tests for tor app. """ -from pytest_bdd import given, parsers, scenarios, then, when +import pytest from plinth.tests import functional @@ -14,85 +14,88 @@ _TOR_FEATURE_TO_ELEMENT = { 'software': 'tor-apt_transport_tor_enabled' } -scenarios('tor.feature') +pytestmark = [pytest.mark.apps, pytest.mark.tor] -@given(parsers.parse('tor relay is {enabled:w}')) -def tor_given_relay_enable(session_browser, enabled): - _feature_enable(session_browser, 'relay', enabled) +@pytest.fixture(scope='module', autouse=True) +def fixture_background(session_browser): + """Login and install the app.""" + functional.login(session_browser) + functional.install(session_browser, 'tor') + yield + functional.app_disable(session_browser, 'tor') -@when(parsers.parse('I {enable:w} tor relay')) -def tor_relay_enable(session_browser, enable): - _feature_enable(session_browser, 'relay', enable) +def test_enable_disable(session_browser): + """Test enabling the app.""" + functional.app_disable(session_browser, 'tor') + + functional.app_enable(session_browser, 'tor') + assert functional.service_is_running(session_browser, 'tor') + + functional.app_disable(session_browser, 'tor') + assert functional.service_is_not_running(session_browser, 'tor') -@then(parsers.parse('tor relay should be {enabled:w}')) -def tor_assert_relay_enabled(session_browser, enabled): - _assert_feature_enabled(session_browser, 'relay', enabled) +def test_set_tor_relay_configuration(session_browser): + """Test setting Tor relay configuration.""" + functional.app_enable(session_browser, 'tor') + _feature_enable(session_browser, 'relay', should_enable=False) + _feature_enable(session_browser, 'relay', should_enable=True) + _assert_feature_enabled(session_browser, 'relay', enabled=True) + assert 'orport' in _get_relay_ports(session_browser) -@then(parsers.parse('tor {port_name:w} port should be displayed')) -def tor_assert_port_displayed(session_browser, port_name): - assert port_name in _get_relay_ports(session_browser) +def test_set_tor_bridge_relay_configuration(session_browser): + """Test setting Tor bridge relay configuration.""" + functional.app_enable(session_browser, 'tor') + _feature_enable(session_browser, 'bridge-relay', should_enable=False) + _feature_enable(session_browser, 'bridge-relay', should_enable=True) + _assert_feature_enabled(session_browser, 'bridge-relay', enabled=True) + assert 'obfs3' in _get_relay_ports(session_browser) + assert 'obfs4' in _get_relay_ports(session_browser) -@given(parsers.parse('tor bridge relay is {enabled:w}')) -def tor_given_bridge_relay_enable(session_browser, enabled): - _feature_enable(session_browser, 'bridge-relay', enabled) - - -@when(parsers.parse('I {enable:w} tor bridge relay')) -def tor_bridge_relay_enable(session_browser, enable): - _feature_enable(session_browser, 'bridge-relay', enable) - - -@then(parsers.parse('tor bridge relay should be {enabled:w}')) -def tor_assert_bridge_relay_enabled(session_browser, enabled): - _assert_feature_enabled(session_browser, 'bridge-relay', enabled) - - -@given(parsers.parse('tor hidden services are {enabled:w}')) -def tor_given_hidden_services_enable(session_browser, enabled): - _feature_enable(session_browser, 'hidden-services', enabled) - - -@when(parsers.parse('I {enable:w} tor hidden services')) -def tor_hidden_services_enable(session_browser, enable): - _feature_enable(session_browser, 'hidden-services', enable) - - -@then(parsers.parse('tor hidden services should be {enabled:w}')) -def tor_assert_hidden_services_enabled(session_browser, enabled): - _assert_feature_enabled(session_browser, 'hidden-services', enabled) - - -@then(parsers.parse('tor hidden services information should be displayed')) -def tor_assert_hidden_services(session_browser): +def test_set_tor_hidden_services_configuration(session_browser): + """Test setting Tor hidden services configuration.""" + functional.app_enable(session_browser, 'tor') + _feature_enable(session_browser, 'hidden-services', should_enable=False) + _feature_enable(session_browser, 'hidden-services', should_enable=True) + _assert_feature_enabled(session_browser, 'hidden-services', enabled=True) _assert_hidden_services(session_browser) -@given(parsers.parse('download software packages over tor is {enabled:w}')) -def tor_given_download_software_over_tor_enable(session_browser, enabled): - _feature_enable(session_browser, 'software', enabled) +def test_set_download_software_packages_over_tor(session_browser): + """Test setting download software packages over Tor.""" + functional.app_enable(session_browser, 'tor') + _feature_enable(session_browser, 'software', should_enable=True) + _feature_enable(session_browser, 'software', should_enable=False) + _assert_feature_enabled(session_browser, 'software', enabled=False) -@when(parsers.parse('I {enable:w} download software packages over tor')) -def tor_download_software_over_tor_enable(session_browser, enable): - _feature_enable(session_browser, 'software', enable) +# TODO: Test more thoroughly by checking same hidden service is restored and by +# actually connecting using Tor. +@pytest.mark.backups +def test_backup_restore(session_browser): + """Test backup and restore of configuration.""" + functional.app_enable(session_browser, 'tor') + _feature_enable(session_browser, 'relay', should_enable=True) + _feature_enable(session_browser, 'bridge-relay', should_enable=True) + _feature_enable(session_browser, 'hidden-services', should_enable=True) + functional.backup_create(session_browser, 'tor', 'test_tor') + _feature_enable(session_browser, 'relay', should_enable=False) + _feature_enable(session_browser, 'hidden-services', should_enable=False) + functional.backup_restore(session_browser, 'tor', 'test_tor') -@then( - parsers.parse('download software packages over tor should be {enabled:w}')) -def tor_assert_download_software_over_tor(session_browser, enabled): - _assert_feature_enabled(session_browser, 'software', enabled) + assert functional.service_is_running(session_browser, 'tor') + _assert_feature_enabled(session_browser, 'relay', enabled=True) + _assert_feature_enabled(session_browser, 'bridge-relay', enabled=True) + _assert_feature_enabled(session_browser, 'hidden-services', enabled=True) def _feature_enable(browser, feature, should_enable): """Enable/disable a Tor feature.""" - if not isinstance(should_enable, bool): - should_enable = should_enable in ('enable', 'enabled') - element_name = _TOR_FEATURE_TO_ELEMENT[feature] functional.nav_to_module(browser, 'tor') checkbox_element = browser.find_by_name(element_name).first @@ -113,9 +116,6 @@ def _feature_enable(browser, feature, should_enable): def _assert_feature_enabled(browser, feature, enabled): """Assert whether Tor relay is enabled or disabled.""" - if not isinstance(enabled, bool): - enabled = enabled in ('enable', 'enabled') - element_name = _TOR_FEATURE_TO_ELEMENT[feature] functional.nav_to_module(browser, 'tor') assert browser.find_by_name(element_name).first.checked == enabled diff --git a/plinth/modules/tor/tests/tor.feature b/plinth/modules/tor/tests/tor.feature deleted file mode 100644 index 4bd1f46f9..000000000 --- a/plinth/modules/tor/tests/tor.feature +++ /dev/null @@ -1,60 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later - -@apps @tor -Feature: Tor Anonymity Network - Manage Tor configuration. - -Background: - Given I'm a logged in user - Given the tor application is installed - -Scenario: Enable tor application - Given the tor application is disabled - When I enable the tor application - Then the tor service should be running - -Scenario: Set tor relay configuration - Given tor relay is disabled - When I enable tor relay - Then tor relay should be enabled - And tor orport port should be displayed - -Scenario: Set tor bridge relay configuration - Given tor bridge relay is disabled - When I enable tor bridge relay - Then tor bridge relay should be enabled - And tor obfs3 port should be displayed - And tor obfs4 port should be displayed - -Scenario: Set tor hidden services configuration - Given tor hidden services are disabled - When I enable tor hidden services - Then tor hidden services should be enabled - And tor hidden services information should be displayed - -Scenario: Set download software packages over tor - Given download software packages over tor is enabled - When I disable download software packages over tor - Then download software packages over tor should be disabled - -# TODO: Test more thoroughly by checking same hidden service is restored and by -# actually connecting using Tor. -@backups -Scenario: Backup and restore tor - Given the tor application is enabled - And tor relay is enabled - And tor bridge relay is enabled - And tor hidden services are enabled - When I create a backup of the tor app data with name test_tor - And I disable tor relay - And I disable tor hidden services - And I restore the tor app data backup with name test_tor - Then the tor service should be running - And tor relay should be enabled - And tor bridge relay should be enabled - And tor hidden services should be enabled - -Scenario: Disable tor application - Given the tor application is enabled - When I disable the tor application - Then the tor service should not be running