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

Unified Diff: chrome/browser/extensions/api/feedback_private/log_source_access_manager_unittest.cc

Issue 2840103002: Add new API function: feedbackPrivate.readLogSource (Closed)
Patch Set: Rebased; updated histogram enum Created 3 years, 7 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: chrome/browser/extensions/api/feedback_private/log_source_access_manager_unittest.cc
diff --git a/chrome/browser/extensions/api/feedback_private/log_source_access_manager_unittest.cc b/chrome/browser/extensions/api/feedback_private/log_source_access_manager_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ab8b338072b3c895ec0dabd7447346d80c894f2d
--- /dev/null
+++ b/chrome/browser/extensions/api/feedback_private/log_source_access_manager_unittest.cc
@@ -0,0 +1,302 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/feedback_private/log_source_access_manager.h"
+
+#include <string>
+#include <utility>
+
+#include "base/macros.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+namespace {
+
+using extensions::api::feedback_private::LOG_SOURCE_MESSAGES;
+using extensions::api::feedback_private::LOG_SOURCE_UI_LATEST;
+using SourceAndExtension = LogSourceAccessManager::SourceAndExtension;
+
+} // namespace
+
+TEST(LogSourceAccessManagerTest, Empty) {
+ LogSourceAccessManager manager;
+
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_TRUE(manager
+ .GetLastExtensionAccessTime(
+ SourceAndExtension(LOG_SOURCE_UI_LATEST, ""))
+ .is_null());
+}
+
+TEST(LogSourceAccessManagerTest, OneSourceOneExtension) {
+ LogSourceAccessManager manager;
+
+ const SourceAndExtension key(LOG_SOURCE_MESSAGES, "aaaa");
+
+ EXPECT_TRUE(manager.AddExtension(key));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.AddExtension(key));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ EXPECT_TRUE(manager.RemoveExtension(key));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.RemoveExtension(key));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+}
+
+TEST(LogSourceAccessManagerTest, OneSourceMultipleExtensions) {
+ LogSourceAccessManager manager;
+
+ const SourceAndExtension key_a(LOG_SOURCE_MESSAGES, "aaaa");
+ const SourceAndExtension key_b(LOG_SOURCE_MESSAGES, "bbbb");
+ const SourceAndExtension key_c(LOG_SOURCE_MESSAGES, "cccc");
+ const SourceAndExtension key_d(LOG_SOURCE_MESSAGES, "dddd");
+
+ // Add extensions "aaaa", "bbbb", and "cccc".
+ EXPECT_TRUE(manager.AddExtension(key_a));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.AddExtension(key_a));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ EXPECT_TRUE(manager.AddExtension(key_b));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.AddExtension(key_b));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ EXPECT_TRUE(manager.AddExtension(key_c));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.AddExtension(key_c));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ // Remove extensions "bbbb" and "aaaa".
+ EXPECT_TRUE(manager.RemoveExtension(key_b));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.RemoveExtension(key_b));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_a));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.RemoveExtension(key_a));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ // Add extension "dddd".
+ EXPECT_TRUE(manager.AddExtension(key_d));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.AddExtension(key_d));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ // Remove extensions "cccc" and "dddd".
+ EXPECT_TRUE(manager.RemoveExtension(key_c));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.RemoveExtension(key_c));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_d));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_FALSE(manager.RemoveExtension(key_d));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+}
+
+TEST(LogSourceAccessManagerTest, MultipleSourcesMultipleExtensions) {
+ LogSourceAccessManager manager;
+
+ const SourceAndExtension key_a0(LOG_SOURCE_MESSAGES, "aaaa");
+ const SourceAndExtension key_a1(LOG_SOURCE_UI_LATEST, "aaaa");
+ const SourceAndExtension key_b0(LOG_SOURCE_MESSAGES, "bbbb");
+ const SourceAndExtension key_b1(LOG_SOURCE_UI_LATEST, "bbbb");
+ const SourceAndExtension key_c0(LOG_SOURCE_MESSAGES, "cccc");
+ const SourceAndExtension key_c1(LOG_SOURCE_UI_LATEST, "cccc");
+
+ // Add the above entries.
+ EXPECT_TRUE(manager.AddExtension(key_a0));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_TRUE(manager.AddExtension(key_a1));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.AddExtension(key_a0));
+ EXPECT_FALSE(manager.AddExtension(key_a1));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.AddExtension(key_b0));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_TRUE(manager.AddExtension(key_b1));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.AddExtension(key_b0));
+ EXPECT_FALSE(manager.AddExtension(key_b1));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.AddExtension(key_c1));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.AddExtension(key_c1));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_TRUE(manager.AddExtension(key_c0));
+ EXPECT_FALSE(manager.AddExtension(key_c0));
+ EXPECT_FALSE(manager.AddExtension(key_c1));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ // Remove all the entries.
+ EXPECT_TRUE(manager.RemoveExtension(key_a0));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.RemoveExtension(key_a0));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_b0));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.RemoveExtension(key_b0));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_c0));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.RemoveExtension(key_c0));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(3U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_c1));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.RemoveExtension(key_c1));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(2U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_b1));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.RemoveExtension(key_b1));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(1U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+
+ EXPECT_TRUE(manager.RemoveExtension(key_a1));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+ EXPECT_FALSE(manager.RemoveExtension(key_a1));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_MESSAGES));
+ EXPECT_EQ(0U, manager.GetNumActiveExtensionsForSource(LOG_SOURCE_UI_LATEST));
+}
+
+TEST(LogSourceAccessManagerTest, LastAccessTime) {
+ auto MakeTimeInterval = &base::TimeDelta::FromInternalValue;
+ const base::TimeDelta rate_limiting_interval = MakeTimeInterval(100);
+ LogSourceAccessManager::SetRateLimitingTimeoutForTesting(
+ &rate_limiting_interval);
+
+ LogSourceAccessManager manager;
+
+ // Override the default clock for testing. Initialize it to a non-zero
+ // internal value.
+ std::unique_ptr<base::SimpleTestTickClock> test_clock(
+ new base::SimpleTestTickClock);
+ test_clock->Advance(MakeTimeInterval(100));
+
+ // Pass ownership to |manager|, but keep a pointer to it so that the clock can
+ // be updated.
+ base::SimpleTestTickClock* test_clock_ptr = test_clock.get();
+ manager.set_tick_clock(
+ std::unique_ptr<base::TickClock>(test_clock.release()));
+
+ const SourceAndExtension key_a0(LOG_SOURCE_MESSAGES, "aaaa");
+ const SourceAndExtension key_a1(LOG_SOURCE_UI_LATEST, "aaaa");
+ const SourceAndExtension key_b0(LOG_SOURCE_MESSAGES, "bbbb");
+ const SourceAndExtension key_b1(LOG_SOURCE_UI_LATEST, "bbbb");
+ const SourceAndExtension key_c0(LOG_SOURCE_MESSAGES, "cccc");
+ const SourceAndExtension key_c1(LOG_SOURCE_UI_LATEST, "cccc");
+
+ // No timestamps present for any of the keys.
+ EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
+ EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
+ EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
+ EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
+ EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
+ EXPECT_EQ(0U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
+
+ // Access each key for the first time.
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_a0));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_b0));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_c0));
+ // Add a time gap in between.
+ test_clock_ptr->Advance(MakeTimeInterval(20));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_a1));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_b1));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_c1));
+
+ // Each key should now have a last access timestamp.
+ EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
+ EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
+ EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
+
+ // Cannot access them again for now.
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_a0));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_b0));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_c0));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_a1));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_b1));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_c1));
+
+ // Make sure existing timestamps are unchanged.
+ EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
+ EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
+ EXPECT_EQ(100U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
+
+ // Advance by enough to access some of the sources. 120 + 90 = 210.
+ test_clock_ptr->Advance(MakeTimeInterval(90));
+
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_a0));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_b0));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_c0));
+ // Not enough time has passed for these to be accessible.
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_a1));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_b1));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_c1));
+
+ // Check for both updated and unchanged timestamps
+ EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
+ EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
+ EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
+ EXPECT_EQ(120U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
+
+ // Now move forward in time far enough to update the previously unchanged
+ // timestamps, but far enough to update the ones that were just updated.
+ // 210 + 90 = 300.
+ test_clock_ptr->Advance(MakeTimeInterval(90));
+
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_a0));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_b0));
+ EXPECT_FALSE(manager.AccessSourceFromExtension(key_c0));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_a1));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_b1));
+ EXPECT_TRUE(manager.AccessSourceFromExtension(key_c1));
+
+ // Check timestamps.
+ EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_a0).ToInternalValue());
+ EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_b0).ToInternalValue());
+ EXPECT_EQ(210U, manager.GetLastExtensionAccessTime(key_c0).ToInternalValue());
+ EXPECT_EQ(300U, manager.GetLastExtensionAccessTime(key_b1).ToInternalValue());
+ EXPECT_EQ(300U, manager.GetLastExtensionAccessTime(key_a1).ToInternalValue());
+ EXPECT_EQ(300U, manager.GetLastExtensionAccessTime(key_c1).ToInternalValue());
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698