shill: monitor bss signal strength
This wires WiFiEndpoint up to a proxy, to monitor
changes in the corresponding wpa_supplicant BSS
object.
The WiFiEndpoint object notifies its WiFi object
about the change, and WiFi relays the information
to the appropriate WiFiService.
BUG=chromium-os:16786
TEST=new unit tests, manual
Manual testing: ran on device (with --v=1000), observed
"signal is now" messages in log file.
Collateral changes:
- fix WiFiService leak in WiFi (reset |current_service| on Stop)
- suppress some "uninteresting call" messages in
WiFiMainTest.CurrentBSSChangedUpdateServiceEndpoint
Change-Id: Ic329ecd28f73d93238d517a73105f2cd35cbff2e
Reviewed-on: https://gerrit.chromium.org/gerrit/15868
Commit-Ready: mukesh agrawal <quiche@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/wifi_endpoint_unittest.cc b/wifi_endpoint_unittest.cc
index 1e682c7..556b966 100644
--- a/wifi_endpoint_unittest.cc
+++ b/wifi_endpoint_unittest.cc
@@ -11,9 +11,12 @@
#include <base/stl_util-inl.h>
#include <chromeos/dbus/service_constants.h>
+#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "shill/ieee80211.h"
+#include "shill/mock_wifi.h"
+#include "shill/property_store_unittest.h"
#include "shill/refptr_types.h"
#include "shill/wpa_supplicant.h"
@@ -21,14 +24,22 @@
using std::set;
using std::string;
using std::vector;
-
-using ::testing::Test;
+using ::testing::_;
+using ::testing::NiceMock;
namespace shill {
-class WiFiEndpointTest : public Test {
+class WiFiEndpointTest : public PropertyStoreTest {
public:
- WiFiEndpointTest() {}
+ WiFiEndpointTest() : wifi_(
+ new NiceMock<MockWiFi>(
+ control_interface(),
+ dispatcher(),
+ metrics(),
+ manager(),
+ "wifi",
+ "aabbccddeeff", // fake mac
+ 0)) {}
virtual ~WiFiEndpointTest() {}
protected:
@@ -77,6 +88,18 @@
ies->insert(ies->end(), 3, 0); // OUI
ies->push_back(0); // data
}
+
+ WiFiEndpoint *MakeOpenEndpoint(ProxyFactory *proxy_factory,
+ const WiFiRefPtr &wifi,
+ const std::string &ssid,
+ const std::string &bssid) {
+ return WiFiEndpoint::MakeOpenEndpoint(proxy_factory, wifi, ssid, bssid);
+ }
+
+ scoped_refptr<MockWiFi> wifi() { return wifi_; }
+
+ private:
+ scoped_refptr<MockWiFi> wifi_;
};
TEST_F(WiFiEndpointTest, ParseKeyManagementMethodsEAP) {
@@ -146,7 +169,7 @@
TEST_F(WiFiEndpointTest, SSIDWithNull) {
WiFiEndpointRefPtr endpoint =
- WiFiEndpoint::MakeOpenEndpoint(string(1, 0), "00:00:00:00:00:01");
+ MakeOpenEndpoint(NULL, NULL, string(1, 0), "00:00:00:00:00:01");
EXPECT_EQ("?", endpoint->ssid_string());
}
@@ -217,4 +240,21 @@
}
}
+TEST_F(WiFiEndpointTest, PropertiesChanged) {
+ WiFiEndpointRefPtr endpoint =
+ MakeOpenEndpoint(NULL, wifi(), "ssid", "00:00:00:00:00:01");
+ map<string, ::DBus::Variant> changed_properties;
+ ::DBus::MessageIter writer;
+ int16_t signal_strength = 10;
+
+ EXPECT_NE(signal_strength, endpoint->signal_strength());
+ writer =
+ changed_properties[wpa_supplicant::kBSSPropertySignal].writer();
+ writer << signal_strength;
+
+ EXPECT_CALL(*wifi(), NotifyEndpointChanged(_));
+ endpoint->PropertiesChanged(changed_properties);
+ EXPECT_EQ(signal_strength, endpoint->signal_strength());
+}
+
} // namespace shill