def setUp(self): """ Check for inputs. """ if self.localOptions['url']: self.input = self.localOptions['url'] if not self.input: raise Exception("No input specified") try: self.localOptions['retries'] = int(self.localOptions['retries']) except ValueError: self.localOptions['retries'] = 2 self.timeout = int(self.localOptions['timeout']) self.report['retries'] = self.localOptions['retries'] self.report['client_resolver'] = self.resolverIp self.report['dns_consistency'] = None self.report['body_length_match'] = None self.report['headers_match'] = None self.report['status_code_match'] = None self.report['accessible'] = None self.report['blocking'] = None self.report['control_failure'] = None self.report['http_experiment_failure'] = None self.report['dns_experiment_failure'] = None self.report['tcp_connect'] = [] self.report['control'] = {} self.hostname = urlparse(self.input).netloc if not self.hostname: raise AbsentHostname('No hostname', self.input) self.control = { 'tcp_connect': {}, 'dns': { 'addrs': [], 'failure': None, }, 'http_request': { 'body_length': -1, 'failure': None, 'status_code': -1, 'headers': {}, 'title': '' } } if isinstance(self.localOptions['backend'], dict): self.web_connectivity_client = WebConnectivityClient( settings=self.localOptions['backend'] ) else: self.web_connectivity_client = WebConnectivityClient( self.localOptions['backend'] )
def test_web_connectivity_client_control(self): wcc = WebConnectivityClient('https://web-connectivity.th.ooni.io') wcc.queryBackend = MagicMock() wcc.queryBackend.return_value = defer.succeed({}) yield wcc.control("http://example.com/", ["127.0.0.1:8080", "127.0.0.1:8082"]) wcc.queryBackend.assert_called_with( 'POST', '/', query={ "http_request": "http://example.com/", "tcp_connect": ["127.0.0.1:8080", "127.0.0.1:8082"] })
def getReachableTestHelper(self, test_helper_name, test_helper_address, test_helper_alternate): # For the moment we look for alternate addresses only of # web_connectivity test helpers. if test_helper_name == 'web-connectivity': for web_connectivity_settings in self.sortAddressesByPriority( test_helper_address, test_helper_alternate): web_connectivity_test_helper = WebConnectivityClient( settings=web_connectivity_settings) if not web_connectivity_test_helper.isSupported(): log.err("Unsupported %s web_connectivity test_helper " "%s" % (web_connectivity_settings['type'], web_connectivity_settings['address'])) continue reachable = yield web_connectivity_test_helper.isReachable() if not reachable: log.err("Unreachable %s web_connectivity test helper %s" % (web_connectivity_settings['type'], web_connectivity_settings['address'])) continue defer.returnValue(web_connectivity_settings) raise e.NoReachableTestHelpers else: defer.returnValue(test_helper_address.encode('ascii'))
def test_web_connectivity_client_is_not_reachable(self): wcc = WebConnectivityClient('https://web-connectivity.th.ooni.io') wcc.queryBackend = MagicMock() wcc.queryBackend.return_value = defer.fail(Exception()) result = yield wcc.isReachable() self.assertEqual(result, False)
def test_web_connectivity_client_is_reachable(self): wcc = WebConnectivityClient('https://web-connectivity.th.ooni.io') wcc.queryBackend = MagicMock() wcc.queryBackend.return_value = defer.succeed({"status": "ok"}) result = yield wcc.isReachable() self.assertEqual(result, True)