shill: cellular: Avoid null pointer dereference if provider has no networks.
Also:
- Add a SetHomeProvider unit tests to CellularCapabilityUniversal.
- Free the test broadband provider database in CellularCapabilityUniversalTest.
BUG=chromium-os:33375
TEST=unit tests, tested on device
Change-Id: I37086954e51500840d6aa424964c973fccc6b22b
Reviewed-on: https://gerrit.chromium.org/gerrit/29872
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/cellular_capability_universal_unittest.cc b/cellular_capability_universal_unittest.cc
index a696172..2c0d14a 100644
--- a/cellular_capability_universal_unittest.cc
+++ b/cellular_capability_universal_unittest.cc
@@ -97,6 +97,10 @@
cellular_->service_ = NULL;
capability_ = NULL;
device_adaptor_ = NULL;
+ if (provider_db_) {
+ mobile_provider_close_db(provider_db_);
+ provider_db_ = NULL;
+ }
}
virtual void SetUp() {
@@ -736,4 +740,50 @@
ASSERT_EQ(capability_->GetTypeString(), "");
}
+TEST_F(CellularCapabilityUniversalTest, SetHomeProvider) {
+ static const char kTestCarrier[] = "The Cellular Carrier";
+ static const char kCountry[] = "us";
+ static const char kCode[] = "310160";
+ capability_->imsi_ = "310240123456789";
+
+ capability_->SetHomeProvider(); // No mobile provider DB available.
+ EXPECT_TRUE(cellular_->home_provider().GetName().empty());
+ EXPECT_TRUE(cellular_->home_provider().GetCountry().empty());
+ EXPECT_TRUE(cellular_->home_provider().GetCode().empty());
+
+ InitProviderDB();
+ capability_->SetHomeProvider();
+ EXPECT_EQ("T-Mobile", cellular_->home_provider().GetName());
+ EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
+ EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
+ EXPECT_EQ(4, capability_->apn_list_.size());
+ ASSERT_TRUE(capability_->home_provider_);
+ EXPECT_FALSE(capability_->home_provider_->requires_roaming);
+
+ Cellular::Operator oper;
+ cellular_->set_home_provider(oper);
+ capability_->spn_ = kTestCarrier;
+ capability_->SetHomeProvider();
+ EXPECT_EQ(kTestCarrier, cellular_->home_provider().GetName());
+ EXPECT_EQ(kCountry, cellular_->home_provider().GetCountry());
+ EXPECT_EQ(kCode, cellular_->home_provider().GetCode());
+
+ static const char kCubic[] = "Cubic";
+ capability_->spn_ = kCubic;
+ capability_->SetHomeProvider();
+ EXPECT_EQ(kCubic, cellular_->home_provider().GetName());
+ EXPECT_EQ("", cellular_->home_provider().GetCode());
+ ASSERT_TRUE(capability_->home_provider_);
+ EXPECT_TRUE(capability_->home_provider_->requires_roaming);
+
+ static const char kCUBIC[] = "CUBIC";
+ capability_->spn_ = kCUBIC;
+ capability_->home_provider_ = NULL;
+ capability_->SetHomeProvider();
+ EXPECT_EQ(kCUBIC, cellular_->home_provider().GetName());
+ EXPECT_EQ("", cellular_->home_provider().GetCode());
+ ASSERT_TRUE(capability_->home_provider_);
+ EXPECT_TRUE(capability_->home_provider_->requires_roaming);
+}
+
} // namespace shill