Example #1
0
 def test_get_entries_returns_all_for_limiting_server(self):
     client = async_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)
     # 1 pump in get_entries and 3 more so we fetch everything
     self.pump_get_entries(pumps=3)
     self.assertTrue(test_util.verify_entries(consumer.received, 0, 9))
Example #2
0
 def test_get_entries_raises_if_query_is_larger_than_tree_size(self):
     client = async_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))
Example #3
0
 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 async_log_client.AsyncLogClient(self.FakeAgent(
         self.FakeHandler(test_util.DEFAULT_URI)), test_util.DEFAULT_URI,
                                      entries_db=entries_db,
                                      reactor=reactor_)
Example #4
0
 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 async_log_client.AsyncLogClient(self.FakeAgent(mock_handler),
                                      test_util.DEFAULT_URI,
                                      reactor=self.clock)
Example #5
0
def get_sth():
    agent = twisted_client.Agent(reactor)
    client = async_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_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 = async_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))
Example #7
0
    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)

            try:
                temp_db = temp_db_factory.create_storage(log.log_server)
                client = async_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))
            except:
                logging.error("Error starting monitor for log: %s" % log)
                raise

        self.__last_update_start_time = 0
        self.__stopped = False
        self.__called_later = None