commit e6401a516089e2ec665891cb7d750ea233d90089 Author: Arturo Filastò arturo@filasto.net Date: Tue Jul 26 16:14:03 2016 +0200
Fixes to more unittests --- ooni/deck.py | 15 ++++++++++-- ooni/director.py | 14 ++++++----- ooni/scripts/oonideckgen.py | 6 ++--- ooni/scripts/oonireport.py | 6 ++--- ooni/tests/test_oonicli.py | 15 ++++++------ ooni/tests/test_oonideckgen.py | 7 +++--- ooni/tests/test_oonireport.py | 55 +++++++++++++++++++++--------------------- ooni/tests/test_resources.py | 1 + ooni/ui/cli.py | 16 +++++++----- 9 files changed, 78 insertions(+), 57 deletions(-)
diff --git a/ooni/deck.py b/ooni/deck.py index 7b85b5c..4794d30 100644 --- a/ooni/deck.py +++ b/ooni/deck.py @@ -574,6 +574,8 @@ class DeckTask(object): self.cwd = cwd self.data = deepcopy(data)
+ self._skip = False + self.id = ""
self.type = None @@ -612,7 +614,7 @@ class DeckTask(object): self._arbitrary_paths)
annotations = self._get_option('annotations', task_data, {}) - collector_address = self._get_option('collector', task_data, {}) + collector_address = self._get_option('collector', task_data, None)
try: self.output_path = self.global_options['reportfile'] @@ -668,7 +670,13 @@ class DeckTask(object): if task_type not in self._supported_tasks: raise UnknownTaskKey(task_type) self.type = task_type - getattr(self, "_load_"+task_type)(task_data) + try: + getattr(self, "_load_"+task_type)(task_data) + except InputNotFound: + log.debug( + "Will skip running this test because I can't find the input" + ) + self._skip = True
assert len(data) == 0
@@ -930,6 +938,9 @@ class NGDeck(object): yield director.start_tor() yield self.query_bouncer() for task in self._tasks: + if task._skip is True: + log.msg("Skipping running {0}".format(task.name)) + continue if task.type == "ooni": yield self._run_ooni_task(task, director) self._is_setup = False diff --git a/ooni/director.py b/ooni/director.py index c239601..84bc9aa 100644 --- a/ooni/director.py +++ b/ooni/director.py @@ -181,7 +181,7 @@ class Director(object): return nettests
@defer.inlineCallbacks - def _start(self, start_tor, check_incoherences): + def _start(self, start_tor, check_incoherences, create_input_store): self.netTests = self.getNetTests()
if start_tor: @@ -199,15 +199,17 @@ class Director(object): self.notify(DirectorEvent("success", "Looked up Probe IP"))
- yield self.input_store.create(config.probe_ip.geodata["countrycode"]) - self.notify(DirectorEvent("success", - "Created input store")) + if create_input_store: + yield self.input_store.create(config.probe_ip.geodata["countrycode"]) + self.notify(DirectorEvent("success", + "Created input store"))
@defer.inlineCallbacks - def start(self, start_tor=False, check_incoherences=True): + def start(self, start_tor=False, check_incoherences=True, + create_input_store=True): self._director_state = 'starting' try: - yield self._start(start_tor, check_incoherences) + yield self._start(start_tor, check_incoherences, create_input_store) self._director_starting.callback(self._director_state) except Exception as exc: self._director_starting.errback(Failure(exc)) diff --git a/ooni/scripts/oonideckgen.py b/ooni/scripts/oonideckgen.py index b980a2c..10f8673 100644 --- a/ooni/scripts/oonideckgen.py +++ b/ooni/scripts/oonideckgen.py @@ -68,14 +68,14 @@ def generate_deck(options): } ] } - if options["collector"]: + if options["collector"] is not None: deck_data["collector"] = options['collector']
- if options["bouncer"]: + if options["bouncer"] is not None: deck_data["bouncer"] = options['bouncer']
deck = NGDeck(deck_data=deck_data) - with open(options['output']) as fw: + with open(options['output'], 'w+') as fw: deck.write(fw)
print("Deck written to {0}".format(options['output'])) diff --git a/ooni/scripts/oonireport.py b/ooni/scripts/oonireport.py index d75c925..8bcb1af 100644 --- a/ooni/scripts/oonireport.py +++ b/ooni/scripts/oonireport.py @@ -5,7 +5,7 @@ import sys import yaml
from twisted.python import usage -from twisted.internet import defer, task +from twisted.internet import defer, task, reactor
from ooni.constants import CANONICAL_BOUNCER_ONION from ooni.reporter import OONIBReporter, OONIBReportLog @@ -202,10 +202,10 @@ def tor_check(): sys.exit(1)
-def oonireport(reactor, args=sys.argv[1:]): +def oonireport(_reactor=reactor, _args=sys.argv[1:]): options = Options() try: - options.parseOptions(args) + options.parseOptions(_args) except Exception as exc: print("Error: %s" % exc) print(options) diff --git a/ooni/tests/test_oonicli.py b/ooni/tests/test_oonicli.py index 8ca8d0c..c3facee 100644 --- a/ooni/tests/test_oonicli.py +++ b/ooni/tests/test_oonicli.py @@ -2,7 +2,7 @@ import exceptions import os import sys
-import yaml +import json from twisted.internet import defer
from ooni import errors @@ -92,17 +92,18 @@ class TestRunDirector(ConfigTestCase): sys.argv.extend(['-n', '-o', output_file, test_name]) sys.argv.extend(nettest_args) global_options = setupGlobalOptions(False, False, False) - yield runWithDirector(global_options) + yield runWithDirector(global_options, + create_input_store=False) with open(output_file) as f: - entries = yaml.safe_load_all(f) - header = entries.next() + entries = map(json.loads, f) + first_entry = entries[0] try: - first_entry = entries.next() + test_keys = entries[0]['test_keys'] except StopIteration: raise Exception("Missing entry in report") - verify_header(header) + verify_header(first_entry) verify_entry(first_entry) - verify_function(first_entry) + verify_function(test_keys) sys.argv = oldargv
@defer.inlineCallbacks diff --git a/ooni/tests/test_oonideckgen.py b/ooni/tests/test_oonideckgen.py index 11a852f..6ecbaed 100644 --- a/ooni/tests/test_oonideckgen.py +++ b/ooni/tests/test_oonideckgen.py @@ -28,9 +28,10 @@ class TestOONIDeckgen(ConfigTestCase): temp_dir = tempfile.mkdtemp() oonideckgen.generate_deck({ "country-code": "it", - "output": temp_dir, + "output": os.path.join(temp_dir, 'default-deck.yaml'), "collector": None, "bouncer": None }) - with open(os.path.join(temp_dir, "default-user.deck")) as f: - self.assertEqual(len(yaml.safe_load(f)), 3) + with open(os.path.join(temp_dir, "default-deck.yaml")) as f: + deck_data = yaml.safe_load(f) + self.assertEqual(len(deck_data['tasks']), 4) diff --git a/ooni/tests/test_oonireport.py b/ooni/tests/test_oonireport.py index d71a403..4769682 100644 --- a/ooni/tests/test_oonireport.py +++ b/ooni/tests/test_oonireport.py @@ -27,31 +27,31 @@ class TestOONIReport(ConfigTestCase): reporter.finish()
def test_cli_status(self): - mock_tool = MagicMock() - with patch('ooni.report.cli.tool', mock_tool): - from ooni.report import cli - cli.run(["status"]) - self.assertTrue(mock_tool.status.called) + mock_status = MagicMock() + with patch('ooni.scripts.oonireport.status', mock_status): + from ooni.scripts.oonireport import oonireport + oonireport(_args=["status"]) + self.assertTrue(mock_status.called)
- @patch('ooni.report.cli.tor_check', mock_tor_check) + @patch('ooni.scripts.oonireport.tor_check', mock_tor_check) def test_cli_upload(self): - mock_tool = MagicMock() - with patch('ooni.report.cli.tool', mock_tool): - from ooni.report import cli - cli.run(["upload", "dummy.yaml"]) - self.assertTrue(mock_tool.upload.called) + mock_upload = MagicMock() + with patch('ooni.scripts.oonireport.upload', mock_upload): + from ooni.scripts.oonireport import oonireport + oonireport(_args=["upload", "dummy.yaml"]) + self.assertTrue(mock_upload.called)
- @patch('ooni.report.cli.tor_check', mock_tor_check) + @patch('ooni.scripts.oonireport.tor_check', mock_tor_check) def test_cli_upload_all(self): - mock_tool = MagicMock() - with patch('ooni.report.cli.tool', mock_tool): - from ooni.report import cli - cli.run(["upload"]) - self.assertTrue(mock_tool.upload_all.called) - - @patch('ooni.report.cli.CollectorClient') - @patch('ooni.report.cli.OONIBReportLog') - @patch('ooni.report.cli.OONIBReporter') + mock_upload_all = MagicMock() + with patch('ooni.scripts.oonireport.upload_all', mock_upload_all): + from ooni.scripts.oonireport import oonireport + oonireport(_args=["upload"]) + self.assertTrue(mock_upload_all.called) + + @patch('ooni.scripts.oonireport.CollectorClient') + @patch('ooni.scripts.oonireport.OONIBReportLog') + @patch('ooni.scripts.oonireport.OONIBReporter') def test_tool_upload(self, mock_oonib_reporter, mock_oonib_report_log, mock_collector_client):
@@ -67,8 +67,8 @@ class TestOONIReport(ConfigTestCase): report_name = "dummy_report.yaml" self._create_reporting_yaml(report_name) self._write_dummy_report(report_name) - - d = cli.upload(report_name) + from ooni.scripts import oonireport + d = oonireport.upload(report_name) @d.addCallback def cb(result): mock_oonib_reporter_i.writeReportEntry.assert_called_with( @@ -76,9 +76,9 @@ class TestOONIReport(ConfigTestCase): ) return d
- @patch('ooni.report.cli.CollectorClient') - @patch('ooni.report.cli.OONIBReportLog') - @patch('ooni.report.cli.OONIBReporter') + @patch('ooni.scripts.oonireport.CollectorClient') + @patch('ooni.scripts.oonireport.OONIBReportLog') + @patch('ooni.scripts.oonireport.OONIBReporter') def test_tool_upload_all(self, mock_oonib_reporter, mock_oonib_report_log, mock_collector_client):
@@ -96,7 +96,8 @@ class TestOONIReport(ConfigTestCase): self._create_reporting_yaml(report_name) self._write_dummy_report(report_name)
- d = cli.upload_all() + from ooni.scripts import oonireport + d = oonireport.upload_all() @d.addCallback def cb(result): mock_oonib_reporter_i.writeReportEntry.assert_called_with( diff --git a/ooni/tests/test_resources.py b/ooni/tests/test_resources.py index 92961ea..45473e9 100644 --- a/ooni/tests/test_resources.py +++ b/ooni/tests/test_resources.py @@ -32,6 +32,7 @@ SAMPLE_NEW_MANIFEST = { } class TestResourceUpdate(ConfigTestCase): def test_check_for_updates(self): + self.skipTest("Too long without mocks...") return check_for_update()
def test_resources_out_of_date(self): diff --git a/ooni/ui/cli.py b/ooni/ui/cli.py index 6550b3d..57924ec 100644 --- a/ooni/ui/cli.py +++ b/ooni/ui/cli.py @@ -305,10 +305,11 @@ def createDeck(global_options, url=None): return deck
-def runTestWithDirector(director, global_options, url=None, start_tor=True): +def runTestWithDirector(director, global_options, url=None, start_tor=True, + create_input_store=True): deck = createDeck(global_options, url=url)
- d = director.start() + d = director.start(create_input_store=create_input_store) @defer.inlineCallbacks def post_director_start(_): try: @@ -328,7 +329,7 @@ def runTestWithDirector(director, global_options, url=None, start_tor=True): d.addErrback(director_startup_other_failures) return d
-def runWithDirector(global_options): +def runWithDirector(global_options, create_input_store=True): """ Instance the director, parse command line options and start an ooniprobe test! @@ -381,9 +382,12 @@ def runWithDirector(global_options): config.advanced.get("preferred_backend", "onion") == "onion"): start_tor |= True
- return runTestWithDirector(director=director, - start_tor=start_tor, - global_options=global_options) + return runTestWithDirector( + director=director, + start_tor=start_tor, + global_options=global_options, + create_input_store=create_input_store + )
# this variant version of runWithDirector splits the process in two,