diff options
author | Micah Lee <micah@micahflee.com> | 2021-05-25 16:27:26 -0700 |
---|---|---|
committer | Micah Lee <micah@micahflee.com> | 2021-05-25 16:27:26 -0700 |
commit | c682b7ec01bdd395a0bbc8e652473bc9de90067b (patch) | |
tree | 7e61b1b0ee5e5a9198b7e981a30ebca0a93306f9 /desktop | |
parent | 7ef5a99c0a6a5b54798ccd39bd4e604cfd5c004d (diff) | |
parent | d4d6eea500feb825d5639354b8aad1be6ba451f5 (diff) | |
download | onionshare-c682b7ec01bdd395a0bbc8e652473bc9de90067b.tar.gz onionshare-c682b7ec01bdd395a0bbc8e652473bc9de90067b.zip |
Merge branch 'fix_405_error_and_other_methods' of https://github.com/mig5/onionshare into mig5-fix_405_error_and_other_methods
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/tests/gui_base_test.py | 14 | ||||
-rw-r--r-- | desktop/tests/test_gui_chat.py | 55 | ||||
-rw-r--r-- | desktop/tests/test_gui_receive.py | 19 | ||||
-rw-r--r-- | desktop/tests/test_gui_share.py | 17 | ||||
-rw-r--r-- | desktop/tests/test_gui_website.py | 16 |
5 files changed, 94 insertions, 27 deletions
diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py index 3a38ff8e..acaa9739 100644 --- a/desktop/tests/gui_base_test.py +++ b/desktop/tests/gui_base_test.py @@ -465,6 +465,20 @@ class GuiBaseTest(unittest.TestCase): # We should have timed out now self.assertEqual(tab.get_mode().server_status.status, 0) + def hit_405(self, url, expected_resp, data = {}, methods = [] ): + """Test various HTTP methods and the response""" + for method in methods: + if method == "put": + r = requests.put(url, data = data) + if method == "post": + r = requests.post(url, data = data) + if method == "delete": + r = requests.delete(url) + if method == "options": + r = requests.options(url) + self.assertTrue(expected_resp in r.text) + self.assertFalse('Werkzeug' in r.headers) + # Grouped tests follow from here def run_all_common_setup_tests(self): diff --git a/desktop/tests/test_gui_chat.py b/desktop/tests/test_gui_chat.py index 08c619c6..15ecaa44 100644 --- a/desktop/tests/test_gui_chat.py +++ b/desktop/tests/test_gui_chat.py @@ -30,7 +30,7 @@ class TestChat(GuiBaseTest): def change_username(self, tab): """Test that we can change our username""" url = f"http://127.0.0.1:{tab.app.port}/update-session-username" - data = {"username":"oniontest"} + data = {"username": "oniontest"} if tab.settings.get("general", "public"): r = requests.post(url, json=data) else: @@ -47,28 +47,7 @@ class TestChat(GuiBaseTest): self.assertTrue(jsonResponse["success"]) self.assertEqual(jsonResponse["username"], "oniontest") - def change_username_too_long(self, tab): - """Test that we can't set our username to something 128 chars or longer""" - url = f"http://127.0.0.1:{tab.app.port}/update-session-username" - bad_username = "sduBB9yEMkyQpwkMM4A9nUbQwNUbPU2PQuJYN26zCQ4inELpB76J5i5oRUnD3ESVaE9NNE8puAtBj2DiqDaZdVqhV8MonyxSSGHRv87YgM5dzwBYPBxttoQSKZAUkFjo" - data = {"username":bad_username} - if tab.settings.get("general", "public"): - r = requests.post(url, json=data) - else: - r = requests.post( - url, - json=data, - auth=requests.auth.HTTPBasicAuth( - "onionshare", tab.get_mode().server_status.web.password - ), - ) - - QtTest.QTest.qWait(500, self.gui.qtapp) - jsonResponse = r.json() - self.assertFalse(jsonResponse["success"]) - self.assertNotEqual(jsonResponse["username"], bad_username) - - def run_all_chat_mode_tests(self, tab): + def run_all_chat_mode_started_tests(self, tab): """Tests in chat mode after starting a chat""" self.server_working_on_start_button_pressed(tab) self.server_status_indicator_says_starting(tab) @@ -79,9 +58,9 @@ class TestChat(GuiBaseTest): self.have_copy_url_button(tab) self.have_show_qr_code_button(tab) self.server_status_indicator_says_started(tab) - self.view_chat(tab) - self.change_username(tab) - self.change_username_too_long(tab) + + def run_all_chat_mode_stopping_tests(self, tab): + """Tests stopping a chat""" self.server_is_stopped(tab) self.web_server_is_stopped(tab) self.server_status_indicator_says_closed(tab) @@ -93,5 +72,27 @@ class TestChat(GuiBaseTest): Test chat mode """ tab = self.new_chat_tab() - self.run_all_chat_mode_tests(tab) + self.run_all_chat_mode_started_tests(tab) + self.view_chat(tab) + self.change_username(tab) + self.run_all_chat_mode_stopping_tests(tab) + self.close_all_tabs() + + def test_405_page_returned_for_invalid_methods(self): + """ + Our custom 405 page should return for invalid methods + """ + tab = self.new_chat_tab() + + tab.get_mode().mode_settings_widget.public_checkbox.click() + + self.run_all_chat_mode_started_tests(tab) + url = f"http://127.0.0.1:{tab.app.port}/" + self.hit_405( + url, + expected_resp="OnionShare: 405 Method Not Allowed", + data={"foo": "bar"}, + methods=["put", "post", "delete", "options"], + ) + self.run_all_chat_mode_stopping_tests(tab) self.close_all_tabs() diff --git a/desktop/tests/test_gui_receive.py b/desktop/tests/test_gui_receive.py index 6e14ae67..b523b0fa 100644 --- a/desktop/tests/test_gui_receive.py +++ b/desktop/tests/test_gui_receive.py @@ -286,3 +286,22 @@ class TestReceive(GuiBaseTest): self.run_all_upload_non_writable_dir_tests(tab) self.close_all_tabs() + + def test_405_page_returned_for_invalid_methods(self): + """ + Our custom 405 page should return for invalid methods + """ + tab = self.new_receive_tab() + + tab.get_mode().mode_settings_widget.public_checkbox.click() + + self.run_all_common_setup_tests() + self.run_all_receive_mode_setup_tests(tab) + self.upload_file(tab, self.tmpfile_test, "test.txt") + url = f"http://127.0.0.1:{tab.app.port}/" + self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"]) + + self.server_is_stopped(tab) + self.web_server_is_stopped(tab) + self.server_status_indicator_says_closed(tab) + self.close_all_tabs() diff --git a/desktop/tests/test_gui_share.py b/desktop/tests/test_gui_share.py index 380d63f6..531e456f 100644 --- a/desktop/tests/test_gui_share.py +++ b/desktop/tests/test_gui_share.py @@ -608,3 +608,20 @@ class TestShare(GuiBaseTest): self.hit_401(tab) self.close_all_tabs() + + def test_405_page_returned_for_invalid_methods(self): + """ + Our custom 405 page should return for invalid methods + """ + tab = self.new_share_tab() + + tab.get_mode().autostop_sharing_checkbox.click() + tab.get_mode().mode_settings_widget.public_checkbox.click() + + self.run_all_common_setup_tests() + self.run_all_share_mode_setup_tests(tab) + self.run_all_share_mode_started_tests(tab) + url = f"http://127.0.0.1:{tab.app.port}/" + self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"]) + self.history_widgets_present(tab) + self.close_all_tabs() diff --git a/desktop/tests/test_gui_website.py b/desktop/tests/test_gui_website.py index a838cb96..f526756a 100644 --- a/desktop/tests/test_gui_website.py +++ b/desktop/tests/test_gui_website.py @@ -99,3 +99,19 @@ class TestWebsite(GuiBaseTest): tab.get_mode().disable_csp_checkbox.click() self.run_all_website_mode_download_tests(tab) self.close_all_tabs() + + def test_405_page_returned_for_invalid_methods(self): + """ + Our custom 405 page should return for invalid methods + """ + tab = self.new_website_tab() + + tab.get_mode().mode_settings_widget.public_checkbox.click() + + self.run_all_common_setup_tests() + self.run_all_website_mode_setup_tests(tab) + self.run_all_website_mode_started_tests(tab) + url = f"http://127.0.0.1:{tab.app.port}/" + self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"]) + + self.close_all_tabs() |