Revert "Improve testing of  WiFi bootstrapping condition"

Testing BUG: integration.

This reverts commit 38d582f519f7d6a642c5a013e43d24dea1fd7185.

Change-Id: I627610eb48e5077eda2db62574b653fc969e0e2a
diff --git a/libweave/include/weave/test/mock_task_runner.h b/libweave/include/weave/test/mock_task_runner.h
index 0aa3186..5fee077 100644
--- a/libweave/include/weave/test/mock_task_runner.h
+++ b/libweave/include/weave/test/mock_task_runner.h
@@ -30,7 +30,6 @@
 
   bool RunOnce();
   void Run();
-  void Break();
   base::Clock* GetClock();
 
  private:
@@ -46,7 +45,6 @@
     }
   };
 
-  bool break_{false};
   size_t counter_{0};  // Keeps order of tasks with the same time.
 
   class TestClock;
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index cce7994..c7d8c24 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -76,7 +76,6 @@
     return true;
   }
 
-  // TODO(vitalybuka): Remove error.
   bool GetName(std::string* name, ErrorPtr* error) const override {
     *name = device_->GetConfig().name();
     return true;
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 6dd044d..5a32419 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -16,6 +16,12 @@
 namespace weave {
 namespace privet {
 
+namespace {
+const int kConnectTimeoutMinutes = 3;
+const int kBootstrapTimeoutMinutes = 10;
+const int kMonitorTimeoutMinutes = 2;
+}
+
 WifiBootstrapManager::WifiBootstrapManager(
     const std::string& last_configured_ssid,
     const std::string& test_privet_ssid,
@@ -75,7 +81,7 @@
     task_runner_->PostDelayedTask(
         FROM_HERE, base::Bind(&WifiBootstrapManager::OnBootstrapTimeout,
                               tasks_weak_factory_.GetWeakPtr()),
-        base::TimeDelta::FromMinutes(10));
+        base::TimeDelta::FromMinutes(kBootstrapTimeoutMinutes));
   }
   // TODO(vitalybuka): Add SSID probing.
   privet_ssid_ = GenerateSsid();
@@ -98,7 +104,7 @@
   task_runner_->PostDelayedTask(
       FROM_HERE, base::Bind(&WifiBootstrapManager::OnConnectTimeout,
                             tasks_weak_factory_.GetWeakPtr()),
-      base::TimeDelta::FromMinutes(3));
+      base::TimeDelta::FromMinutes(kConnectTimeoutMinutes));
   network_->ConnectToService(ssid, passphrase,
                              base::Bind(&WifiBootstrapManager::OnConnectSuccess,
                                         tasks_weak_factory_.GetWeakPtr(), ssid),
@@ -113,19 +119,6 @@
   // We already have a callback in place with |network_| to update our
   // connectivity state.  See OnConnectivityChange().
   UpdateState(State::kMonitoring);
-
-  if (network_->GetConnectionState() == NetworkState::kConnected) {
-    monitor_until_ = base::Time::Max();
-  } else {
-    if (monitor_until_ == base::Time::Max())
-      monitor_until_ = base::Time::Now() + base::TimeDelta::FromMinutes(2);
-
-    // Schedule timeout timer taking into account already offline time.
-    task_runner_->PostDelayedTask(
-        FROM_HERE, base::Bind(&WifiBootstrapManager::OnMonitorTimeout,
-                              tasks_weak_factory_.GetWeakPtr()),
-        monitor_until_ - base::Time::Now());
-  }
 }
 
 void WifiBootstrapManager::EndMonitoring() {
@@ -241,9 +234,22 @@
   VLOG(3) << "ConnectivityChanged: " << is_connected;
   UpdateConnectionState();
 
-  if (state_ == State::kMonitoring ||  // Reset monitoring timeout.
-      (state_ == State::kDisabled && is_connected)) {
+  if (state_ == State::kBootstrapping && is_connected) {
     StartMonitoring();
+    return;
+  }
+  if (state_ == State::kMonitoring) {
+    if (is_connected) {
+      tasks_weak_factory_.InvalidateWeakPtrs();
+    } else {
+      // Tasks queue may have more than one OnMonitorTimeout enqueued. The
+      // first one could be executed as it would change the state and abort the
+      // rest.
+      task_runner_->PostDelayedTask(
+          FROM_HERE, base::Bind(&WifiBootstrapManager::OnMonitorTimeout,
+                                tasks_weak_factory_.GetWeakPtr()),
+          base::TimeDelta::FromMinutes(kMonitorTimeoutMinutes));
+    }
   }
 }
 
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index c0052a0..f622c77 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -101,7 +101,6 @@
   TaskRunner* task_runner_{nullptr};
   Network* network_{nullptr};
   WifiSsidGenerator ssid_generator_;
-  base::Time monitor_until_;
 
   std::vector<StateListener> state_listeners_;
   bool currently_online_{false};
diff --git a/libweave/src/test/mock_task_runner.cc b/libweave/src/test/mock_task_runner.cc
index a78b4e1..da9246a 100644
--- a/libweave/src/test/mock_task_runner.cc
+++ b/libweave/src/test/mock_task_runner.cc
@@ -40,15 +40,10 @@
 }
 
 void MockTaskRunner::Run() {
-  break_ = false;
-  while (!break_ && RunOnce()) {
+  while (RunOnce()) {
   }
 }
 
-void MockTaskRunner::Break() {
-  break_ = true;
-}
-
 base::Clock* MockTaskRunner::GetClock() {
   return test_clock_.get();
 }
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 0629dac..7b3bbdb 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -221,18 +221,11 @@
 
   void InitNetwork() {
     EXPECT_CALL(network_, AddOnConnectionChangedCallback(_))
-        .WillRepeatedly(
-            Invoke([this](const Network::OnConnectionChangedCallback& cb) {
-              network_callbacks_.push_back(cb);
-            }));
+        .WillRepeatedly(Return());
     EXPECT_CALL(network_, GetConnectionState())
         .WillRepeatedly(Return(NetworkState::kOffline));
-  }
-
-  void IgnoreMdns() {
-    EXPECT_CALL(mdns_, GetId()).WillRepeatedly(Return("TEST_ID"));
-    EXPECT_CALL(mdns_, PublishService(_, _, _)).WillRepeatedly(Return());
-    EXPECT_CALL(mdns_, StopPublishing("_privet._tcp")).WillOnce(Return());
+    EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+        .WillOnce(Return());
   }
 
   void InitMdns() {
@@ -279,16 +272,12 @@
             }));
   }
 
