123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- // 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 "net/reporting/reporting_network_change_observer.h"
- #include "base/bind.h"
- #include "base/run_loop.h"
- #include "base/test/simple_test_tick_clock.h"
- #include "base/unguessable_token.h"
- #include "base/values.h"
- #include "net/base/network_change_notifier.h"
- #include "net/reporting/reporting_cache.h"
- #include "net/reporting/reporting_report.h"
- #include "net/reporting/reporting_test_util.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "third_party/abseil-cpp/absl/types/optional.h"
- namespace net {
- namespace {
- class ReportingNetworkChangeObserverTest : public ReportingTestBase {
- protected:
- void SimulateNetworkChange() {
- // TODO: Need to SetTestNotificationsOnly(true) to keep things from flaking,
- // but have to figure out how to do that before NCN is created or how to
- // recreate NCN.
- NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
- NetworkChangeNotifier::CONNECTION_NONE);
- base::RunLoop().RunUntilIdle();
- NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
- NetworkChangeNotifier::CONNECTION_WIFI);
- base::RunLoop().RunUntilIdle();
- }
- void SetEndpoint() {
- ASSERT_TRUE(SetEndpointInCache(kGroupKey_, kEndpoint_,
- base::Time::Now() + base::Days(7)));
- }
- size_t report_count() {
- std::vector<const ReportingReport*> reports;
- cache()->GetReports(&reports);
- return reports.size();
- }
- const absl::optional<base::UnguessableToken> kReportingSource_ =
- absl::nullopt;
- const NetworkIsolationKey kNik_;
- const GURL kUrl_ = GURL("https://origin/path");
- const url::Origin kOrigin_ = url::Origin::Create(kUrl_);
- const GURL kEndpoint_ = GURL("https://endpoint/");
- const std::string kUserAgent_ = "Mozilla/1.0";
- const std::string kGroup_ = "group";
- const std::string kType_ = "default";
- const ReportingEndpointGroupKey kGroupKey_ =
- ReportingEndpointGroupKey(NetworkIsolationKey(), kOrigin_, kGroup_);
- };
- TEST_F(ReportingNetworkChangeObserverTest, ClearNothing) {
- ReportingPolicy new_policy = policy();
- new_policy.persist_reports_across_network_changes = true;
- new_policy.persist_clients_across_network_changes = true;
- UsePolicy(new_policy);
- cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
- kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
- 0);
- SetEndpoint();
- ASSERT_EQ(1u, report_count());
- ASSERT_EQ(1u, cache()->GetEndpointCount());
- SimulateNetworkChange();
- EXPECT_EQ(1u, report_count());
- EXPECT_EQ(1u, cache()->GetEndpointCount());
- }
- TEST_F(ReportingNetworkChangeObserverTest, ClearReports) {
- ReportingPolicy new_policy = policy();
- new_policy.persist_reports_across_network_changes = false;
- new_policy.persist_clients_across_network_changes = true;
- UsePolicy(new_policy);
- cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
- kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
- 0);
- SetEndpoint();
- ASSERT_EQ(1u, report_count());
- ASSERT_EQ(1u, cache()->GetEndpointCount());
- SimulateNetworkChange();
- EXPECT_EQ(0u, report_count());
- EXPECT_EQ(1u, cache()->GetEndpointCount());
- }
- TEST_F(ReportingNetworkChangeObserverTest, ClearClients) {
- ReportingPolicy new_policy = policy();
- new_policy.persist_reports_across_network_changes = true;
- new_policy.persist_clients_across_network_changes = false;
- UsePolicy(new_policy);
- cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
- kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
- 0);
- SetEndpoint();
- ASSERT_EQ(1u, report_count());
- ASSERT_EQ(1u, cache()->GetEndpointCount());
- SimulateNetworkChange();
- EXPECT_EQ(1u, report_count());
- EXPECT_EQ(0u, cache()->GetEndpointCount());
- }
- TEST_F(ReportingNetworkChangeObserverTest, ClearReportsAndClients) {
- ReportingPolicy new_policy = policy();
- new_policy.persist_reports_across_network_changes = false;
- new_policy.persist_clients_across_network_changes = false;
- UsePolicy(new_policy);
- cache()->AddReport(kReportingSource_, kNik_, kUrl_, kUserAgent_, kGroup_,
- kType_, base::Value::Dict(), 0, tick_clock()->NowTicks(),
- 0);
- SetEndpoint();
- ASSERT_EQ(1u, report_count());
- ASSERT_EQ(1u, cache()->GetEndpointCount());
- SimulateNetworkChange();
- EXPECT_EQ(0u, report_count());
- EXPECT_EQ(0u, cache()->GetEndpointCount());
- }
- } // namespace
- } // namespace net
|