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

Unified Diff: chromeos/components/tether/host_scan_scheduler_unittest.cc

Issue 2870393003: Tether: only scan when asked to by NetworkStateHandler. (Closed)
Patch Set: Remove PowerManagerClient callbacks and implement all NetworkStateHandler callbacks. 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: chromeos/components/tether/host_scan_scheduler_unittest.cc
diff --git a/chromeos/components/tether/host_scan_scheduler_unittest.cc b/chromeos/components/tether/host_scan_scheduler_unittest.cc
index f6fbbfa0722399adb88dab14b1faba6077f69111..8a9b0c0e629dec34ec68ad03632ce45a23edae66 100644
--- a/chromeos/components/tether/host_scan_scheduler_unittest.cc
+++ b/chromeos/components/tether/host_scan_scheduler_unittest.cc
@@ -5,12 +5,17 @@
#include "chromeos/components/tether/host_scan_scheduler.h"
#include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
+#include "base/test/scoped_task_environment.h"
#include "chromeos/components/tether/host_scanner.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h"
#include "chromeos/login/login_state.h"
#include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
+#include "chromeos/network/network_state_test.h"
+#include "chromeos/network/network_type_pattern.h"
#include "components/cryptauth/cryptauth_device_manager.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -19,216 +24,195 @@ namespace chromeos {
namespace tether {
-class HostScanSchedulerTest : public testing::Test {
- protected:
- class TestDelegate : public HostScanScheduler::Delegate {
- public:
- explicit TestDelegate(HostScanSchedulerTest* test)
- : test_(test),
- observer_(nullptr),
- is_authenticated_user_logged_in(true),
- is_network_connected_or_connecting(false),
- are_tether_hosts_synced(true) {}
-
- void AddObserver(HostScanScheduler* host_scan_scheduler) override {
- observer_ = host_scan_scheduler;
- }
-
- void RemoveObserver(HostScanScheduler* host_scan_scheduler) override {
- if (observer_ == host_scan_scheduler) {
- observer_ = nullptr;
- }
- EXPECT_FALSE(IsObserverSet());
- }
-
- bool IsAuthenticatedUserLoggedIn() const override {
- return is_authenticated_user_logged_in;
- }
-
- bool IsNetworkConnectedOrConnecting() const override {
- return is_network_connected_or_connecting;
- }
-
- bool AreTetherHostsSynced() const override {
- return are_tether_hosts_synced;
- }
-
- bool IsObserverSet() const {
- return observer_ != nullptr &&
- observer_ == test_->host_scan_scheduler_.get();
- }
-
- void set_is_authenticated_user_logged_in(bool value) {
- is_authenticated_user_logged_in = value;
- }
-
- void set_is_network_connected_or_connecting(bool value) {
- is_network_connected_or_connecting = value;
- }
-
- void set_are_tether_hosts_synced(bool value) {
- are_tether_hosts_synced = value;
- }
-
- private:
- const HostScanSchedulerTest* test_;
-
- HostScanScheduler* observer_;
- bool is_authenticated_user_logged_in;
- bool is_network_connected_or_connecting;
- bool are_tether_hosts_synced;
- };
-
- class FakeHostScanner : public HostScanner {
- public:
- FakeHostScanner()
- : HostScanner(nullptr,
- nullptr,
- nullptr,
- nullptr,
- nullptr,
- nullptr,
- nullptr),
- num_scans_started_(0) {}
- ~FakeHostScanner() override {}
-
- void StartScan() override { num_scans_started_++; }
-
- int num_scans_started() { return num_scans_started_; }
-
- private:
- int num_scans_started_;
- };
-
- HostScanSchedulerTest() {}
+namespace {
+
+class FakeHostScanner : public HostScanner {
+ public:
+ FakeHostScanner()
+ : HostScanner(nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr),
+ num_scans_started_(0) {}
+ ~FakeHostScanner() override {}
+
+ void StartScan() override {
+ is_scan_active_ = true;
+ has_recently_scanned_ = true;
+ num_scans_started_++;
+ }
+
+ void StopScan() { is_scan_active_ = false; }
+
+ bool IsScanActive() override { return is_scan_active_; }
+
+ bool HasRecentlyScanned() override { return has_recently_scanned_; }
+
+ void set_has_recently_scanned(bool has_recently_scanned) {
+ has_recently_scanned_ = has_recently_scanned;
+ }
+
+ int num_scans_started() { return num_scans_started_; }
+
+ private:
+ bool is_scan_active_ = false;
+ bool has_recently_scanned_ = false;
+ int num_scans_started_ = 0;
+};
+const char kWifiServiceGuid[] = "wifiServiceGuid";
+
+std::string CreateConfigurationJsonString() {
+ std::stringstream ss;
+ ss << "{"
+ << " \"GUID\": \"" << kWifiServiceGuid << "\","
+ << " \"Type\": \"" << shill::kTypeWifi << "\","
+ << " \"State\": \"" << shill::kStateReady << "\""
+ << "}";
+ return ss.str();
+}
+
+} // namespace
+
+class HostScanSchedulerTest : public NetworkStateTest {
+ protected:
void SetUp() override {
- test_delegate_ = new TestDelegate(this);
- fake_host_scanner_ = new FakeHostScanner();
+ DBusThreadManager::Initialize();
+ NetworkStateTest::SetUp();
- host_scan_scheduler_.reset(
- new HostScanScheduler(base::WrapUnique(test_delegate_),
- base::WrapUnique(fake_host_scanner_)));
+ wifi_service_path_ = ConfigureService(CreateConfigurationJsonString());
+ test_manager_client()->SetManagerProperty(shill::kDefaultServiceProperty,
+ base::Value(wifi_service_path_));
- EXPECT_FALSE(test_delegate_->IsObserverSet());
- host_scan_scheduler_->InitializeAutomaticScans();
- EXPECT_TRUE(test_delegate_->IsObserverSet());
+ network_state_handler()->SetTetherTechnologyState(
+ NetworkStateHandler::TECHNOLOGY_ENABLED);
+
+ fake_host_scanner_ = base::MakeUnique<FakeHostScanner>();
+
+ host_scan_scheduler_ = base::WrapUnique(new HostScanScheduler(
+ network_state_handler(), fake_host_scanner_.get()));
}
void TearDown() override {
- EXPECT_TRUE(test_delegate_->IsObserverSet());
host_scan_scheduler_.reset();
+
+ ShutdownNetworkState();
+ NetworkStateTest::TearDown();
+ DBusThreadManager::Shutdown();
}
- void TestScheduleScanNowIfPossible(bool is_authenticated_user_logged_in,
- bool is_network_connected_or_connecting,
- bool are_tether_hosts_synced,
- int num_expected_scans) {
- test_delegate_->set_is_authenticated_user_logged_in(
- is_authenticated_user_logged_in);
- test_delegate_->set_is_network_connected_or_connecting(
- is_network_connected_or_connecting);
- test_delegate_->set_are_tether_hosts_synced(are_tether_hosts_synced);
- host_scan_scheduler_->ScheduleScanNowIfPossible();
- EXPECT_EQ(num_expected_scans, fake_host_scanner_->num_scans_started());
+ void SetDefaultNetworkDisconnected() {
+ SetServiceProperty(wifi_service_path_, std::string(shill::kStateProperty),
+ base::Value(shill::kStateIdle));
}
- std::unique_ptr<HostScanScheduler> host_scan_scheduler_;
+ void SetDefaultNetworkConnecting() {
+ SetServiceProperty(wifi_service_path_, std::string(shill::kStateProperty),
+ base::Value(shill::kStateAssociation));
+ }
- TestDelegate* test_delegate_;
- FakeHostScanner* fake_host_scanner_;
-};
+ void SetDefaultNetworkConnected() {
+ SetServiceProperty(wifi_service_path_, std::string(shill::kStateProperty),
+ base::Value(shill::kStateReady));
+ }
-TEST_F(HostScanSchedulerTest, TestObserverAddedAndRemoved) {
- // Intentionally empty. This test just ensures that adding/removing observers
- // (in setUp() and tearDown()) works.
-}
+ base::test::ScopedTaskEnvironment scoped_task_environment_;
+ std::string wifi_service_path_;
-TEST_F(HostScanSchedulerTest, TestScheduleScanNowIfPossible) {
- EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ std::unique_ptr<FakeHostScanner> fake_host_scanner_;
- // A scan should only be started when an authenticated user is logged in,
- // the network is not connected/connecting, and tether hosts are synced.
- TestScheduleScanNowIfPossible(false, false, false, 0);
- TestScheduleScanNowIfPossible(true, false, false, 0);
- TestScheduleScanNowIfPossible(false, true, false, 0);
- TestScheduleScanNowIfPossible(false, false, true, 0);
- TestScheduleScanNowIfPossible(true, true, false, 0);
- TestScheduleScanNowIfPossible(true, false, true, 1);
- TestScheduleScanNowIfPossible(false, true, true, 1);
- TestScheduleScanNowIfPossible(true, true, true, 1);
-}
+ std::unique_ptr<HostScanScheduler> host_scan_scheduler_;
+};
-TEST_F(HostScanSchedulerTest, TestLoggedInStateChange) {
+TEST_F(HostScanSchedulerTest, UserLoggedIn) {
EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- test_delegate_->set_is_authenticated_user_logged_in(true);
- test_delegate_->set_is_network_connected_or_connecting(false);
- test_delegate_->set_are_tether_hosts_synced(true);
+ host_scan_scheduler_->UserLoggedIn();
- host_scan_scheduler_->LoggedInStateChanged();
- EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
+
+ SetDefaultNetworkDisconnected();
+ host_scan_scheduler_->UserLoggedIn();
- // Change a condition so that it should not scan, and re-trigger; there should
- // still be only 1 started scan.
- test_delegate_->set_is_authenticated_user_logged_in(false);
- host_scan_scheduler_->LoggedInStateChanged();
EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
}
-TEST_F(HostScanSchedulerTest, TestSuspendDone) {
+TEST_F(HostScanSchedulerTest, ScanRequested) {
EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- test_delegate_->set_is_authenticated_user_logged_in(true);
- test_delegate_->set_is_network_connected_or_connecting(false);
- test_delegate_->set_are_tether_hosts_synced(true);
+ // Begin scanning.
+ host_scan_scheduler_->ScanRequested();
+ EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
+
+ // Should not begin a new scan while a scan is active.
+ host_scan_scheduler_->ScanRequested();
+ EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- host_scan_scheduler_->SuspendDone(base::TimeDelta::FromSeconds(1));
+ fake_host_scanner_->StopScan();
+ host_scan_scheduler_->ScanFinished();
EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- // Change a condition so that it should not scan, and re-trigger; there should
- // still be only 1 started scan.
- test_delegate_->set_is_authenticated_user_logged_in(false);
- host_scan_scheduler_->SuspendDone(base::TimeDelta::FromSeconds(1));
+ // Should not begin a new scan when a scan has finished recently.
+ host_scan_scheduler_->ScanRequested();
EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
+
+ // A new scan should be allowed once a scan is not active and has not finished
+ // recently.
+ fake_host_scanner_->set_has_recently_scanned(false);
+ host_scan_scheduler_->ScanRequested();
+ EXPECT_EQ(2, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
}
-TEST_F(HostScanSchedulerTest, TestNetworkConnectionStateChanged) {
+TEST_F(HostScanSchedulerTest, DefaultNetworkChanged) {
EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- test_delegate_->set_is_authenticated_user_logged_in(true);
- test_delegate_->set_is_network_connected_or_connecting(false);
- test_delegate_->set_are_tether_hosts_synced(true);
+ SetDefaultNetworkConnecting();
- host_scan_scheduler_->NetworkConnectionStateChanged(nullptr);
- EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ EXPECT_FALSE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- // Change a condition so that it should not scan, and re-trigger; there should
- // still be only 1 started scan.
- test_delegate_->set_is_network_connected_or_connecting(true);
- host_scan_scheduler_->NetworkConnectionStateChanged(nullptr);
- EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
-}
+ SetDefaultNetworkDisconnected();
-TEST_F(HostScanSchedulerTest, TestOnSyncFinished) {
- EXPECT_EQ(0, fake_host_scanner_->num_scans_started());
+ EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
- test_delegate_->set_is_authenticated_user_logged_in(true);
- test_delegate_->set_is_network_connected_or_connecting(false);
- test_delegate_->set_are_tether_hosts_synced(true);
+ SetDefaultNetworkConnecting();
- host_scan_scheduler_->OnSyncFinished(
- cryptauth::CryptAuthDeviceManager::SyncResult::SUCCESS,
- cryptauth::CryptAuthDeviceManager::DeviceChangeResult::CHANGED);
EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
+
+ SetDefaultNetworkDisconnected();
- // Change a condition so that it should not scan, and re-trigger; there should
- // still be only 1 started scan.
- test_delegate_->set_are_tether_hosts_synced(false);
- host_scan_scheduler_->OnSyncFinished(
- cryptauth::CryptAuthDeviceManager::SyncResult::SUCCESS,
- cryptauth::CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED);
EXPECT_EQ(1, fake_host_scanner_->num_scans_started());
+ EXPECT_TRUE(
+ network_state_handler()->GetScanningByType(NetworkTypePattern::Tether()));
}
} // namespace tether

Powered by Google App Engine
This is Rietveld 408576698