From d64af1673af84bf107a12d44723b84f7f9bee5a1 Mon Sep 17 00:00:00 2001 From: Connor Mendenhall Date: Mon, 2 Jun 2014 22:45:51 -0500 Subject: [PATCH] Add unit tests: file stats and port selection. --- test/onionshare_test.py | 92 +++++++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 30 deletions(-) diff --git a/test/onionshare_test.py b/test/onionshare_test.py index 6b2f0873..89bf5d89 100644 --- a/test/onionshare_test.py +++ b/test/onionshare_test.py @@ -1,4 +1,5 @@ from onionshare import * +import tempfile def test_get_platform_returns_env_var(): "get_platform() returns ONIONSHARE_PLATFORM from the environment" @@ -6,10 +7,7 @@ def test_get_platform_returns_env_var(): assert get_platform() == 'TI-83+' def test_get_platform_returns_platform_system(): - """ - get_platform() returns platform.system() when - ONIONSHARE_PLATFORM is not defined - """ + "get_platform() returns platform.system() when ONIONSHARE_PLATFORM is not defined" os.environ.pop('ONIONSHARE_PLATFORM', None) onionshare.platform.system = lambda: 'Sega Saturn' assert get_platform() == 'Sega Saturn' @@ -22,10 +20,7 @@ def test_tails_appends_to_path(): assert sys.path[-1][-13:] == '/../tails/lib' def test_get_hidden_service_dir_windows_with_temp(): - """ - get_hidden_service_dir() uses a temporary directory from the - Windows environment when defined - """ + "get_hidden_service_dir() uses a directory from the Windows environment when defined" onionshare.platform.system = lambda: 'Windows' os.environ['Temp'] = "C:\Internet Explorer\Secrets" expected_path = "C:/Internet Explorer/Secrets/onionshare_hidden_service_port" @@ -64,10 +59,27 @@ def test_tails_open_port(): onionshare.tails_open_port('port') expected_call = [ - '/sbin/iptables', '-I', 'OUTPUT', - '-o', 'lo', '-p', - 'tcp', '--dport', 'port', '-j', 'ACCEPT' - ] + '/sbin/iptables', '-I', 'OUTPUT', + '-o', 'lo', '-p', + 'tcp', '--dport', 'port', '-j', 'ACCEPT' + ] + actual_call = mock_subprocess.last_call_args() + assert actual_call == expected_call + +def test_tails_close_port(): + "tails_close_port() calls iptables with REJECT arg" + onionshare.get_platform = lambda: 'Tails' + onionshare.strings = {'closing_hole': ''} + + mock_subprocess = MockSubprocess() + onionshare.subprocess = mock_subprocess + onionshare.tails_close_port('port') + + expected_call = [ + '/sbin/iptables', '-I', 'OUTPUT', + '-o', 'lo', '-p', + 'tcp', '--dport', 'port', '-j', 'REJECT' + ] actual_call = mock_subprocess.last_call_args() assert actual_call == expected_call @@ -81,26 +93,8 @@ def test_load_strings_loads_other_languages(): "load_strings() loads other languages in different locales" locale.getdefaultlocale = lambda: ('fr_FR', 'UTF-8') load_strings("fr") - print onionshare.strings assert onionshare.strings['calculating_sha1'] == "Calculer un hachage SHA-1." -def test_tails_close_port(): - "tails_close_port() calls iptables with REJECT arg" - onionshare.get_platform = lambda: 'Tails' - onionshare.strings = {'closing_hole': ''} - - mock_subprocess = MockSubprocess() - onionshare.subprocess = mock_subprocess - onionshare.tails_close_port('port') - - expected_call = [ - '/sbin/iptables', '-I', 'OUTPUT', - '-o', 'lo', '-p', - 'tcp', '--dport', 'port', '-j', 'REJECT' - ] - actual_call = mock_subprocess.last_call_args() - assert actual_call == expected_call - def test_generate_slug_length(): "generates a 32-character slug" assert len(slug) == 32 @@ -117,3 +111,41 @@ def test_generate_slug_characters(): def test_starts_with_empty_strings(): "creates an empty strings dict by default" assert strings == {} + +def test_choose_port_returns_a_port_number(): + "choose_port() returns a port number" + assert 1024 <= choose_port() <= 65535 + +def test_choose_port_returns_an_open_port(): + "choose_port() returns an open port" + port = choose_port() + socket.socket().bind(("127.0.0.1", port)) + +def write_tempfile(text): + tempdir = tempfile.mkdtemp() + path = tempdir + "/test-file.txt" + with open(path, "w") as f: + f.write(text) + f.close() + return path + +def test_filehash_returns_correct_hash(): + "file_crunching() returns correct hash" + + text = """ + If you want a picture of the future, imagine a boot stamping on an + encrypted, redundant, distributed filesystem -- forever. + """ + tempfile = write_tempfile(text) + filehash, _ = file_crunching(tempfile) + + assert filehash == 'bc004fe72e6530a545570b4c6ce76bcb78ea526b' + +def test_filehash_returns_correct_size(): + "file_crunching() returns correct size" + + text = "AUSCANNZUKUS has always been at war with Eastasia." + tempfile = write_tempfile(text) + _, filesize = file_crunching(tempfile) + + assert filesize == 50