Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Unified Diff: components/certificate_transparency/log_dns_client_unittest.cc

Issue 2331923003: Allow LogDnsClient queries to be rate-limited (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/certificate_transparency/log_dns_client_unittest.cc
diff --git a/components/certificate_transparency/log_dns_client_unittest.cc b/components/certificate_transparency/log_dns_client_unittest.cc
index 64223ef51757768878acef01f6fd8431449782c9..2773cb50e711f4a80a467de490b3a8fe8892b7a8 100644
--- a/components/certificate_transparency/log_dns_client_unittest.cc
+++ b/components/certificate_transparency/log_dns_client_unittest.cc
@@ -9,6 +9,7 @@
#include <utility>
#include <vector>
+#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "components/certificate_transparency/mock_log_dns_traffic.h"
@@ -120,21 +121,42 @@ class LogDnsClientTest : public ::testing::TestWithParam<net::IoMode> {
mock_dns_.InitializeDnsConfig();
}
+ std::unique_ptr<LogDnsClient> CreateLogDnsClient() {
+ return base::MakeUnique<LogDnsClient>(mock_dns_.CreateDnsClient(),
+ net::BoundNetLog());
+ }
+
+ void QueryLeafIndexAsync(LogDnsClient* log_client,
+ base::StringPiece log_domain,
+ base::StringPiece leaf_hash,
+ const LogDnsClient::LeafIndexCallback& callback) {
+ log_client->QueryLeafIndex(log_domain, leaf_hash, callback);
+ }
+
void QueryLeafIndex(base::StringPiece log_domain,
base::StringPiece leaf_hash,
MockLeafIndexCallback* callback) {
- LogDnsClient log_client(mock_dns_.CreateDnsClient(), net::BoundNetLog());
- log_client.QueryLeafIndex(log_domain, leaf_hash, callback->AsCallback());
+ auto log_client = CreateLogDnsClient();
+ QueryLeafIndexAsync(log_client.get(), log_domain, leaf_hash,
+ callback->AsCallback());
callback->WaitUntilRun();
}
+ void QueryAuditProofAsync(LogDnsClient* log_client,
+ base::StringPiece log_domain,
+ uint64_t leaf_index,
+ uint64_t tree_size,
+ const LogDnsClient::AuditProofCallback& callback) {
+ log_client->QueryAuditProof(log_domain, leaf_index, tree_size, callback);
+ }
+
void QueryAuditProof(base::StringPiece log_domain,
uint64_t leaf_index,
uint64_t tree_size,
MockAuditProofCallback* callback) {
- LogDnsClient log_client(mock_dns_.CreateDnsClient(), net::BoundNetLog());
- log_client.QueryAuditProof(log_domain, leaf_index, tree_size,
- callback->AsCallback());
+ auto log_client = CreateLogDnsClient();
+ QueryAuditProofAsync(log_client.get(), log_domain, leaf_index, tree_size,
+ callback->AsCallback());
callback->WaitUntilRun();
}
@@ -543,6 +565,46 @@ TEST_P(LogDnsClientTest, IgnoresLatestDnsConfigIfInvalid) {
EXPECT_THAT(dns_client->GetConfig()->nameservers, Not(IsEmpty()));
}
+TEST_P(LogDnsClientTest, CanBeThrottledToOneQueryAtATime) {
+ const std::vector<std::string> audit_proof = GetSampleAuditProof(20);
+
+ // It should require 3 queries to collect the entire audit proof, as there is
+ // only space for 7 nodes per UDP packet.
+ mock_dns_.ExpectAuditProofRequestAndResponse("0.123456.999999.tree.ct.test.",
+ audit_proof.begin(),
+ audit_proof.begin() + 7);
+ mock_dns_.ExpectAuditProofRequestAndResponse("7.123456.999999.tree.ct.test.",
+ audit_proof.begin() + 7,
+ audit_proof.begin() + 14);
+ mock_dns_.ExpectAuditProofRequestAndResponse("14.123456.999999.tree.ct.test.",
+ audit_proof.begin() + 14,
+ audit_proof.end());
+
+ auto log_client = CreateLogDnsClient();
+ log_client->SetMaxConcurrentQueries(1);
+
+ MockAuditProofCallback callback1;
+ QueryAuditProofAsync(log_client.get(), "ct.test", 123456, 999999,
+ callback1.AsCallback());
+ MockAuditProofCallback callback2;
+ QueryAuditProofAsync(log_client.get(), "ct.test", 123456, 999999,
+ callback2.AsCallback());
+
+ callback1.WaitUntilRun();
+ callback2.WaitUntilRun();
+
+ ASSERT_TRUE(callback1.called());
+ EXPECT_THAT(callback1.net_error(), IsOk());
+ ASSERT_THAT(callback1.proof(), NotNull());
+ EXPECT_THAT(callback1.proof()->leaf_index, 123456);
+ // EXPECT_THAT(callback1.proof()->tree_size, 999999);
+ EXPECT_THAT(callback1.proof()->nodes, audit_proof);
+
+ ASSERT_TRUE(callback2.called());
+ EXPECT_THAT(callback2.net_error(), IsError(net::ERR_TEMPORARILY_THROTTLED));
+ EXPECT_THAT(callback2.proof(), IsNull());
+}
+
INSTANTIATE_TEST_CASE_P(ReadMode,
LogDnsClientTest,
::testing::Values(net::IoMode::ASYNC,

Powered by Google App Engine
This is Rietveld 408576698