shill: wifi: Implement FindService
Implement FindService so that WiFi::GetService can return an
already exisiting service if one exists. We consider services
that we haven't found in WiFi::GetService to be hidden unless
the caller specifies otherwise.
BUG=chromium-os:22074
TEST=New Unit Test
Change-Id: If5a41509c0f58c5bdb4a01d550922bb778d0d259
Reviewed-on: https://gerrit.chromium.org/gerrit/11458
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Gaurav Shah <gauravsh@chromium.org>
diff --git a/wifi_unittest.cc b/wifi_unittest.cc
index a6980a1..716ebc6 100644
--- a/wifi_unittest.cc
+++ b/wifi_unittest.cc
@@ -452,20 +452,20 @@
TEST_F(WiFiMainTest, GetWifiServiceOpen) {
Error e;
- GetOpenService("wifi", "an_ssid", "managed", &e);
+ GetOpenService("wifi", "an_ssid", flimflam::kModeManaged, &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceOpenNoType) {
Error e;
- GetOpenService(NULL, "an_ssid", "managed", &e);
+ GetOpenService(NULL, "an_ssid", flimflam::kModeManaged, &e);
EXPECT_EQ(Error::kInvalidArguments, e.type());
EXPECT_EQ("must specify service type", e.message());
}
TEST_F(WiFiMainTest, GetWifiServiceOpenNoSSID) {
Error e;
- GetOpenService("wifi", NULL, "managed", &e);
+ GetOpenService("wifi", NULL, flimflam::kModeManaged, &e);
EXPECT_EQ(Error::kInvalidArguments, e.type());
EXPECT_EQ("must specify SSID", e.message());
}
@@ -473,14 +473,14 @@
TEST_F(WiFiMainTest, GetWifiServiceOpenLongSSID) {
Error e;
GetOpenService(
- "wifi", "123456789012345678901234567890123", "managed", &e);
+ "wifi", "123456789012345678901234567890123", flimflam::kModeManaged, &e);
EXPECT_EQ(Error::kInvalidNetworkName, e.type());
EXPECT_EQ("SSID is too long", e.message());
}
TEST_F(WiFiMainTest, GetWifiServiceOpenShortSSID) {
Error e;
- GetOpenService("wifi", "", "managed", &e);
+ GetOpenService("wifi", "", flimflam::kModeManaged, &e);
EXPECT_EQ(Error::kInvalidNetworkName, e.type());
EXPECT_EQ("SSID is too short", e.message());
}
@@ -500,109 +500,121 @@
TEST_F(WiFiMainTest, GetWifiServiceRSN) {
Error e;
- GetService("wifi", "an_ssid", "managed", "rsn", "secure password", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityRsn,
+ "secure password", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceRSNNoPassword) {
Error e;
- GetService("wifi", "an_ssid", "managed", "rsn", NULL, &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityRsn,
+ NULL, &e);
EXPECT_EQ(Error::kInvalidArguments, e.type());
EXPECT_EQ("must specify passphrase", e.message());
}
TEST_F(WiFiMainTest, GetWifiServiceBadSecurity) {
Error e;
- GetService("wifi", "an_ssid", "managed", "rot-13", NULL, &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, "rot-13", NULL, &e);
EXPECT_EQ(Error::kNotSupported, e.type());
EXPECT_EQ("security mode is unsupported", e.message());
}
TEST_F(WiFiMainTest, GetWifiServiceWEPNoPassword) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", NULL, &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ NULL, &e);
EXPECT_EQ(Error::kInvalidArguments, e.type());
EXPECT_EQ("must specify passphrase", e.message());
}
TEST_F(WiFiMainTest, GetWifiServiceWEPEmptyPassword) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "", &e);
EXPECT_EQ(Error::kInvalidPassphrase, e.type());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40ASCII) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "abcde", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "abcde", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP104ASCII) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "abcdefghijklm", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "abcdefghijklm", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40ASCIIWithKeyIndex) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "0:abcdefghijklm", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "0:abcdefghijklm", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40Hex) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "0102030405", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "0102030405", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40HexBadPassphrase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "O102030405", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "O102030405", &e);
EXPECT_EQ(Error::kInvalidPassphrase, e.type());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexBadPassphrase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "1:O102030405", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "1:O102030405", &e);
EXPECT_EQ(Error::kInvalidPassphrase, e.type());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithKeyIndexAndBaseBadPassphrase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "1:0xO102030405", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "1:0xO102030405", &e);
EXPECT_EQ(Error::kInvalidPassphrase, e.type());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP40HexWithBaseBadPassphrase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep", "0xO102030405", &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
+ "0xO102030405", &e);
EXPECT_EQ(Error::kInvalidPassphrase, e.type());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP104Hex) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep",
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
"0102030405060708090a0b0c0d", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP104HexUppercase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep",
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
"0102030405060708090A0B0C0D", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndex) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep",
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
"0:0102030405060708090a0b0c0d", &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_F(WiFiMainTest, GetWifiServiceWEP104HexWithKeyIndexAndBase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wep",
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWep,
"0:0x0102030405060708090a0b0c0d", &e);
EXPECT_TRUE(e.IsSuccess());
}
@@ -612,13 +624,15 @@
TEST_P(WiFiGetServiceSuccessTest, Passphrase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wpa", GetParam().c_str(), &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWpa,
+ GetParam().c_str(), &e);
EXPECT_TRUE(e.IsSuccess());
}
TEST_P(WiFiGetServiceFailureTest, Passphrase) {
Error e;
- GetService("wifi", "an_ssid", "managed", "wpa", GetParam().c_str(), &e);
+ GetService("wifi", "an_ssid", flimflam::kModeManaged, flimflam::kSecurityWpa,
+ GetParam().c_str(), &e);
EXPECT_EQ(Error::kInvalidPassphrase, e.type());
}
@@ -640,6 +654,56 @@
string(IEEE_80211::kWPAAsciiMaxLen+1, 'Z'),
string(IEEE_80211::kWPAHexLen+1, '1')));
+TEST_F(WiFiMainTest, FindServiceWEP) {
+ const string ssid("an_ssid");
+ {
+ Error e;
+ GetService("wifi", ssid.c_str(), flimflam::kModeManaged,
+ flimflam::kSecurityWep, "abcde", &e);
+ EXPECT_TRUE(e.IsSuccess());
+ }
+ vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end());
+
+ EXPECT_TRUE(wifi()->FindService(ssid_bytes, flimflam::kModeManaged,
+ flimflam::kSecurityWep).get());
+ EXPECT_FALSE(wifi()->FindService(ssid_bytes, flimflam::kModeManaged,
+ flimflam::kSecurityWpa).get());
+}
+
+TEST_F(WiFiMainTest, FindServiceWPA) {
+ const string ssid("an_ssid");
+ {
+ Error e;
+ GetService("wifi", ssid.c_str(), flimflam::kModeManaged,
+ flimflam::kSecurityRsn, "abcdefgh", &e);
+ EXPECT_TRUE(e.IsSuccess());
+ }
+ vector<uint8_t> ssid_bytes(ssid.begin(), ssid.end());
+ WiFiServiceRefPtr wpa_service(
+ wifi()->FindService(ssid_bytes, flimflam::kModeManaged,
+ flimflam::kSecurityWpa));
+ EXPECT_TRUE(wpa_service.get());
+ WiFiServiceRefPtr rsn_service(
+ wifi()->FindService(ssid_bytes, flimflam::kModeManaged,
+ flimflam::kSecurityRsn));
+ EXPECT_TRUE(rsn_service.get());
+ EXPECT_EQ(wpa_service.get(), rsn_service.get());
+ WiFiServiceRefPtr psk_service(
+ wifi()->FindService(ssid_bytes, flimflam::kModeManaged,
+ flimflam::kSecurityPsk));
+ EXPECT_EQ(wpa_service.get(), psk_service.get());
+ // Indirectly test FindService by doing a GetService on something that
+ // already exists.
+ {
+ Error e;
+ WiFiServiceRefPtr wpa_service2(
+ GetServiceInner("wifi", ssid.c_str(), flimflam::kModeManaged,
+ flimflam::kSecurityWpa, "abcdefgh", false, &e));
+ EXPECT_TRUE(e.IsSuccess());
+ EXPECT_EQ(wpa_service.get(), wpa_service2.get());
+ }
+}
+
MATCHER_P(HasHiddenSSID, ssid, "") {
std::map<string, DBus::Variant>::const_iterator it =
arg.find(wpa_supplicant::kPropertyScanSSIDs);
@@ -668,7 +732,7 @@
"fi.w1.wpa_supplicant1.InterfaceUnknown",
"test threw fi.w1.wpa_supplicant1.InterfaceUnknown")));
Error e;
- GetHiddenService("wifi", "an_ssid", "managed", &e);
+ GetHiddenService("wifi", "an_ssid", flimflam::kModeManaged, &e);
EXPECT_TRUE(e.IsSuccess());
EXPECT_CALL(*supplicant_interface_proxy_, Scan(HasHiddenSSID("an_ssid")));
StartWiFi();