[tor-commits] [ooni-probe/master] Port captive portal test to new API.

art at torproject.org art at torproject.org
Sat Oct 6 09:37:00 UTC 2012


commit 5cdc37ff80f1c8343e26f94fd7b7a29b3081ed03
Author: Arturo Filastò <arturo at filasto.net>
Date:   Sat Oct 6 09:37:11 2012 +0000

    Port captive portal test to new API.
---
 nettests/captiveportal.py |   57 +++++++++++++++++++--------------------------
 ooni/runner.py            |    2 +-
 2 files changed, 25 insertions(+), 34 deletions(-)

diff --git a/nettests/captiveportal.py b/nettests/captiveportal.py
index 4bf99b3..6eed04d 100644
--- a/nettests/captiveportal.py
+++ b/nettests/captiveportal.py
@@ -18,13 +18,8 @@ import string
 import urllib2
 from urlparse import urlparse
 
-from zope.interface import implements
-from twisted.python import usage
-from twisted.plugin import IPlugin
-
-from ooni.plugoo.assets import Asset
-from ooni.plugoo.tests import ITest, OONITest
-from ooni.protocols import http
+from ooni import nettest
+from ooni.templates import httpt
 from ooni.utils import log
 
 try:
@@ -36,28 +31,21 @@ except ImportError:
 __plugoo__ = "captiveportal"
 __desc__ = "Captive portal detection test"
 
-class CaptivePortalArgs(usage.Options):
-    optParameters = [['asset', 'a', None, 'Asset file'],
-                     ['resume', 'r', 0, 'Resume at this index'],
-                     ['experiment-url', 'e', 'http://google.com/', 'Experiment URL'],
-                     ['user-agent', 'u', random.choice(http.useragents),
-                                         'User agent for HTTP requests']
-                     ]
+optParameters = [['asset', 'a', None, 'Asset file'],
+                 ['experiment-url', 'e', 'http://google.com/', 'Experiment URL'],
+                 ['user-agent', 'u', random.choice(httpt.useragents),
+                  'User agent for HTTP requests']
+                ]
 
-class CaptivePortal(OONITest):
+class CaptivePortal(nettest.TestCase):
     """
     Compares content and status codes of HTTP responses, and attempts
     to determine if content has been altered.
     """
 
-    implements(IPlugin, ITest)
-
-    shortName = "captivep"
+    name = "captivep"
     description = "Captive Portal Test"
     requirements = None
-    options = CaptivePortalArgs
-    # Tells this to be blocking.
-    blocking = True
 
     def http_fetch(self, url, headers={}):
         """
@@ -549,7 +537,9 @@ class CaptivePortal(OONITest):
         in the experimental content. Returns True if matches are found,
         and False if otherwise.
         """
-        experiment_url = self.local_options['experiment-url']
+        # XXX put this back to being parametrized
+        #experiment_url = self.local_options['experiment-url']
+        experiment_url = 'http://google.com/'
         control_result = 'XX'
         control_code = 200
         ua = self.local_options['user-agent']
@@ -565,7 +555,8 @@ class CaptivePortal(OONITest):
         if status_match and content_match:
             log.msg("The test for '%s'" % experiment_url)
             log.msg("was unable to detect a captive portal.")
-            return experiment_result, True
+
+            self.report['result'] = True
 
         elif status_match and not content_match:
             log.msg("Retrying '%s' with fuzzy match enabled."
@@ -574,19 +565,20 @@ class CaptivePortal(OONITest):
                                                                   control_result,
                                                                   fuzzy=True)
             if fuzzy_match:
-                return experiment_result, True
+                self.report['result'] = True
             else:
                 log.msg("Found modified content on '%s'," % experiment_url)
                 log.msg("which could indicate a captive portal.")
 
-                return experiment_result, False
+                self.report['result'] = False
         else:
             log.msg("The content comparison test for ")
             log.msg("'%s'" % experiment_url)
             log.msg("shows that your HTTP traffic is filtered.")
-            return experiment_result, False
 
-    def experiment(self, args):
+            self.report['result'] = False
+
+    def test_captive_portal(self):
         """
         Runs the CaptivePortal(Test).
 
@@ -608,22 +600,21 @@ class CaptivePortal(OONITest):
 
         Any combination of the above tests can be run.
         """
-        report = {}
 
         log.msg("")
         log.msg("Running vendor tests...")
-        report['vendor_tests'] = self.run_vendor_tests()
+        self.report['vendor_tests'] = self.run_vendor_tests()
 
         log.msg("")
         log.msg("Running vendor DNS-based tests...")
-        report['vendor_dns_tests'] = self.run_vendor_dns_tests()
+        self.report['vendor_dns_tests'] = self.run_vendor_dns_tests()
 
         log.msg("")
         log.msg("Checking that DNS requests are not being tampered...")
-        report['check0x20'] = self.check_0x20_to_auth_ns('ooni.nu')
+        self.report['check0x20'] = self.check_0x20_to_auth_ns('ooni.nu')
 
         log.msg("")
         log.msg("Captive portal test finished!")
-        return report
 
-cp = CaptivePortal(None, None, None)
+        self.control(self.report)
+
diff --git a/ooni/runner.py b/ooni/runner.py
index a4c88a9..8ed844d 100644
--- a/ooni/runner.py
+++ b/ooni/runner.py
@@ -6,7 +6,7 @@ import inspect
 
 from twisted.internet import defer, reactor
 from twisted.python import reflect, failure
-#from twisted.python import log
+
 from twisted.trial import unittest
 from twisted.trial.runner import TrialRunner, TestLoader
 from twisted.trial.runner import isPackage, isTestCase, ErrorHolder



More information about the tor-commits mailing list