[tor-commits] [ooni-probe/master] Implement Report unit tests
isis at torproject.org
isis at torproject.org
Sun Mar 10 01:57:02 UTC 2013
commit aca4ed4fde29d004cb466aa0288846dc9614b5f5
Author: aagbsn <aagbsn at extc.org>
Date: Mon Feb 18 19:32:27 2013 +0100
Implement Report unit tests
---
tests/mocks.py | 35 ++++++++--
tests/test_reporter.py | 169 +++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 182 insertions(+), 22 deletions(-)
diff --git a/tests/mocks.py b/tests/mocks.py
index c7feceb..fed683e 100644
--- a/tests/mocks.py
+++ b/tests/mocks.py
@@ -10,9 +10,9 @@ class MockMeasurementFailOnce(BaseTask):
f.write('fail')
f.close()
if self.failure >= 1:
- return defer.succeed()
+ return defer.succeed(self)
else:
- return defer.fail()
+ return defer.fail(failure.Failure)
class MockMeasurementManager(TaskManager):
def __init__(self):
@@ -33,8 +33,7 @@ class MockReporter(object):
pass
def createReport(self):
- self.created.callback(True)
- return self.created
+ self.created.callback(self)
def finish(self):
pass
@@ -93,7 +92,7 @@ class MockMeasurement(TaskWithTimeout):
self.netTest = net_test
def succeeded(self, result):
- return self.netTest.succeeded(self)
+ return self.netTest.succeeded(42)
class MockSuccessMeasurement(MockMeasurement):
def run(self):
@@ -126,13 +125,35 @@ class MockOReporter(object):
self.created = defer.Deferred()
def writeReportEntry(self, entry):
- pass
+ return defer.succeed(42)
def finish(self):
pass
def createReport(self):
- pass
+ from ooni.utils import log
+ log.debug("Creating report with %s" % self)
+ self.created.callback(self)
+
+class MockOReporterThatFailsWrite(MockOReporter):
+ def writeReportEntry(self, entry):
+ raise MockFailure
+
+class MockOReporterThatFailsOpen(MockOReporter):
+ def createReport(self):
+ self.created.errback(failure.Failure(MockFailure()))
+
+class MockOReporterThatFailsWriteOnce(MockOReporter):
+ def __init__(self):
+ self.failure = 0
+ MockOReporter.__init__(self)
+
+ def writeReportEntry(self, entry):
+ if self.failure >= 1:
+ return defer.succeed(42)
+ else:
+ self.failure += 1
+ raise MockFailure
class MockTaskManager(TaskManager):
def __init__(self):
diff --git a/tests/test_reporter.py b/tests/test_reporter.py
index e99debb..d2fcc4e 100644
--- a/tests/test_reporter.py
+++ b/tests/test_reporter.py
@@ -8,25 +8,164 @@ from ooni.nettest import NetTest, NetTestState
from ooni.tasks import TaskWithTimeout
from tests.mocks import MockOReporter, MockTaskManager
from tests.mocks import MockMeasurement, MockNetTest
+from tests.mocks import MockOReporterThatFailsWrite
+from tests.mocks import MockOReporterThatFailsWriteOnce
+from tests.mocks import MockOReporterThatFailsOpen
-mockReportOptions = {'name':'foo_test', 'version': '0.1'}
-
-class MockState(NetTestState):
- pass
+from twisted.python import failure
class TestReport(unittest.TestCase):
def setUp(self):
- self.taskManager = MockTaskManager()
- self.report = Report([MockOReporter], self.taskManager)
- self.state = MockState()
+ pass
+ def tearDown(self):
+ pass
+ def test_create_report_with_no_reporter(self):
+ report = Report([],ReportEntryManager())
+ self.assertIsInstance(report, Report)
+
+ def test_create_report_with_single_reporter(self):
+ report = Report([MockOReporter()], ReportEntryManager())
+ self.assertIsInstance(report, Report)
+
+ def test_create_report_with_multiple_reporters(self):
+ report = Report([MockOReporter() for x in xrange(3)],
+ ReportEntryManager())
+ self.assertIsInstance(report, Report)
+
+ def test_report_open_with_single_reporter(self):
+ report = Report([MockOReporter()],ReportEntryManager())
+ d = report.open()
+ return d
+
+ def test_report_open_with_multiple_reporter(self):
+ report = Report([MockOReporter() for x in xrange(3)],
+ ReportEntryManager())
+ d = report.open()
+ return d
+
+ def test_fail_to_open_report_with_single_reporter(self):
+ report = Report([MockOReporterThatFailsOpen()],
+ ReportEntryManager())
+ d = report.open()
+ def f(x):
+ self.assertEquals(len(report.reporters), 0)
+ d.addCallback(f)
+ return d
+
+ def test_fail_to_open_single_report_with_multiple_reporter(self):
+ report = Report([MockOReporterThatFailsOpen(), MockOReporter(),
+ MockOReporter()], ReportEntryManager())
+ d = report.open()
+ def f(x):
+ self.assertEquals(len(report.reporters),2)
+ d.addCallback(f)
+ return d
+
+ def test_fail_to_open_all_reports_with_multiple_reporter(self):
+ report = Report([MockOReporterThatFailsOpen() for x in xrange(3)],
+ ReportEntryManager())
+ d = report.open()
+ def f(x):
+ self.assertEquals(len(report.reporters),0)
+ d.addCallback(f)
+ return d
+
+ def test_write_report_with_single_reporter_and_succeed(self):
+ #XXX: verify that the MockOReporter writeReportEntry succeeds
+ report = Report([MockOReporter()], ReportEntryManager())
+ report.open()
+ d = report.write(MockMeasurement(MockNetTest()))
+ return d
+
+ def test_write_report_with_single_reporter_and_fail_after_timeout(self):
+ report = Report([MockOReporterThatFailsWrite()], ReportEntryManager())
+ report.open()
+ d = report.write(MockMeasurement(MockNetTest()))
+ def f(err):
+ self.assertEquals(len(report.reporters),0)
+ d.addBoth(f)
+ return d
+
+ def test_write_report_with_single_reporter_and_succeed_after_timeout(self):
+ report = Report([MockOReporterThatFailsWriteOnce()], ReportEntryManager())
+ report.open()
+ d = report.write(MockMeasurement(MockNetTest()))
+ return d
+
+ def test_write_report_with_multiple_reporter_and_succeed(self):
+ report = Report([MockOReporter() for x in xrange(3)], ReportEntryManager())
+ report.open()
+ d = report.write(MockMeasurement(MockNetTest()))
+ return d
+
+ def test_write_report_with_multiple_reporter_and_fail_a_single_reporter(self):
+ report = Report([MockOReporter(), MockOReporter(), MockOReporterThatFailsWrite()], ReportEntryManager())
+ d = report.open()
+
+ self.assertEquals(len(report.reporters),3)
+ d = report.write(MockMeasurement(MockNetTest()))
+
+ def f(x):
+ # one of the reporters should have been removed
+ self.assertEquals(len(report.reporters), 2)
+ d.addBoth(f)
+ return d
- def test_report_alltasksdone_callback_fires(self):
- for m in range(10):
- measurement = MockMeasurement(MockNetTest())
- self.report.write(measurement)
+ def test_write_report_with_multiple_reporter_and_fail_all_reporter(self):
+ report = Report([MockOReporterThatFailsWrite() for x in xrange(3)], ReportEntryManager())
+ report.open()
+ d = report.write(MockMeasurement(MockNetTest()))
+ def f(err):
+ self.assertEquals(len(report.reporters),0)
+ d.addErrback(f)
+ return d
- @self.report.done.addCallback
- def done(reporters):
- self.assertEqual(len(reporters), 1)
+#class TestYAMLReporter(unittest.TestCase):
+# def setUp(self):
+# pass
+# def tearDown(self):
+# pass
+# def test_create_yaml_reporter(self):
+# raise NotImplementedError
+# def test_open_yaml_report_and_succeed(self):
+# raise NotImplementedError
+# def test_open_yaml_report_and_fail(self):
+# raise NotImplementedError
+# def test_write_yaml_report_entry(self):
+# raise NotImplementedError
+# def test_write_multiple_yaml_report_entry(self):
+# raise NotImplementedError
+# def test_close_yaml_report(self):
+# raise NotImplementedError
+# def test_write_yaml_report_after_close(self):
+# raise NotImplementedError
+# def test_write_yaml_report_before_open(self):
+# raise NotImplementedError
+# def test_close_yaml_report_after_task_complete(self):
+# raise NotImplementedError
- return self.report.done
+#class TestOONIBReporter(unittest.TestCase):
+# def setUp(self):
+# pass
+# def tearDown(self):
+# pass
+# def test_create_oonib_reporter(self):
+# raise NotImplementedError
+# def test_open_oonib_report_and_succeed(self):
+# raise NotImplementedError
+# def test_open_oonib_report_and_fail(self):
+# raise NotImplementedError
+# def test_write_oonib_report_entry_and_succeed(self):
+# raise NotImplementedError
+# def test_write_oonib_report_entry_and_succeed_after_timeout(self):
+# raise NotImplementedError
+# def test_write_oonib_report_entry_and_fail_after_timeout(self):
+# raise NotImplementedError
+# def test_write_oonib_report_after_close(self):
+# raise NotImplementedError
+# def test_write_oonib_report_before_open(self):
+# raise NotImplementedError
+# def test_close_oonib_report_and_succeed(self):
+# raise NotImplementedError
+# def test_close_oonib_report_and_fail(self):
+# raise NotImplementedError
More information about the tor-commits
mailing list