def test_get_entries_returns_all_for_limiting_server(self): client = log_client.AsyncLogClient(self.FakeAgent( self.FakeHandler(test_util.DEFAULT_URI, entry_limit=3)), test_util.DEFAULT_URI, reactor=self.clock) consumer = self.get_entries(client, 0, 9) self.assertTrue(test_util.verify_entries(consumer.received, 0, 9))
def default_client(self): # A client whose responder is configured to answer queries for the # correct uri. return log_client.AsyncLogClient(self.FakeAgent( self.FakeHandler(test_util.DEFAULT_URI)), test_util.DEFAULT_URI, reactor=self.clock)
def test_get_entries_returns_partial_if_log_returns_partial(self): client = log_client.AsyncLogClient(self.FakeAgent( self.FakeHandler(test_util.DEFAULT_URI, tree_size=3)), test_util.DEFAULT_URI, reactor=self.clock) consumer = self.get_entries(client, 0, 9) self.assertTrue(consumer.result.check(log_client.HTTPClientError)) self.assertTrue(test_util.verify_entries(consumer.received, 0, 2))
def get_sth(): agent = twisted_client.Agent(reactor) client = log_client.AsyncLogClient(agent, "https://ct.googleapis.com/pilot") d = client.get_sth() # Print the STH on success. d.addCallback(sth_callback) # Stop the reactor whether we succeeded or not. d.addBoth(stop_callback)
def test_get_entries_raises_if_query_is_larger_than_tree_size(self): client = log_client.AsyncLogClient(self.FakeAgent( self.FakeHandler(test_util.DEFAULT_URI, tree_size=3)), test_util.DEFAULT_URI, reactor=self.clock) consumer = self.get_entries(client, 0, 9) # also pump error self.pump_get_entries() self.assertTrue(consumer.result.check(log_client.HTTPClientError))
def default_client(self, entries_db=None, reactor_=None): # A client whose responder is configured to answer queries for the # correct uri. if reactor_ is None: reactor_ = self.clock return log_client.AsyncLogClient(self.FakeAgent( self.FakeHandler(test_util.DEFAULT_URI)), test_util.DEFAULT_URI, entries_db=entries_db, reactor=reactor_)
def one_shot_client(self, json_content): """Make a one-shot client and give it a mock response.""" mock_handler = mock.Mock() response = self.FakeHandler.make_response(200, "OK", json_content=json_content) mock_handler.get_response.return_value = response return log_client.AsyncLogClient(self.FakeAgent(mock_handler), test_util.DEFAULT_URI, reactor=self.clock)
def test_get_entries_returns_all_in_batches(self): mock_handler = mock.Mock() fake_responder = self.FakeHandler(test_util.DEFAULT_URI) mock_handler.get_response.side_effect = (fake_responder.get_response) client = log_client.AsyncLogClient(self.FakeAgent(mock_handler), test_util.DEFAULT_URI, reactor=self.clock) consumer = self.get_entries(client, 0, 9, batch_size=4) self.assertEqual(10, consumer.result) self.assertTrue(test_util.verify_entries(consumer.received, 0, 9)) self.assertEqual(3, len(mock_handler.get_response.call_args_list))
def __init__(self, ct_logs, db, cert_db, temp_db_factory, monitor_state_dir, agent=None, state_keeper_class=None): """Initialize from a CtLogs proto.""" threading.Thread.__init__(self) self.__monitors = [] self.__db = db if not agent: agent = twisted_client.Agent(reactor) if not state_keeper_class: state_keeper_class = state.StateKeeper for log in ct_logs.ctlog: if not log.log_server or not log.log_id or not log.public_key_info: raise RuntimeError("Cannot start monitor: log proto has " "missing or empty fields: %s" % log) temp_db = temp_db_factory.create_storage(log.log_server) client = log_client.AsyncLogClient(agent, log.log_server, temp_db) hasher = merkle.TreeHasher() verifier = verify.LogVerifier(log.public_key_info, merkle.MerkleVerifier(hasher)) # Convert from standard Base64 to URL-safe Base64 so that the log ID # can be used as part of a file path. log_id_urlsafe = log.log_id.replace('/', '_').replace('+', '-') state_keeper = state_keeper_class(monitor_state_dir + "/" + log_id_urlsafe) log_key = db.get_log_id(log.log_server) self.__monitors.append( monitor.Monitor(client, verifier, hasher, db, cert_db, log_key, state_keeper)) self.__last_update_start_time = 0 self.__stopped = False self.__called_later = None
def __init__(self, ct_logs, db, cert_db, temp_db_factory, monitor_state_dir, agent=None, state_keeper_class=None): """Initialize from a CtLogs proto.""" threading.Thread.__init__(self) self.__monitors = [] self.__db = db if not agent: agent = twisted_client.Agent(reactor) if not state_keeper_class: state_keeper_class = state.StateKeeper for log in ct_logs.ctlog: if not log.log_server or not log.log_id or not log.public_key_info: raise RuntimeError("Cannot start monitor: log proto has " "missing or empty fields: %s" % log) temp_db = temp_db_factory.create_storage(log.log_server) client = log_client.AsyncLogClient(agent, log.log_server, temp_db) hasher = merkle.TreeHasher() verifier = verify.LogVerifier(log.public_key_info, merkle.MerkleVerifier(hasher)) state_keeper = state_keeper_class(FLAGS.monitor_state_dir + "/" + log.log_id) log_key = db.get_log_id(log.log_server) self.__monitors.append( monitor.Monitor(client, verifier, hasher, db, cert_db, log_key, state_keeper)) self.__last_update_start_time = 0 self.__stopped = False