summaryrefslogtreecommitdiff
path: root/desktop/tests/test_cli_web.py
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/tests/test_cli_web.py')
-rw-r--r--desktop/tests/test_cli_web.py233
1 files changed, 0 insertions, 233 deletions
diff --git a/desktop/tests/test_cli_web.py b/desktop/tests/test_cli_web.py
deleted file mode 100644
index d2802bf3..00000000
--- a/desktop/tests/test_cli_web.py
+++ /dev/null
@@ -1,233 +0,0 @@
-import contextlib
-import inspect
-import io
-import os
-import random
-import re
-import socket
-import sys
-import zipfile
-import tempfile
-import base64
-
-import pytest
-from werkzeug.datastructures import Headers
-
-from onionshare.common import Common
-from onionshare import strings
-from onionshare.web import Web
-from onionshare.settings import Settings
-from onionshare.mode_settings import ModeSettings
-
-DEFAULT_ZW_FILENAME_REGEX = re.compile(r"^onionshare_[a-z2-7]{6}.zip$")
-RANDOM_STR_REGEX = re.compile(r"^[a-z2-7]+$")
-
-
-def web_obj(temp_dir, common_obj, mode, num_files=0):
- """ Creates a Web object, in either share mode or receive mode, ready for testing """
- common_obj.settings = Settings(common_obj)
- strings.load_strings(common_obj)
- mode_settings = ModeSettings(common_obj)
- web = Web(common_obj, False, mode_settings, mode)
- web.generate_password()
- web.running = True
-
- web.app.testing = True
-
- # Share mode
- if mode == "share":
- # Add files
- files = []
- for _ in range(num_files):
- with tempfile.NamedTemporaryFile(delete=False, dir=temp_dir) as tmp_file:
- tmp_file.write(b"*" * 1024)
- files.append(tmp_file.name)
- web.share_mode.set_file_info(files)
- # Receive mode
- else:
- pass
-
- return web
-
-
-class TestWeb:
- def test_share_mode(self, temp_dir, common_obj):
- web = web_obj(temp_dir, common_obj, "share", 3)
- assert web.mode == "share"
- with web.app.test_client() as c:
- # Load / without auth
- res = c.get("/")
- res.get_data()
- assert res.status_code == 401
-
- # Load / with invalid auth
- res = c.get("/", headers=self._make_auth_headers("invalid"))
- res.get_data()
- assert res.status_code == 401
-
- # Load / with valid auth
- res = c.get("/", headers=self._make_auth_headers(web.password))
- res.get_data()
- assert res.status_code == 200
-
- # Download
- res = c.get("/download", headers=self._make_auth_headers(web.password))
- res.get_data()
- assert res.status_code == 200
- assert (
- res.mimetype == "application/zip"
- or res.mimetype == "application/x-zip-compressed"
- )
-
- def test_share_mode_autostop_sharing_on(self, temp_dir, common_obj, temp_file_1024):
- web = web_obj(temp_dir, common_obj, "share", 3)
- web.settings.set("share", "autostop_sharing", True)
-
- assert web.running == True
-
- with web.app.test_client() as c:
- # Download the first time
- res = c.get("/download", headers=self._make_auth_headers(web.password))
- res.get_data()
- assert res.status_code == 200
- assert (
- res.mimetype == "application/zip"
- or res.mimetype == "application/x-zip-compressed"
- )
-
- assert web.running == False
-
- def test_share_mode_autostop_sharing_off(
- self, temp_dir, common_obj, temp_file_1024
- ):
- web = web_obj(temp_dir, common_obj, "share", 3)
- web.settings.set("share", "autostop_sharing", False)
-
- assert web.running == True
-
- with web.app.test_client() as c:
- # Download the first time
- res = c.get("/download", headers=self._make_auth_headers(web.password))
- res.get_data()
- assert res.status_code == 200
- assert (
- res.mimetype == "application/zip"
- or res.mimetype == "application/x-zip-compressed"
- )
- assert web.running == True
-
- def test_receive_mode(self, temp_dir, common_obj):
- web = web_obj(temp_dir, common_obj, "receive")
- assert web.mode == "receive"
-
- with web.app.test_client() as c:
- # Load / without auth
- res = c.get("/")
- res.get_data()
- assert res.status_code == 401
-
- # Load / with invalid auth
- res = c.get("/", headers=self._make_auth_headers("invalid"))
- res.get_data()
- assert res.status_code == 401
-
- # Load / with valid auth
- res = c.get("/", headers=self._make_auth_headers(web.password))
- res.get_data()
- assert res.status_code == 200
-
- def test_public_mode_on(self, temp_dir, common_obj):
- web = web_obj(temp_dir, common_obj, "receive")
- web.settings.set("general", "public", True)
-
- with web.app.test_client() as c:
- # Loading / should work without auth
- res = c.get("/")
- data1 = res.get_data()
- assert res.status_code == 200
-
- def test_public_mode_off(self, temp_dir, common_obj):
- web = web_obj(temp_dir, common_obj, "receive")
- web.settings.set("general", "public", False)
-
- with web.app.test_client() as c:
- # Load / without auth
- res = c.get("/")
- res.get_data()
- assert res.status_code == 401
-
- # But static resources should work without auth
- res = c.get(f"{web.static_url_path}/css/style.css")
- res.get_data()
- assert res.status_code == 200
-
- # Load / with valid auth
- res = c.get("/", headers=self._make_auth_headers(web.password))
- res.get_data()
- assert res.status_code == 200
-
- def _make_auth_headers(self, password):
- auth = base64.b64encode(b"onionshare:" + password.encode()).decode()
- h = Headers()
- h.add("Authorization", "Basic " + auth)
- return h
-
-
-class TestZipWriterDefault:
- @pytest.mark.parametrize(
- "test_input",
- (
- f"onionshare_{''.join(random.choice('abcdefghijklmnopqrstuvwxyz234567') for _ in range(6))}.zip"
- for _ in range(50)
- ),
- )
- def test_default_zw_filename_regex(self, test_input):
- assert bool(DEFAULT_ZW_FILENAME_REGEX.match(test_input))
-
- def test_zw_filename(self, default_zw):
- zw_filename = os.path.basename(default_zw.zip_filename)
- assert bool(DEFAULT_ZW_FILENAME_REGEX.match(zw_filename))
-
- def test_zipfile_filename_matches_zipwriter_filename(self, default_zw):
- assert default_zw.z.filename == default_zw.zip_filename
-
- def test_zipfile_allow_zip64(self, default_zw):
- assert default_zw.z._allowZip64 is True
-
- def test_zipfile_mode(self, default_zw):
- assert default_zw.z.mode == "w"
-
- def test_callback(self, default_zw):
- assert default_zw.processed_size_callback(None) is None
-
- def test_add_file(self, default_zw, temp_file_1024_delete):
- default_zw.add_file(temp_file_1024_delete)
- zipfile_info = default_zw.z.getinfo(os.path.basename(temp_file_1024_delete))
-
- assert zipfile_info.compress_type == zipfile.ZIP_DEFLATED
- assert zipfile_info.file_size == 1024
-
- def test_add_directory(self, temp_dir_1024_delete, default_zw):
- previous_size = default_zw._size # size before adding directory
- default_zw.add_dir(temp_dir_1024_delete)
- assert default_zw._size == previous_size + 1024
-
-
-class TestZipWriterCustom:
- @pytest.mark.parametrize(
- "test_input",
- (
- Common.random_string(
- random.randint(2, 50), random.choice((None, random.randint(2, 50)))
- )
- for _ in range(50)
- ),
- )
- def test_random_string_regex(self, test_input):
- assert bool(RANDOM_STR_REGEX.match(test_input))
-
- def test_custom_filename(self, custom_zw):
- assert bool(RANDOM_STR_REGEX.match(custom_zw.zip_filename))
-
- def test_custom_callback(self, custom_zw):
- assert custom_zw.processed_size_callback(None) == "custom_callback"