Merge branch 'develop' into 868_language

This commit is contained in:
Micah Lee 2019-01-19 21:08:02 -08:00
commit 3de97e2b46
No known key found for this signature in database
GPG Key ID: 403C2657CD994F73
36 changed files with 81 additions and 14 deletions

View File

@ -15,7 +15,7 @@ jobs:
test-3.5: &test-template
docker:
- image: circleci/python:3.5.6
working_directory: ~/repo
steps:
@ -33,7 +33,7 @@ jobs:
# run tests!
- run:
name: run flake tests
command: |
command: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
@ -42,7 +42,7 @@ jobs:
- run:
name: run tests
command: |
xvfb-run pytest --cov=onionshare --cov=onionshare_gui --cov-report=term-missing -vvv tests/
xvfb-run pytest --rungui --cov=onionshare --cov=onionshare_gui --cov-report=term-missing -vvv tests/
test-3.6:
<<: *test-template

View File

@ -155,10 +155,16 @@ Then you can run `pytest` against the `tests/` directory.
pytest tests/
```
You can run GUI tests like this:
```sh
pytest --rungui tests/
```
If you would like to also run the GUI unit tests in 'tor' mode, start Tor Browser in the background, then run:
```sh
pytest --runtor tests/
pytest --rungui --runtor tests/
```
Keep in mind that the Tor tests take a lot longer to run than local mode, but they are also more comprehensive.
@ -166,5 +172,5 @@ Keep in mind that the Tor tests take a lot longer to run than local mode, but th
You can also choose to wrap the tests in `xvfb-run` so that a ton of OnionShare windows don't pop up on your desktop (you may need to install the `xorg-x11-server-Xvfb` package), like this:
```sh
xvfb-run pytest tests/
xvfb-run pytest --rungui tests/
```

View File

@ -1,6 +1,6 @@
[DEFAULT]
Package3: onionshare
Depends3: python3-flask, python3-stem, python3-pyqt5, python3-crypto, python3-socks, python3-distutils, python-nautilus, tor, obfs4proxy
Build-Depends: python3-pytest, python3-flask, python3-stem, python3-pyqt5, python3-crypto, python3-socks, python3-distutils, python-nautilus, tor, obfs4proxy
Depends3: python3, python3-flask, python3-stem, python3-pyqt5, python3-crypto, python3-socks, python3-distutils, python-nautilus, tor, obfs4proxy
Build-Depends: python3, python3-pytest, python3-flask, python3-stem, python3-pyqt5, python3-crypto, python3-socks, python3-distutils, python-nautilus, tor, obfs4proxy
Suite: bionic
X-Python3-Version: >= 3.5.3

View File

@ -11,19 +11,28 @@ import pytest
from onionshare import common, web, settings, strings
def pytest_addoption(parser):
parser.addoption(
"--rungui", action="store_true", default=False, help="run GUI tests"
)
parser.addoption(
"--runtor", action="store_true", default=False, help="run tor tests"
)
def pytest_collection_modifyitems(config, items):
if config.getoption("--runtor"):
if not config.getoption("--runtor"):
# --runtor given in cli: do not skip tor tests
return
skip_tor = pytest.mark.skip(reason="need --runtor option to run")
for item in items:
if "tor" in item.keywords:
item.add_marker(skip_tor)
skip_tor = pytest.mark.skip(reason="need --runtor option to run")
for item in items:
if "tor" in item.keywords:
item.add_marker(skip_tor)
if not config.getoption('--rungui'):
# --rungui given in cli: do not skip GUI tests
skip_gui = pytest.mark.skip(reason="need --rungui option to run")
for item in items:
if "gui" in item.keywords:
item.add_marker(skip_gui)
@pytest.fixture

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -16,6 +17,7 @@ class Local404PublicModeRateLimitTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(True, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -15,6 +16,7 @@ class Local404RateLimitTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from PyQt5 import QtCore, QtTest
@ -16,6 +17,7 @@ class LocalQuittingDuringSharePromptsWarningTest(unittest.TestCase, GuiShareTest
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiReceiveTest import GuiReceiveTest
@ -15,6 +16,7 @@ class LocalReceiveModeSenderClosedTest(unittest.TestCase, GuiReceiveTest):
def tearDownClass(cls):
GuiReceiveTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_receive_mode_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiReceiveTest import GuiReceiveTest
@ -16,6 +17,7 @@ class LocalReceiveModeTimerTest(unittest.TestCase, GuiReceiveTest):
def tearDownClass(cls):
GuiReceiveTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_receive_mode_timer_tests(False)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiReceiveTest import GuiReceiveTest
@ -15,6 +16,7 @@ class LocalReceiveModeUnwritableTest(unittest.TestCase, GuiReceiveTest):
def tearDownClass(cls):
GuiReceiveTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_receive_mode_unwritable_dir_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiReceiveTest import GuiReceiveTest
@ -16,6 +17,7 @@ class LocalReceivePublicModeUnwritableTest(unittest.TestCase, GuiReceiveTest):
def tearDownClass(cls):
GuiReceiveTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_receive_mode_unwritable_dir_tests(True, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiReceiveTest import GuiReceiveTest
@ -16,6 +17,7 @@ class LocalReceiveModePublicModeTest(unittest.TestCase, GuiReceiveTest):
def tearDownClass(cls):
GuiReceiveTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_receive_mode_tests(True, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiReceiveTest import GuiReceiveTest
@ -15,6 +16,7 @@ class LocalReceiveModeTest(unittest.TestCase, GuiReceiveTest):
def tearDownClass(cls):
GuiReceiveTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_receive_mode_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from onionshare import strings
@ -14,6 +15,7 @@ class SettingsGuiTest(unittest.TestCase, SettingsGuiBaseTest):
def tearDownClass(cls):
SettingsGuiBaseTest.tear_down()
@pytest.mark.gui
def test_gui_legacy_tor(self):
self.gui.onion = OnionStub(True, False)
self.gui.reload_settings()

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from onionshare import strings
@ -14,6 +15,7 @@ class SettingsGuiTest(unittest.TestCase, SettingsGuiBaseTest):
def tearDownClass(cls):
SettingsGuiBaseTest.tear_down()
@pytest.mark.gui
def test_gui_no_tor(self):
self.gui.onion = OnionStub(False, False)
self.gui.reload_settings()

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from onionshare import strings
@ -14,6 +15,7 @@ class SettingsGuiTest(unittest.TestCase, SettingsGuiBaseTest):
def tearDownClass(cls):
SettingsGuiBaseTest.tear_down()
@pytest.mark.gui
def test_gui_v3_tor(self):
self.gui.onion = OnionStub(True, True)
self.gui.reload_settings()

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -15,6 +16,7 @@ class LocalShareModePublicModeTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(True, False)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -15,6 +16,7 @@ class LocalShareModeStayOpenTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -14,6 +15,7 @@ class LocalShareModeTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_tests(False, False)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -14,6 +15,7 @@ class LocalShareModeLargeDownloadTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_large_file_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -18,6 +19,7 @@ class LocalShareModePersistentSlugTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_persistent_tests(False, True)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -16,6 +17,7 @@ class LocalShareModeTimerTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_timer_tests(False)

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from PyQt5 import QtCore, QtTest
@ -17,6 +18,7 @@ class LocalShareModeTimerTooShortTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_setup_tests()

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
import pytest
import unittest
from .GuiShareTest import GuiShareTest
@ -14,6 +15,7 @@ class LocalShareModeUnReadableFileTest(unittest.TestCase, GuiShareTest):
def tearDownClass(cls):
GuiShareTest.tear_down()
@pytest.mark.gui
def test_gui(self):
self.run_all_common_setup_tests()
self.run_all_share_mode_unreadable_file_tests()

View File

@ -9,7 +9,7 @@ class ShareModeCancelSecondShareTest(unittest.TestCase, TorGuiShareTest):
@classmethod
def setUpClass(cls):
test_settings = {
"close_after_first_download": True
"close_after_first_download": True
}
cls.gui = TorGuiShareTest.set_up(test_settings)
@ -17,6 +17,7 @@ class ShareModeCancelSecondShareTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -17,6 +17,7 @@ class ReceiveModeTest(unittest.TestCase, TorGuiReceiveTest):
def tearDownClass(cls):
TorGuiReceiveTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -16,6 +16,7 @@ class ReceiveModeTest(unittest.TestCase, TorGuiReceiveTest):
def tearDownClass(cls):
TorGuiReceiveTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -15,6 +15,7 @@ class ShareModeCancelTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -16,6 +16,7 @@ class ShareModePublicModeTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -16,6 +16,7 @@ class ShareModeStayOpenTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -15,6 +15,7 @@ class ShareModeTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -20,6 +20,7 @@ class ShareModePersistentSlugTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -17,6 +17,7 @@ class ShareModeStealthTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -17,6 +17,7 @@ class ShareModeTimerTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -11,6 +11,7 @@ class ShareModeTorConnectionKilledTest(unittest.TestCase, TorGuiShareTest):
}
cls.gui = TorGuiShareTest.set_up(test_settings)
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()

View File

@ -16,6 +16,7 @@ class ShareModeV2OnionTest(unittest.TestCase, TorGuiShareTest):
def tearDownClass(cls):
TorGuiShareTest.tear_down()
@pytest.mark.gui
@pytest.mark.tor
def test_gui(self):
self.run_all_common_setup_tests()