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

Unified Diff: net/ssl/ssl_client_session_cache_unittest.cc

Issue 2625883002: SSLClientSessionCache: Log number of times Lookup is called per Session. (Closed)
Patch Set: reply to comments Created 3 years, 11 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
« no previous file with comments | « net/ssl/ssl_client_session_cache.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/ssl/ssl_client_session_cache_unittest.cc
diff --git a/net/ssl/ssl_client_session_cache_unittest.cc b/net/ssl/ssl_client_session_cache_unittest.cc
index c9cf6f28c4f19ff4d4f50cadad90c42cfc45584c..a30a84ef4a621c4d7c329481eccdeb4608d43448 100644
--- a/net/ssl/ssl_client_session_cache_unittest.cc
+++ b/net/ssl/ssl_client_session_cache_unittest.cc
@@ -50,26 +50,26 @@ TEST(SSLClientSessionCacheTest, Basic) {
EXPECT_EQ(1u, session2->references);
EXPECT_EQ(1u, session3->references);
- EXPECT_EQ(nullptr, cache.Lookup("key1").get());
- EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key2", nullptr).get());
EXPECT_EQ(0u, cache.size());
cache.Insert("key1", session1.get());
- EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
- EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key2", nullptr).get());
EXPECT_EQ(1u, cache.size());
cache.Insert("key2", session2.get());
- EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
- EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", nullptr).get());
EXPECT_EQ(2u, cache.size());
EXPECT_EQ(2u, session1->references);
EXPECT_EQ(2u, session2->references);
cache.Insert("key1", session3.get());
- EXPECT_EQ(session3.get(), cache.Lookup("key1").get());
- EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+ EXPECT_EQ(session3.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", nullptr).get());
EXPECT_EQ(2u, cache.size());
EXPECT_EQ(1u, session1->references);
@@ -77,9 +77,9 @@ TEST(SSLClientSessionCacheTest, Basic) {
EXPECT_EQ(2u, session3->references);
cache.Flush();
- EXPECT_EQ(nullptr, cache.Lookup("key1").get());
- EXPECT_EQ(nullptr, cache.Lookup("key2").get());
- EXPECT_EQ(nullptr, cache.Lookup("key3").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key2", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key3", nullptr).get());
EXPECT_EQ(0u, cache.size());
EXPECT_EQ(1u, session1->references);
@@ -87,6 +87,45 @@ TEST(SSLClientSessionCacheTest, Basic) {
EXPECT_EQ(1u, session3->references);
}
+// Test that pairs of calls to Lookup/ResetLookupCount appropriately log to
+// UMA.
+TEST(SSLClientSessionCacheTest, LookupCountUMA) {
+ SSLClientSessionCache::Config config;
+ SSLClientSessionCache cache(config);
+
+ bssl::UniquePtr<SSL_SESSION> session1(SSL_SESSION_new());
+ bssl::UniquePtr<SSL_SESSION> session2(SSL_SESSION_new());
+ cache.Insert("key1", session1.get());
+ cache.Insert("key2", session2.get());
+
+ // Test that the count returned increments when multiple lookups of the same
+ // key/session occur before the count is reset.
+ int count;
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", &count).get());
+ EXPECT_EQ(1, count);
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", &count).get());
+ EXPECT_EQ(2, count);
+ cache.ResetLookupCount("key1");
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", &count).get());
+ cache.ResetLookupCount("key1");
+ EXPECT_EQ(1, count);
+
+ // Test that independent keys are logged separately.
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", &count).get());
+ EXPECT_EQ(1, count);
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", &count).get());
+ EXPECT_EQ(1, count);
+
+ // Test that the count is 0 if there is a cache miss.
+ EXPECT_EQ(nullptr, cache.Lookup("not present", &count).get());
+ EXPECT_EQ(0, count);
+
+ // Check that ResetLookupCount doesn't explode if there's a cache miss.
+ cache.ResetLookupCount("not present");
+
+ EXPECT_EQ(2u, cache.size());
+}
+
// Test that a session may be inserted at two different keys. This should never
// be necessary, but the API doesn't prohibit it.
TEST(SSLClientSessionCacheTest, DoubleInsert) {
@@ -96,27 +135,27 @@ TEST(SSLClientSessionCacheTest, DoubleInsert) {
bssl::UniquePtr<SSL_SESSION> session(SSL_SESSION_new());
EXPECT_EQ(1u, session->references);
- EXPECT_EQ(nullptr, cache.Lookup("key1").get());
- EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key2", nullptr).get());
EXPECT_EQ(0u, cache.size());
cache.Insert("key1", session.get());
- EXPECT_EQ(session.get(), cache.Lookup("key1").get());
- EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+ EXPECT_EQ(session.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key2", nullptr).get());
EXPECT_EQ(1u, cache.size());
EXPECT_EQ(2u, session->references);
cache.Insert("key2", session.get());
- EXPECT_EQ(session.get(), cache.Lookup("key1").get());
- EXPECT_EQ(session.get(), cache.Lookup("key2").get());
+ EXPECT_EQ(session.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session.get(), cache.Lookup("key2", nullptr).get());
EXPECT_EQ(2u, cache.size());
EXPECT_EQ(3u, session->references);
cache.Flush();
- EXPECT_EQ(nullptr, cache.Lookup("key1").get());
- EXPECT_EQ(nullptr, cache.Lookup("key2").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key2", nullptr).get());
EXPECT_EQ(0u, cache.size());
EXPECT_EQ(1u, session->references);
@@ -137,26 +176,26 @@ TEST(SSLClientSessionCacheTest, MaxEntries) {
cache.Insert("key1", session1.get());
cache.Insert("key2", session2.get());
cache.Insert("key3", session3.get());
- EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
- EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
- EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", nullptr).get());
+ EXPECT_EQ(session3.get(), cache.Lookup("key3", nullptr).get());
EXPECT_EQ(3u, cache.size());
// On insertion of a fourth, the first is removed.
cache.Insert("key4", session4.get());
- EXPECT_EQ(nullptr, cache.Lookup("key1").get());
- EXPECT_EQ(session4.get(), cache.Lookup("key4").get());
- EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
- EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session4.get(), cache.Lookup("key4", nullptr).get());
+ EXPECT_EQ(session3.get(), cache.Lookup("key3", nullptr).get());
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", nullptr).get());
EXPECT_EQ(3u, cache.size());
// Despite being newest, the next to be removed is session4 as it was accessed
// least. recently.
cache.Insert("key1", session1.get());
- EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
- EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
- EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
- EXPECT_EQ(nullptr, cache.Lookup("key4").get());
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", nullptr).get());
+ EXPECT_EQ(session3.get(), cache.Lookup("key3", nullptr).get());
+ EXPECT_EQ(nullptr, cache.Lookup("key4", nullptr).get());
EXPECT_EQ(3u, cache.size());
}
@@ -192,18 +231,18 @@ TEST(SSLClientSessionCacheTest, Expiration) {
// Perform one fewer lookup than needed to trigger the expiration check. This
// shall not expire any session.
for (size_t i = 0; i < kExpirationCheckCount - 1; i++)
- cache.Lookup("key");
+ cache.Lookup("key", nullptr);
// All entries are still in the cache.
EXPECT_EQ(kNumEntries, cache.size());
// Perform one more lookup. This will expire all sessions but the last one.
- cache.Lookup("key");
+ cache.Lookup("key", nullptr);
EXPECT_EQ(1u, cache.size());
- EXPECT_EQ(session.get(), cache.Lookup("key").get());
+ EXPECT_EQ(session.get(), cache.Lookup("key", nullptr).get());
for (size_t i = 0; i < kNumEntries - 1; i++) {
SCOPED_TRACE(i);
- EXPECT_EQ(nullptr, cache.Lookup(base::SizeTToString(i)));
+ EXPECT_EQ(nullptr, cache.Lookup(base::SizeTToString(i), nullptr));
}
}
@@ -225,7 +264,7 @@ TEST(SSLClientSessionCacheTest, LookupExpirationCheck) {
bssl::UniquePtr<SSL_SESSION> session =
MakeTestSession(clock->Now(), kTimeout);
cache.Insert("key", session.get());
- EXPECT_EQ(session.get(), cache.Lookup("key").get());
+ EXPECT_EQ(session.get(), cache.Lookup("key", nullptr).get());
EXPECT_EQ(1u, cache.size());
// Expire the session.
@@ -235,24 +274,24 @@ TEST(SSLClientSessionCacheTest, LookupExpirationCheck) {
EXPECT_EQ(1u, cache.size());
// But it will not be returned on lookup and gets pruned at that point.
- EXPECT_EQ(nullptr, cache.Lookup("key").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key", nullptr).get());
EXPECT_EQ(0u, cache.size());
// Re-inserting a session does not refresh the lifetime. The expiration
// information in the session is used.
cache.Insert("key", session.get());
- EXPECT_EQ(nullptr, cache.Lookup("key").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key", nullptr).get());
EXPECT_EQ(0u, cache.size());
// Re-insert a fresh copy of the session.
session = MakeTestSession(clock->Now(), kTimeout);
cache.Insert("key", session.get());
- EXPECT_EQ(session.get(), cache.Lookup("key").get());
+ EXPECT_EQ(session.get(), cache.Lookup("key", nullptr).get());
EXPECT_EQ(1u, cache.size());
// Sessions also are treated as expired if the clock rewinds.
clock->Advance(base::TimeDelta::FromSeconds(-1));
- EXPECT_EQ(nullptr, cache.Lookup("key").get());
+ EXPECT_EQ(nullptr, cache.Lookup("key", nullptr).get());
EXPECT_EQ(0u, cache.size());
}
@@ -273,7 +312,7 @@ TEST(SSLClientSessionCacheTest, TestFlushOnMemoryNotifications) {
bssl::UniquePtr<SSL_SESSION> session1 =
MakeTestSession(clock->Now(), kTimeout);
cache.Insert("key1", session1.get());
- EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", nullptr).get());
EXPECT_EQ(1u, cache.size());
// Expire the session.
@@ -291,8 +330,8 @@ TEST(SSLClientSessionCacheTest, TestFlushOnMemoryNotifications) {
// Expired session's cache should be flushed.
// Lookup returns nullptr, when cache entry not found.
- EXPECT_FALSE(cache.Lookup("key1"));
- EXPECT_TRUE(cache.Lookup("key2"));
+ EXPECT_FALSE(cache.Lookup("key1", nullptr));
+ EXPECT_TRUE(cache.Lookup("key2", nullptr));
EXPECT_EQ(1u, cache.size());
// Fire notification that will flush everything.
@@ -315,9 +354,9 @@ TEST(SSLClientSessionCacheTest, TestDumpMemoryStats) {
cache.Insert("key1", session1.get());
cache.Insert("key2", session2.get());
cache.Insert("key3", session3.get());
- EXPECT_EQ(session1.get(), cache.Lookup("key1").get());
- EXPECT_EQ(session2.get(), cache.Lookup("key2").get());
- EXPECT_EQ(session3.get(), cache.Lookup("key3").get());
+ EXPECT_EQ(session1.get(), cache.Lookup("key1", nullptr).get());
+ EXPECT_EQ(session2.get(), cache.Lookup("key2", nullptr).get());
+ EXPECT_EQ(session3.get(), cache.Lookup("key3", nullptr).get());
EXPECT_EQ(3u, cache.size());
base::trace_event::MemoryDumpArgs dump_args = {
« no previous file with comments | « net/ssl/ssl_client_session_cache.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698