[tor-commits] [ooni-probe/master] Improve detection logic for web_connectivity

art at torproject.org art at torproject.org
Mon May 30 16:28:33 UTC 2016


commit 4dd1542306a6cb3615cd5844728a689a4be7c998
Author: Arturo Filastò <arturo at filasto.net>
Date:   Tue May 3 15:23:18 2016 +0200

    Improve detection logic for web_connectivity
    
    * Fix printing of exception log
---
 bin/oonireport                             |  2 +-
 ooni/nettests/blocking/web_connectivity.py | 22 +++++++++++++++-------
 ooni/utils/log.py                          |  2 +-
 3 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/bin/oonireport b/bin/oonireport
index 6a79f4c..9f59683 100755
--- a/bin/oonireport
+++ b/bin/oonireport
@@ -14,8 +14,8 @@ def failed(failure):
     r = failure.trap(exceptions.SystemExit,
                      Exception)
     if r != exceptions.SystemExit:
-        log.err("Failed to run oonireport")
         log.exception(failure)
+        log.err("Failed to run oonireport")
         exitCode = 127
     else:
         exitCode = failure.value.code
diff --git a/ooni/nettests/blocking/web_connectivity.py b/ooni/nettests/blocking/web_connectivity.py
index 69fd002..08cae57 100644
--- a/ooni/nettests/blocking/web_connectivity.py
+++ b/ooni/nettests/blocking/web_connectivity.py
@@ -326,8 +326,15 @@ class WebConnectivityTest(httpt.HTTPTest, dnst.DNSTest):
     def determine_blocking(self, experiment_http_response, experiment_dns_answers):
         blocking = False
 
-        if (self.report['http_experiment_failure'] is None and
-                    self.report['control']['http_request']['failure'] is None):
+        control_http_failure = self.report['control']['http_request']['failure']
+        if control_http_failure is not None:
+            control_http_failure = control_http_failure.split(" ")[0]
+
+        experiment_http_failure = self.report['http_experiment_failure']
+        if experiment_http_failure is not None:
+            experiment_http_failure = experiment_http_failure.split(" ")[0]
+
+        if (experiment_http_failure is None and control_http_failure is None):
             self.report['body_length_match'] = self.compare_body_lengths(
                 experiment_http_response)
             self.report['headers_match'] = self.compare_headers(
@@ -340,8 +347,9 @@ class WebConnectivityTest(httpt.HTTPTest, dnst.DNSTest):
             self.report['dns_consistency'] = 'inconsistent'
         tcp_connect = self.compare_tcp_experiments()
 
+
         if (dns_consistent == True and tcp_connect == False and
-                self.report['http_experiment_failure'] is not None):
+                experiment_http_failure is not None):
             blocking = 'tcp_ip'
 
         # XXX we may want to have different codes for these two types of
@@ -350,12 +358,12 @@ class WebConnectivityTest(httpt.HTTPTest, dnst.DNSTest):
                       self.report['body_length_match'] == False):
             blocking = 'http'
         elif (dns_consistent == True and tcp_connect == True and
-                self.report['http_experiment_failure'] is not None and
-                self.report['control']['http_request']['failure'] != self.report['http_experiment_failure']):
+                experiment_http_failure is not None and
+                control_http_failure is None):
             blocking = 'http'
 
         elif (dns_consistent == False and
-                  (self.report['http_experiment_failure'] is not None or
+                  (experiment_http_failure is not None or
                    self.report['body_length_match'] == False)):
             blocking = 'dns'
 
@@ -364,7 +372,7 @@ class WebConnectivityTest(httpt.HTTPTest, dnst.DNSTest):
         # that is only accessible from within the country/network of the probe.
         elif (dns_consistent == False and
                   (self.control['dns']['failure'] is not None or
-                   self.control['http_request']['failure'] is not None)):
+                   control_http_failure != experiment_http_failure)):
             blocking = 'dns'
 
         return blocking
diff --git a/ooni/utils/log.py b/ooni/utils/log.py
index f36c0ff..fd80594 100644
--- a/ooni/utils/log.py
+++ b/ooni/utils/log.py
@@ -111,7 +111,7 @@ def exception(error):
     or it can be a twisted.python.failure.Failure instance.
     """
     if isinstance(error, Failure):
-        error.printTraceback()
+        error.printTraceback(sys.stdout)
     else:
         exc_type, exc_value, exc_traceback = sys.exc_info()
         traceback.print_exception(exc_type, exc_value, exc_traceback)





More information about the tor-commits mailing list