Index: components/safe_browsing_db/v4_protocol_manager_util_unittest.cc |
diff --git a/components/safe_browsing_db/v4_protocol_manager_util_unittest.cc b/components/safe_browsing_db/v4_protocol_manager_util_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e6c5e6f23f2b7ec4e702ad0113c9647e54c91888 |
--- /dev/null |
+++ b/components/safe_browsing_db/v4_protocol_manager_util_unittest.cc |
@@ -0,0 +1,122 @@ |
+// Copyright 2016 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 <vector> |
+ |
+#include "base/base64.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/time/time.h" |
+#include "components/safe_browsing_db/v4_protocol_manager_util.h" |
+#include "net/base/escape.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using base::Time; |
+using base::TimeDelta; |
+ |
+namespace { |
+ |
+const char kClient[] = "unittest"; |
+const char kAppVer[] = "1.0"; |
+const char kKeyParam[] = "test_key_param"; |
+ |
+} // namespace |
+ |
+namespace safe_browsing { |
+ |
+class SafeBrowsingV4ProtocolManagerUtilTest : public testing::Test { |
+ protected: |
+ void PopulateV4ProtocolConfig(V4ProtocolConfig& config) { |
Nathan Parker
2016/02/22 22:39:32
Use
V4ProtocolConfig*
since it's writing to it.
vakh (use Gerrit instead)
2016/02/23 01:39:36
Done.
|
+ config.client_name = kClient; |
+ config.version = kAppVer; |
+ config.key_param = kKeyParam; |
+ } |
+}; |
+ |
+TEST_F(SafeBrowsingV4ProtocolManagerUtilTest, TestBackOffLogic) { |
+ size_t error_count = 0, back_off_multiplier = 1; |
+ |
+ // 1 error. |
+ base::TimeDelta next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(1U, error_count); |
+ EXPECT_EQ(1U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(15), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(30), next); |
+ |
+ // 2 errors. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(2U, error_count); |
+ EXPECT_EQ(2U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(30), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(60), next); |
+ |
+ // 3 errors. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(3U, error_count); |
+ EXPECT_EQ(4U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(60), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(120), next); |
+ |
+ // 4 errors. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(4U, error_count); |
+ EXPECT_EQ(8U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(120), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(240), next); |
+ |
+ // 5 errors. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(5U, error_count); |
+ EXPECT_EQ(16U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(240), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(480), next); |
+ |
+ // 6 errors. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(6U, error_count); |
+ EXPECT_EQ(32U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(480), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(960), next); |
+ |
+ // 7 errors. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(7U, error_count); |
+ EXPECT_EQ(64U, back_off_multiplier); |
+ EXPECT_LE(TimeDelta::FromMinutes(960), next); |
+ EXPECT_GE(TimeDelta::FromMinutes(1920), next); |
+ |
+ // 8 errors, reached max backoff. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(8U, error_count); |
+ EXPECT_EQ(128U, back_off_multiplier); |
+ EXPECT_EQ(TimeDelta::FromHours(24), next); |
+ |
+ // 9 errors, reached max backoff and multiplier capped. |
+ next = V4ProtocolManagerUtil::GetNextBackOffInterval( |
+ &error_count, &back_off_multiplier); |
+ EXPECT_EQ(9U, error_count); |
+ EXPECT_EQ(128U, back_off_multiplier); |
+ EXPECT_EQ(TimeDelta::FromHours(24), next); |
+} |
+ |
+TEST_F(SafeBrowsingV4ProtocolManagerUtilTest, TestGetRequestUrl) { |
+ V4ProtocolConfig config; |
+ PopulateV4ProtocolConfig(config); |
+ |
+ std::string expectedUrl = |
+ "https://safebrowsing.googleapis.com/v4/someMethod/request_base64?" |
+ "alt=proto&client_id=unittest&client_version=1.0&key=test_key_param"; |
+ EXPECT_EQ(expectedUrl, V4ProtocolManagerUtil::GetRequestUrl( |
+ "request_base64", "someMethod", config) |
+ .spec()); |
+} |
+ |
+} // namespace safe_browsing |