コード例 #1
0
 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))
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #5
0
 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))
コード例 #6
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 log_client.AsyncLogClient(self.FakeAgent(
         self.FakeHandler(test_util.DEFAULT_URI)),
                                      test_util.DEFAULT_URI,
                                      entries_db=entries_db,
                                      reactor=reactor_)
コード例 #7
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 log_client.AsyncLogClient(self.FakeAgent(mock_handler),
                                      test_util.DEFAULT_URI,
                                      reactor=self.clock)
コード例 #8
0
    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))
コード例 #9
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)

            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
コード例 #10
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)

            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