shill: Add support for connecting to WEP networks
BUG=chromium-os:20898
TEST=Unit tests, manually modified network_WiFiManager WEP tests to
connect using various passwords (the WEP tests cannot complete
successfully until shill supports service disconnect),
network_WiFiManager/*WPA* tests
Change-Id: I6a962810983d04776e9ce39bb5e6f8c378aacb7b
Reviewed-on: https://gerrit.chromium.org/gerrit/11511
Commit-Ready: Thieu Le <thieule@chromium.org>
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
diff --git a/wifi_service_unittest.cc b/wifi_service_unittest.cc
index 929766c..8b366b9 100644
--- a/wifi_service_unittest.cc
+++ b/wifi_service_unittest.cc
@@ -234,6 +234,75 @@
wifi_service->ConnectTask();
}
+MATCHER(WEPSecurityArgsKeyIndex0, "") {
+ return ContainsKey(arg, wpa_supplicant::kPropertyAuthAlg) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPKey + std::string("0")) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPTxKeyIndex) &&
+ (arg.find(wpa_supplicant::kPropertyWEPTxKeyIndex)->second.
+ reader().get_uint32() == 0);
+}
+
+MATCHER(WEPSecurityArgsKeyIndex1, "") {
+ return ContainsKey(arg, wpa_supplicant::kPropertyAuthAlg) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPKey + std::string("1")) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPTxKeyIndex) &&
+ (arg.find(wpa_supplicant::kPropertyWEPTxKeyIndex)->second.
+ reader().get_uint32() == 1);
+}
+
+MATCHER(WEPSecurityArgsKeyIndex2, "") {
+ return ContainsKey(arg, wpa_supplicant::kPropertyAuthAlg) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPKey + std::string("2")) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPTxKeyIndex) &&
+ (arg.find(wpa_supplicant::kPropertyWEPTxKeyIndex)->second.
+ reader().get_uint32() == 2);
+}
+
+MATCHER(WEPSecurityArgsKeyIndex3, "") {
+ return ContainsKey(arg, wpa_supplicant::kPropertyAuthAlg) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPKey + std::string("3")) &&
+ ContainsKey(arg, wpa_supplicant::kPropertyWEPTxKeyIndex) &&
+ (arg.find(wpa_supplicant::kPropertyWEPTxKeyIndex)->second.
+ reader().get_uint32() == 3);
+}
+
+TEST_F(WiFiServiceTest, ConnectTaskWEP) {
+ vector<uint8_t> ssid(5);
+ WiFiServiceRefPtr wifi_service = new WiFiService(control_interface(),
+ dispatcher(),
+ manager(),
+ wifi(),
+ ssid,
+ flimflam::kModeManaged,
+ flimflam::kSecurityWep,
+ false);
+ Error error;
+ wifi_service->SetPassphrase("0:abcdefghijklm", &error);
+ EXPECT_CALL(*wifi(),
+ ConnectTo(wifi_service.get(), WEPSecurityArgsKeyIndex0()));
+ wifi_service->ConnectTask();
+
+ wifi_service->SetPassphrase("abcdefghijklm", &error);
+ EXPECT_CALL(*wifi(),
+ ConnectTo(wifi_service.get(), WEPSecurityArgsKeyIndex0()));
+ wifi_service->ConnectTask();
+
+ wifi_service->SetPassphrase("1:abcdefghijklm", &error);
+ EXPECT_CALL(*wifi(),
+ ConnectTo(wifi_service.get(), WEPSecurityArgsKeyIndex1()));
+ wifi_service->ConnectTask();
+
+ wifi_service->SetPassphrase("2:abcdefghijklm", &error);
+ EXPECT_CALL(*wifi(),
+ ConnectTo(wifi_service.get(), WEPSecurityArgsKeyIndex2()));
+ wifi_service->ConnectTask();
+
+ wifi_service->SetPassphrase("3:abcdefghijklm", &error);
+ EXPECT_CALL(*wifi(),
+ ConnectTo(wifi_service.get(), WEPSecurityArgsKeyIndex3()));
+ wifi_service->ConnectTask();
+}
+
TEST_F(WiFiServiceTest, LoadHidden) {
vector<uint8_t> ssid(5);
ssid.push_back(0xff);