shill: portal: Recheck portal state

Introduce a retry interval for automatically retrying portal
checks.  Also provide a Manager API method for immediately
re-checking portal status.

BUG=chromium-os:27335
TEST=New unit tests, tested on real machine, including setting
PortaCheckInterval over DBus, and using Jason's addition to
test-flimflam for 'recheck-portal'.
Change-Id: Idc7def18c6f863859e94f4d4e9f266ab2670679c
Reviewed-on: https://gerrit.chromium.org/gerrit/17367
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/manager_unittest.cc b/manager_unittest.cc
index 9ce7177..8b4269e 100644
--- a/manager_unittest.cc
+++ b/manager_unittest.cc
@@ -1353,4 +1353,19 @@
   dispatcher()->DispatchPendingEvents();
 }
 
+TEST_F(ManagerTest, RecheckPortal) {
+  EXPECT_CALL(*mock_devices_[0].get(), RequestPortalDetection())
+      .WillOnce(Return(false));
+  EXPECT_CALL(*mock_devices_[1].get(), RequestPortalDetection())
+      .WillOnce(Return(true));
+  EXPECT_CALL(*mock_devices_[2].get(), RequestPortalDetection())
+      .Times(0);
+
+  manager()->RegisterDevice(mock_devices_[0]);
+  manager()->RegisterDevice(mock_devices_[1]);
+  manager()->RegisterDevice(mock_devices_[2]);
+
+  manager()->RecheckPortal(NULL);
+}
+
 }  // namespace shill