[tor-commits] [ooni-probe/master] Add unittests for OONIB reporter

art at torproject.org art at torproject.org
Fri Feb 28 14:32:21 UTC 2014


commit 4c4ea8b014bed5fae89094a82e81d643a836b76d
Author: Arturo Filastò <art at fuffa.org>
Date:   Fri Jan 31 15:03:03 2014 +0100

    Add unittests for OONIB reporter
---
 ooni/reporter.py            |    2 +-
 ooni/tests/test_reporter.py |   62 +++++++++++++++++++++++++++++++++++++++----
 2 files changed, 58 insertions(+), 6 deletions(-)

diff --git a/ooni/reporter.py b/ooni/reporter.py
index 545997d..7db24aa 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -367,7 +367,7 @@ class OONIBReporter(OReporter):
             log.err("Failed to parse collector response %s" % backend_response)
             log.exception(e)
             raise errors.OONIBReportCreationError
-        
+       
         if response.code == 406:
             # XXX make this more strict
             log.err("The specified input or nettests cannot be submitted to this collector.")
diff --git a/ooni/tests/test_reporter.py b/ooni/tests/test_reporter.py
index 0a4d240..23c1190 100644
--- a/ooni/tests/test_reporter.py
+++ b/ooni/tests/test_reporter.py
@@ -1,24 +1,43 @@
 import yaml
+import json
 import time
+from mock import MagicMock
 
+from twisted.internet import defer
 from twisted.trial import unittest
 
-from ooni.reporter import YAMLReporter
+from ooni.utils.net import StringProducer
+from ooni import errors as e
+from ooni.reporter import YAMLReporter, OONIBReporter
 
 class MockTest(object):
     _start_time = time.time()
     report = {'report_content': 'ham'}
     input = 'spam'
 
+test_details = {
+    'test_name': 'spam',
+    'test_version': '1.0',
+    'software_name': 'spam',
+    'software_version': '1.0',
+    'input_hashes': [],
+    'probe_asn': 'AS0'
+}
+
+oonib_new_report_message = {
+    'report_id': "2014-01-29T202038Z_AS0_"+"A"*50,
+    'backend_version': "1.0"
+}
+
+oonib_generic_error_message = {
+    'error': 'generic-error'
+}
+
 class TestYAMLReporter(unittest.TestCase):
     def setUp(self):
         pass
 
     def test_write_report(self):
-        test_details = {
-                'test_name': 'spam',
-                'test_version': '1.0'
-        }
         test = MockTest()
 
         y_reporter = YAMLReporter(test_details)
@@ -37,3 +56,36 @@ class TestYAMLReporter(unittest.TestCase):
                                  'test_name', 'test_started', \
                                  'test_runtime'])
 
+class TestOONIBReporter(unittest.TestCase):
+    
+    def setUp(self):
+        self.mock_response = {}
+        self.collector_address = 'http://example.com'
+
+        self.oonib_reporter = OONIBReporter(test_details, self.collector_address)
+        self.oonib_reporter.agent = MagicMock()
+        self.mock_agent_response = MagicMock()
+        def deliverBody(body_receiver):
+            body_receiver.dataReceived(json.dumps(self.mock_response))
+            body_receiver.connectionLost(None)
+        self.mock_agent_response.deliverBody = deliverBody
+        self.oonib_reporter.agent.request.return_value = defer.succeed(self.mock_agent_response)
+    
+    @defer.inlineCallbacks
+    def test_create_report(self):
+        self.mock_response = oonib_new_report_message
+        yield self.oonib_reporter.createReport()
+        assert self.oonib_reporter.reportID == oonib_new_report_message['report_id']
+
+    @defer.inlineCallbacks
+    def test_create_report_failure(self):
+        self.mock_response = oonib_generic_error_message
+        self.mock_agent_response.code = 406
+        yield self.assertFailure(self.oonib_reporter.createReport(), e.OONIBReportCreationError)
+
+    @defer.inlineCallbacks
+    def test_write_report_entry(self):
+        req = {'content': 'something'}
+        yield self.oonib_reporter.writeReportEntry(req)
+        assert self.oonib_reporter.agent.request.called
+





More information about the tor-commits mailing list