shill: wimax: Update WiMAX connectable property based on credential status.
BUG=chrome-os-partner:9841
TEST=unit tests
Change-Id: I4f5d518d86b2e40d7635ee631efef6a782709d1f
Reviewed-on: https://gerrit.chromium.org/gerrit/23120
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/wimax_service.cc b/wimax_service.cc
index bbab451..323c1b0 100644
--- a/wimax_service.cc
+++ b/wimax_service.cc
@@ -89,7 +89,7 @@
wimax_->address().c_str()));
replace_if(
storage_id_.begin(), storage_id_.end(), &Service::IllegalChar, '_');
- set_connectable(true);
+ UpdateConnectable();
return true;
}
@@ -115,6 +115,25 @@
return wimax_->GetRpcIdentifier();
}
+bool WiMaxService::Is8021x() const {
+ return true;
+}
+
+void WiMaxService::set_eap(const EapCredentials &eap) {
+ Service::set_eap(eap);
+ UpdateConnectable();
+}
+
+void WiMaxService::UpdateConnectable() {
+ // Don't use Service::Is8021xConnectable because we don't support the full set
+ // of authentication methods.
+ bool is_connectable = false;
+ if (!eap().identity.empty()) {
+ is_connectable = !eap().password.empty();
+ }
+ set_connectable(is_connectable);
+}
+
void WiMaxService::OnSignalStrengthChanged(int strength) {
SLOG(WiMax, 2) << __func__ << "(" << strength << ")";
SetStrength(strength);
diff --git a/wimax_service.h b/wimax_service.h
index fbd3e29..d2fd33a 100644
--- a/wimax_service.h
+++ b/wimax_service.h
@@ -44,15 +44,20 @@
virtual void Connect(Error *error);
virtual void Disconnect(Error *error);
virtual std::string GetStorageIdentifier() const;
+ virtual bool Is8021x() const;
+ virtual void set_eap(const EapCredentials &eap);
private:
FRIEND_TEST(WiMaxServiceTest, GetDeviceRpcId);
FRIEND_TEST(WiMaxServiceTest, OnSignalStrengthChanged);
+ FRIEND_TEST(WiMaxServiceTest, SetEAP);
virtual std::string GetDeviceRpcId(Error *error);
void OnSignalStrengthChanged(int strength);
+ void UpdateConnectable();
+
WiMaxRefPtr wimax_;
scoped_ptr<WiMaxNetworkProxyInterface> proxy_;
std::string storage_id_;
diff --git a/wimax_service_unittest.cc b/wimax_service_unittest.cc
index 966f60d..8263bc1 100644
--- a/wimax_service_unittest.cc
+++ b/wimax_service_unittest.cc
@@ -113,8 +113,24 @@
EXPECT_EQ(kName, service_->network_name());
EXPECT_EQ(kName, service_->friendly_name());
EXPECT_EQ(kIdentifier, service_->network_identifier());
- EXPECT_TRUE(service_->connectable());
+ EXPECT_FALSE(service_->connectable());
EXPECT_FALSE(service_->GetStorageIdentifier().empty());
}
+TEST_F(WiMaxServiceTest, SetEAP) {
+ ServiceRefPtr base_service = service_;
+ EXPECT_TRUE(base_service->Is8021x());
+ EXPECT_TRUE(service_->need_passphrase_);
+ EXPECT_FALSE(base_service->connectable());
+ Service::EapCredentials eap;
+ eap.identity = "TestIdentity";
+ base_service->set_eap(eap);
+ EXPECT_TRUE(service_->need_passphrase_);
+ EXPECT_FALSE(base_service->connectable());
+ eap.password = "TestPassword";
+ base_service->set_eap(eap);
+ EXPECT_TRUE(service_->need_passphrase_);
+ EXPECT_TRUE(base_service->connectable());
+}
+
} // namespace shill