mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-21 07:55:00 +00:00
- Includes SocksPort and "Download software packages over Tor" feature,
as well as setting upstream bridges.
- "Download software packages over Tor" option is enabled by default.
- When upgrading, if Tor app was enabled and "Download software
packages over Tor" was enabled, then Tor Proxy will be installed.
- The default tor instance is now called tor@default. The "tor" service
is an multi-instance master that has Wants relation all instances.
Tests:
- Tests for Tor and Tor Proxy passed.
- Enable Tor, and run the tests for Tor Proxy. Afterwards, Tor is still
enabled and running.
- Enable Tor Proxy, and run the tests for Tor. Afterwards, Tor Proxy is
still enabled and running.
- Test setting upstream bridges for Tor and Tor Proxy.
- Install FreedomBox 23.11 in a VM and install Tor with default
settings. Install new FreedomBox version with Tor Proxy. After
install, both Tor and Tor Proxy apps are installed and running.
/etc/tor/instances/{plinth,fbxproxy}/torrc both have expected content.
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""
|
|
Functional, browser based tests for Tor Proxy app.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from plinth.tests import functional
|
|
|
|
_TOR_FEATURE_TO_ELEMENT = {'software': 'torproxy-apt_transport_tor_enabled'}
|
|
|
|
pytestmark = [pytest.mark.apps, pytest.mark.torproxy]
|
|
|
|
|
|
class TestTorProxyApp(functional.BaseAppTests):
|
|
"""Tests for the Tor Proxy app."""
|
|
app_name = 'torproxy'
|
|
has_service = True
|
|
has_web = False
|
|
# TODO: Investigate why accessing IPv6 sites through Tor fails in
|
|
# container.
|
|
check_diagnostics = False
|
|
|
|
def test_set_download_software_packages_over_tor(self, session_browser):
|
|
"""Test setting download software packages over Tor."""
|
|
functional.app_enable(session_browser, 'torproxy')
|
|
_feature_enable(session_browser, 'software', should_enable=True)
|
|
_feature_enable(session_browser, 'software', should_enable=False)
|
|
_assert_feature_enabled(session_browser, 'software', enabled=False)
|
|
|
|
@pytest.mark.backups
|
|
def test_backup_restore(self, session_browser):
|
|
"""Test backup and restore of configuration."""
|
|
functional.app_enable(session_browser, 'torproxy')
|
|
# TODO: Check that upstream bridges are restored.
|
|
functional.backup_create(session_browser, 'torproxy', 'test_torproxy')
|
|
|
|
functional.backup_restore(session_browser, 'torproxy', 'test_torproxy')
|
|
|
|
assert functional.service_is_running(session_browser, 'torproxy')
|
|
|
|
|
|
def _feature_enable(browser, feature, should_enable):
|
|
"""Enable/disable a Tor Proxy feature."""
|
|
element_name = _TOR_FEATURE_TO_ELEMENT[feature]
|
|
functional.nav_to_module(browser, 'torproxy')
|
|
checkbox_element = browser.find_by_name(element_name).first
|
|
if should_enable == checkbox_element.checked:
|
|
return
|
|
|
|
if should_enable:
|
|
checkbox_element.check()
|
|
else:
|
|
checkbox_element.uncheck()
|
|
|
|
functional.submit(browser, form_class='form-configuration')
|
|
functional.wait_for_config_update(browser, 'torproxy')
|
|
|
|
|
|
def _assert_feature_enabled(browser, feature, enabled):
|
|
"""Assert whether Tor Proxy feature is enabled or disabled."""
|
|
element_name = _TOR_FEATURE_TO_ELEMENT[feature]
|
|
functional.nav_to_module(browser, 'torproxy')
|
|
assert browser.find_by_name(element_name).first.checked == enabled
|