-  void InitDefaultExpectations() {
+  void StartDevice() {
     InitConfigStore();
     InitNetwork();
-    EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
-        .WillOnce(Return());
     InitHttpServer();
     InitMdns();
-  }
 
-  void StartDevice() {
     weave::Device::Options options;
     options.xmpp_enabled = false;
 
@@ -322,8 +311,6 @@
   StrictMock<test::MockMdns> mdns_;
   StrictMock<test::MockHttpServer> http_server_;
 
-  std::vector<Network::OnConnectionChangedCallback> network_callbacks_;
-
   weave::Cloud* cloud_{nullptr};
 
   std::unique_ptr<weave::Device> device_;
@@ -344,19 +331,11 @@
                  &network_, nullptr, nullptr);
 }
 
-class WeaveBasicTest : public WeaveTest {
- public:
-  void SetUp() override {
-    WeaveTest::SetUp();
-    InitDefaultExpectations();
-  }
-};
-
-TEST_F(WeaveBasicTest, Start) {
+TEST_F(WeaveTest, Start) {
   StartDevice();
 }
 
-TEST_F(WeaveBasicTest, Register) {
+TEST_F(WeaveTest, Register) {
   StartDevice();
 
   auto draft = CreateDictionaryValue(kDeviceResource);
@@ -384,94 +363,4 @@
   EXPECT_EQ("DEVICE_ID", cloud_->RegisterDevice("TEST_ID", nullptr));
 }
 
-class WeaveWiFiSetupTest : public WeaveTest {
- public:
-  void SetUp() override {
-    WeaveTest::SetUp();
-
-    InitConfigStore();
-    InitHttpServer();
-    InitNetwork();
-    IgnoreMdns();
-
-    EXPECT_CALL(network_, GetConnectionState())
-        .WillRepeatedly(Return(NetworkState::kConnected));
-  }
-};
-
-TEST_F(WeaveWiFiSetupTest, StartOnlineNoPrevSsid) {
-  StartDevice();
-
-  // Short disconnect.
-  EXPECT_CALL(network_, GetConnectionState())
-      .WillRepeatedly(Return(NetworkState::kOffline));
-  for (const auto& cb : network_callbacks_) {
-    task_runner_.PostDelayedTask(FROM_HERE, base::Bind(cb, false), {});
-  }
-  EXPECT_CALL(network_, GetConnectionState())
-      .WillRepeatedly(Return(NetworkState::kConnected));
-  for (const auto& cb : network_callbacks_) {
-    task_runner_.PostDelayedTask(FROM_HERE, base::Bind(cb, true),
-                                 base::TimeDelta::FromSeconds(10));
-  }
-  task_runner_.Run();
-
-  // Long disconnect.
-  EXPECT_CALL(network_, GetConnectionState())
-      .WillRepeatedly(Return(NetworkState::kOffline));
-  for (const auto& cb : network_callbacks_) {
-    task_runner_.PostDelayedTask(FROM_HERE, base::Bind(cb, false), {});
-  }
-  auto offline_from = task_runner_.GetClock()->Now();
-  EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
-      .WillOnce(InvokeWithoutArgs([this, offline_from]() {
-        EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
-                  base::TimeDelta::FromMinutes(1));
-      }));
-  task_runner_.Run();
-}
-
-// If device has previously configured WiFi it will run AP for limited time
-// after which it will try to re-connect.
-TEST_F(WeaveWiFiSetupTest, StartOnlineWithPrevSsid) {
-  EXPECT_CALL(config_store_, LoadSettings())
-      .WillRepeatedly(Return(R"({"last_configured_ssid": "TEST_ssid"})"));
-  StartDevice();
-
-  // Long disconnect.
-  EXPECT_CALL(network_, GetConnectionState())
-      .WillRepeatedly(Return(NetworkState::kOffline));
-  for (const auto& cb : network_callbacks_) {
-    task_runner_.PostDelayedTask(FROM_HERE, base::Bind(cb, false), {});
-  }
-
-  for (int i = 0; i < 5; ++i) {
-    auto offline_from = task_runner_.GetClock()->Now();
-    // Temporarily offline mode.
-    EXPECT_CALL(network_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
-        .WillOnce(InvokeWithoutArgs([this, &offline_from]() {
-          EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
-                    base::TimeDelta::FromMinutes(1));
-          task_runner_.Break();
-        }));
-    task_runner_.Run();
-
-    // Try to reconnect again.
-    offline_from = task_runner_.GetClock()->Now();
-    EXPECT_CALL(network_, DisableAccessPoint())
-        .WillOnce(InvokeWithoutArgs([this, offline_from]() {
-          EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
-                    base::TimeDelta::FromMinutes(5));
-          task_runner_.Break();
-        }));
-    task_runner_.Run();
-  }
-
-  EXPECT_CALL(network_, GetConnectionState())
-      .WillRepeatedly(Return(NetworkState::kConnected));
-  for (const auto& cb : network_callbacks_)
-    task_runner_.PostDelayedTask(FROM_HERE, base::Bind(cb, true), {});
-  task_runner_.Run();
-}
-
 }  // namespace weave