diff options
Diffstat (limited to 'cli/tests/test_cli_settings.py')
-rw-r--r-- | cli/tests/test_cli_settings.py | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/cli/tests/test_cli_settings.py b/cli/tests/test_cli_settings.py new file mode 100644 index 00000000..62f97267 --- /dev/null +++ b/cli/tests/test_cli_settings.py @@ -0,0 +1,147 @@ +import json +import os +import tempfile +import sys + +import pytest + +from onionshare_cli import common, settings + + +@pytest.fixture +def settings_obj(sys_onionshare_dev_mode, platform_linux): + _common = common.Common() + _common.version = "DUMMY_VERSION_1.2.3" + return settings.Settings(_common) + + +class TestSettings: + def test_init(self, settings_obj): + expected_settings = { + "version": "DUMMY_VERSION_1.2.3", + "connection_type": "bundled", + "control_port_address": "127.0.0.1", + "control_port_port": 9051, + "socks_address": "127.0.0.1", + "socks_port": 9050, + "socket_file_path": "/var/run/tor/control", + "auth_type": "no_auth", + "auth_password": "", + "use_autoupdate": True, + "autoupdate_timestamp": None, + "no_bridges": True, + "tor_bridges_use_obfs4": False, + "tor_bridges_use_meek_lite_azure": False, + "tor_bridges_use_custom_bridges": "", + "persistent_tabs": [], + } + for key in settings_obj._settings: + # Skip locale, it will not always default to the same thing + if key != "locale": + assert settings_obj._settings[key] == settings_obj.default_settings[key] + assert settings_obj._settings[key] == expected_settings[key] + + def test_fill_in_defaults(self, settings_obj): + del settings_obj._settings["version"] + settings_obj.fill_in_defaults() + assert settings_obj._settings["version"] == "DUMMY_VERSION_1.2.3" + + def test_load(self, temp_dir, settings_obj): + custom_settings = { + "version": "CUSTOM_VERSION", + "socks_port": 9999, + "use_stealth": True, + } + tmp_file, tmp_file_path = tempfile.mkstemp(dir=temp_dir) + with open(tmp_file, "w") as f: + json.dump(custom_settings, f) + settings_obj.filename = tmp_file_path + settings_obj.load() + + assert settings_obj._settings["version"] == "CUSTOM_VERSION" + assert settings_obj._settings["socks_port"] == 9999 + assert settings_obj._settings["use_stealth"] is True + + os.remove(tmp_file_path) + assert os.path.exists(tmp_file_path) is False + + def test_save(self, monkeypatch, temp_dir, settings_obj): + settings_filename = "default_settings.json" + new_temp_dir = tempfile.mkdtemp(dir=temp_dir) + settings_path = os.path.join(new_temp_dir, settings_filename) + settings_obj.filename = settings_path + settings_obj.save() + with open(settings_path, "r") as f: + settings = json.load(f) + + assert settings_obj._settings == settings + + os.remove(settings_path) + assert os.path.exists(settings_path) is False + + def test_get(self, settings_obj): + assert settings_obj.get("version") == "DUMMY_VERSION_1.2.3" + assert settings_obj.get("connection_type") == "bundled" + assert settings_obj.get("control_port_address") == "127.0.0.1" + assert settings_obj.get("control_port_port") == 9051 + assert settings_obj.get("socks_address") == "127.0.0.1" + assert settings_obj.get("socks_port") == 9050 + assert settings_obj.get("socket_file_path") == "/var/run/tor/control" + assert settings_obj.get("auth_type") == "no_auth" + assert settings_obj.get("auth_password") == "" + assert settings_obj.get("use_autoupdate") is True + assert settings_obj.get("autoupdate_timestamp") is None + assert settings_obj.get("autoupdate_timestamp") is None + assert settings_obj.get("no_bridges") is True + assert settings_obj.get("tor_bridges_use_obfs4") is False + assert settings_obj.get("tor_bridges_use_meek_lite_azure") is False + assert settings_obj.get("tor_bridges_use_custom_bridges") == "" + + def test_set_version(self, settings_obj): + settings_obj.set("version", "CUSTOM_VERSION") + assert settings_obj._settings["version"] == "CUSTOM_VERSION" + + def test_set_control_port_port(self, settings_obj): + settings_obj.set("control_port_port", 999) + assert settings_obj._settings["control_port_port"] == 999 + + settings_obj.set("control_port_port", "NON_INTEGER") + assert settings_obj._settings["control_port_port"] == 9051 + + def test_set_socks_port(self, settings_obj): + settings_obj.set("socks_port", 888) + assert settings_obj._settings["socks_port"] == 888 + + settings_obj.set("socks_port", "NON_INTEGER") + assert settings_obj._settings["socks_port"] == 9050 + + @pytest.mark.skipif(sys.platform != "Darwin", reason="requires Darwin") + def test_filename_darwin(self, monkeypatch, platform_darwin): + obj = settings.Settings(common.Common()) + assert obj.filename == os.path.expanduser( + "~/Library/Application Support/OnionShare-testdata/onionshare.json" + ) + + @pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux") + def test_filename_linux(self, monkeypatch, platform_linux): + obj = settings.Settings(common.Common()) + assert obj.filename == os.path.expanduser( + "~/.config/onionshare-testdata/onionshare.json" + ) + + @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows") + def test_filename_windows(self, monkeypatch, platform_windows): + obj = settings.Settings(common.Common()) + assert obj.filename == os.path.expanduser( + "~\\AppData\\Roaming\\OnionShare-testdata\\onionshare.json" + ) + + def test_set_custom_bridge(self, settings_obj): + settings_obj.set( + "tor_bridges_use_custom_bridges", + "Bridge 45.3.20.65:9050 21300AD88890A49C429A6CB9959CFD44490A8F6E", + ) + assert ( + settings_obj._settings["tor_bridges_use_custom_bridges"] + == "Bridge 45.3.20.65:9050 21300AD88890A49C429A6CB9959CFD44490A8F6E" + ) |