reporting_network_change_observer_unittest.cc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "net/reporting/reporting_network_change_observer.h"
  5. #include "base/bind.h"
  6. #include "base/run_loop.h"
  7. #include "base/test/simple_test_tick_clock.h"
  8. #include "base/unguessable_token.h"
  9. #include "base/values.h"
  10. #include "net/base/network_change_notifier.h"
  11. #include "net/reporting/reporting_cache.h"
  12. #include "net/reporting/reporting_report.h"
  13. #include "net/reporting/reporting_test_util.h"
  14. #include "testing/gtest/include/gtest/gtest.h"
  15. #include "third_party/abseil-cpp/absl/types/optional.h"
  16. namespace net {
  17. namespace {
  18. class ReportingNetworkChangeObserverTest : public ReportingTestBase {
  19. protected:
  20. void SimulateNetworkChange() {
  21. // TODO: Need to SetTestNotificationsOnly(true) to keep things from flaking,
  22. // but have to figure out how to do that before NCN is created or how to
  23. // recreate NCN.
  24. NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
  25. NetworkChangeNotifier::CONNECTION_NONE);
  26. base::RunLoop().RunUntilIdle();
  27. NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
  28. NetworkChangeNotifier::CONNECTION_WIFI);
  29. base::RunLoop().RunUntilIdle();
  30. }
  31. void SetEndpoint() {
  32. ASSERT_TRUE(SetEndpointInCache(kGroupKey_, kEndpoint_,
  33. base::Time::Now() + base::Days(7)));
  34. }
  35. size_t report_count() {
  36. std::vector<const ReportingReport*> reports;
  37. cache()->GetReports(&reports);
  38. return reports.size();
  39. }
  40. const absl::optional<base::UnguessableToken> kReportingSource_ =
  41. absl::nullopt;
  42. const NetworkIsolationKey kNik_;
  43. const GURL kUrl_ = GURL("https://origin/path");
  44. const url::Origin kOrigin_ = url::Origin::Create(kUrl_);
  45. const GURL kEndpoint_ = GURL("https://endpoint/");
  46. const std::string kUserAgent_ = "Mozilla/1.0";
  47. const std::string kGroup_ = "group";
  48. const std::string kType_ = "default";
  49. const ReportingEndpointGroupKey kGroupKey_ =
  50. ReportingEndpointGroupKey(NetworkIsolationKey(), kOrigin_, kGroup_);
  51. };
  52. TEST_F(ReportingNetworkChangeObserverTest, ClearNothing) {
  53. ReportingPolicy new_policy = policy();
  54. new_policy.persist_reports_across_network_changes = true;
  55. new_policy.persist_clients_across_network_changes = true;
  56. UsePolicy(new_policy);
  57. cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
  58. kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
  59. 0);
  60. SetEndpoint();
  61. ASSERT_EQ(1u, report_count());
  62. ASSERT_EQ(1u, cache()->GetEndpointCount());
  63. SimulateNetworkChange();
  64. EXPECT_EQ(1u, report_count());
  65. EXPECT_EQ(1u, cache()->GetEndpointCount());
  66. }
  67. TEST_F(ReportingNetworkChangeObserverTest, ClearReports) {
  68. ReportingPolicy new_policy = policy();
  69. new_policy.persist_reports_across_network_changes = false;
  70. new_policy.persist_clients_across_network_changes = true;
  71. UsePolicy(new_policy);
  72. cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
  73. kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
  74. 0);
  75. SetEndpoint();
  76. ASSERT_EQ(1u, report_count());
  77. ASSERT_EQ(1u, cache()->GetEndpointCount());
  78. SimulateNetworkChange();
  79. EXPECT_EQ(0u, report_count());
  80. EXPECT_EQ(1u, cache()->GetEndpointCount());
  81. }
  82. TEST_F(ReportingNetworkChangeObserverTest, ClearClients) {
  83. ReportingPolicy new_policy = policy();
  84. new_policy.persist_reports_across_network_changes = true;
  85. new_policy.persist_clients_across_network_changes = false;
  86. UsePolicy(new_policy);
  87. cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
  88. kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
  89. 0);
  90. SetEndpoint();
  91. ASSERT_EQ(1u, report_count());
  92. ASSERT_EQ(1u, cache()->GetEndpointCount());
  93. SimulateNetworkChange();
  94. EXPECT_EQ(1u, report_count());
  95. EXPECT_EQ(0u, cache()->GetEndpointCount());
  96. }
  97. TEST_F(ReportingNetworkChangeObserverTest, ClearReportsAndClients) {
  98. ReportingPolicy new_policy = policy();
  99. new_policy.persist_reports_across_network_changes = false;
  100. new_policy.persist_clients_across_network_changes = false;
  101. UsePolicy(new_policy);
  102. cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
  103. kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
  104. 0);
  105. SetEndpoint();
  106. ASSERT_EQ(1u, report_count());
  107. ASSERT_EQ(1u, cache()->GetEndpointCount());
  108. SimulateNetworkChange();
  109. EXPECT_EQ(0u, report_count());
  110. EXPECT_EQ(0u, cache()->GetEndpointCount());
  111. }
  112. } // namespace
  113. } // namespace net