shill: cellular: Delete MobileOperator. This is a half-completed class that we never ended up using. It has been superseded by |MobileOpertorInfo|. BUG=chromium:371630 TEST=Run shill_unittests. Change-Id: I4a13bd2676246836a47bac1ba3cabac7d0a0dccb Reviewed-on: https://chromium-review.googlesource.com/201102 Reviewed-by: Thieu Le <thieule@chromium.org> Commit-Queue: Prathmesh Prabhu <pprabhu@chromium.org> Tested-by: Prathmesh Prabhu <pprabhu@chromium.org>
diff --git a/mobile_operator.cc b/mobile_operator.cc deleted file mode 100644 index 189189a..0000000 --- a/mobile_operator.cc +++ /dev/null
@@ -1,330 +0,0 @@ -// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "shill/mobile_operator.h" - -#include <vector> - -#include <base/stl_util.h> -#include <chromeos/dbus/service_constants.h> -#include <mobile_provider.h> - -#include "shill/cellular_operator_info.h" -#include "shill/logging.h" -#include "shill/modem_info.h" - -using std::string; -using std::vector; - -namespace shill { - -namespace { - -const char kCodeKey[] = "code"; -const char kCountryKey[] = "country"; -const char kNameKey[] = "name"; - -bool CompareStringmapValue(const Stringmap &dict, const string &key, - const string &value) { - if (!ContainsKey(dict, key)) - return value.empty(); - return dict.find(key)->second == value; -} - -const CellularOperatorInfo::CellularOperator *LookupCellularOperatorInfo( - shill::ModemInfo *modem_info, const string &code, - MobileOperator::OperatorCodeType type) { - if (type == MobileOperator::kOperatorCodeTypeMCCMNC) - return modem_info->cellular_operator_info()-> - GetCellularOperatorByMCCMNC(code); - if (type == MobileOperator::kOperatorCodeTypeSID) - return modem_info->cellular_operator_info()-> - GetCellularOperatorBySID(code); - return nullptr; -} - -mobile_provider *LookupMobileProviderDB( - shill::ModemInfo *modem_info, const string &code, const string &name, - MobileOperator::OperatorCodeType type) { - if (type != MobileOperator::kOperatorCodeTypeMCCMNC) - return nullptr; - return mobile_provider_lookup_best_match( - modem_info->provider_db(), name.c_str(), code.c_str()); -} - -bool AssignDictData(const Stringmap &from, const vector<string> &keys, - Stringmap *to) { - bool contents_changed = false; - for (const string &key : keys) { - string value; - if (ContainsKey(from, key)) - value = from.find(key)->second; - if (!CompareStringmapValue(*to, key, value)) { - contents_changed = true; - if (value.empty()) - to->erase(key); - else - (*to)[key] = value; - } - } - return contents_changed; -} - -bool AssignOperatorData(const Stringmap &from, Stringmap *to) { - vector<string> keys = { kCodeKey, kNameKey, kCountryKey }; - return AssignDictData(from, keys, to); -} - -bool AssignOlpData(const Stringmap &from, Stringmap *to) { - vector<string> keys = { "url", "method", "postdata" }; - return AssignDictData(from, keys, to); -} - -Stringmaps BuildApnListFromCellularOperatorInfoResult( - const CellularOperatorInfo::CellularOperator *info) { - Stringmaps apn_list; - for (const CellularOperatorInfo::MobileAPN *apn : info->apn_list().get()) { - Stringmap apn_dict; - if (!apn->apn.empty()) - apn_dict[shill::kApnProperty] = apn->apn; - if (!apn->username.empty()) - apn_dict[shill::kApnUsernameProperty] = apn->username; - if (!apn->password.empty()) - apn_dict[shill::kApnPasswordProperty] = apn->password; - string lname, lang, name; - for (const CellularOperatorInfo::LocalizedName &apn_name : - apn->name_list) { - if (!apn_name.language.empty()) { - if (lname.empty()) { - lname = apn_name.name; - lang = apn_name.language; - } - } else if (name.empty()) { - name = apn_name.name; - } - } - if (!name.empty()) - apn_dict[shill::kApnNameProperty] = name; - if (!lname.empty()) { - apn_dict[shill::kApnLocalizedNameProperty] = lname; - apn_dict[shill::kApnLanguageProperty] = lang; - } - apn_list.push_back(apn_dict); - } - return apn_list; -} - -Stringmaps BuildApnListFromMobileProviderDbResult(mobile_provider *provider) { - Stringmaps apn_list; - for (int i = 0; i < provider->num_apns; ++i) { - Stringmap apn_dict; - mobile_apn *apn = provider->apns[i]; - if (apn->value) - apn_dict[shill::kApnProperty] = apn->value; - if (apn->username) - apn_dict[shill::kApnUsernameProperty] = apn->username; - if (apn->password) - apn_dict[shill::kApnPasswordProperty] = apn->password; - const localized_name *lname = NULL; - const localized_name *name = NULL; - for (int j = 0; j < apn->num_names; ++j) { - if (apn->names[j]->lang) { - if (!lname) { - lname = apn->names[j]; - } - } else if (!name) { - name = apn->names[j]; - } - } - if (name) { - apn_dict[kApnNameProperty] = name->name; - } - if (lname) { - apn_dict[kApnLocalizedNameProperty] = lname->name; - apn_dict[kApnLanguageProperty] = lname->lang; - } - apn_list.push_back(apn_dict); - } - return apn_list; -} - -struct LookupResult { - // |operator_data| contains the following keys: - // - // kNameKey: The name of the operator, - // kCodeKey: The operator code, - // kCountryKey: Country code, - // - // Any of the above keys may not be present in the returned dictionary, if a - // matching value was not found. - Stringmap operator_data; - bool requires_roaming; - Stringmaps apn_list; -}; - -// Finds the best match for the given data based on CellularOperatorInfo and -// mobile_provider_db. If |get_apns| is true, an APN list will be constructed -// if a carrier is found. If no match is found in the database, the kNameKey -// and kCodeKey keys for |operator_data| of the return value will be set to -// |operator_name| and |operator_code|, respectively. -LookupResult FindMatchingOperatorResult(shill::ModemInfo *modem_info, - const string &operator_code, - const string &operator_name, - MobileOperator::OperatorCodeType type, - bool get_apns) { - LookupResult result; - // First look up in CellularOperatorInfo. - const CellularOperatorInfo::CellularOperator *info = - LookupCellularOperatorInfo(modem_info, operator_code, type); - if (info) { - // Match found, depend on information from here. - SLOG(Cellular, 3) << "Found match for operator code " << operator_code - << "in CellularOperatorInfo."; - result.operator_data[kCodeKey] = operator_code; - if (!operator_name.empty()) - result.operator_data[kNameKey] = operator_name; - else if (!info->name_list().empty()) - result.operator_data[kNameKey] = info->name_list()[0].name; - result.operator_data[kCountryKey] = info->country(); - result.requires_roaming = false; - - // Build APN list if requested. - if (get_apns) - result.apn_list = BuildApnListFromCellularOperatorInfoResult(info); - return result; - } - // Look up mobile_provider_db. - mobile_provider *provider = LookupMobileProviderDB( - modem_info, operator_code, operator_name, type); - if (provider) { - SLOG(Cellular, 3) << "Found match for operator code " << operator_code - << "in mobile_provider_db."; - // mobile_provider_db look up works using both |code| and |name|. If no - // operator code was provided, use what was returned from the database. - if (!operator_code.empty()) - result.operator_data[kCodeKey] = operator_code; - else if (provider->networks && provider->networks[0]) - result.operator_data[kCodeKey] = provider->networks[0]; - if (provider->country) - result.operator_data[kCountryKey] = provider->country; - if (!operator_name.empty()) - result.operator_data[kNameKey] = operator_name; - else { - const gchar *name = mobile_provider_get_name(provider); - if (name) - result.operator_data[kNameKey] = name; - } - result.requires_roaming = provider->requires_roaming; - - // Build APN list if requested. - if (get_apns) - result.apn_list = BuildApnListFromMobileProviderDbResult(provider); - return result; - } - SLOG(Cellular, 3) << "No match found for operator code " - << operator_code << "."; - if (!operator_code.empty()) - result.operator_data[kCodeKey] = operator_code; - if (!operator_name.empty()) - result.operator_data[kNameKey] = operator_name; - return result; -} - -} // namespace - -MobileOperator::MobileOperator(ModemInfo *modem_info) - : modem_info_(modem_info), - home_provider_requires_roaming_(false) {} - -void MobileOperator::AddObserver(Observer *observer) { - observers_.AddObserver(observer); -} - -void MobileOperator::RemoveObserver(Observer *observer) { - observers_.RemoveObserver(observer); -} - -void MobileOperator::SimOperatorInfoReceived(const string &operator_code, - const string &operator_name) { - if (operator_code.empty() && operator_name.empty()) { - // Clear the home provider. - if (!home_provider_.empty()) { - home_provider_.clear(); - NotifyHomeProviderInfoChanged(); - } - return; - } - LookupResult result = FindMatchingOperatorResult( - modem_info_, operator_code, operator_name, - kOperatorCodeTypeMCCMNC, false); - home_provider_requires_roaming_ = result.requires_roaming; - if (AssignOperatorData(result.operator_data, &home_provider_)) - NotifyHomeProviderInfoChanged(); -} - -void MobileOperator::OtaOperatorInfoReceived(const string &operator_code, - const string &operator_name, - OperatorCodeType type) { - if (operator_code.empty() && operator_name.empty()) { - apn_list_.clear(); - online_payment_url_template_.clear(); - if (!serving_operator_.empty()) { - serving_operator_.clear(); - NotifyServingOperatorInfoChanged(); - } - return; - } - - // Look up the operator and assign it to |serving_operator_|. - LookupResult result = FindMatchingOperatorResult( - modem_info_, operator_code, operator_name, type, true); - bool serving_operator_changed = - AssignOperatorData(result.operator_data, &serving_operator_); - - // For now, always notify that APNList changed, as long as the constructed - // list is non-empty. - if (!apn_list_.empty() || !result.apn_list.empty()) { - apn_list_ = result.apn_list; - NotifyApnListChanged(); - } - - // Update the OLP. Notify observers if OLP changed. - const CellularService::OLP *olp_result = NULL; - if (type == kOperatorCodeTypeMCCMNC) { - olp_result = modem_info_->cellular_operator_info()-> - GetOLPByMCCMNC(operator_code); - } else { - olp_result = modem_info_->cellular_operator_info()-> - GetOLPBySID(operator_code); - } - if (olp_result) { - Stringmap olp_dict = olp_result->ToDict(); - if (AssignOlpData(olp_dict, &online_payment_url_template_)) - NotifyOnlinePaymentUrlTemplateChanged(); - } else if (!online_payment_url_template_.empty()) { - online_payment_url_template_.clear(); - NotifyOnlinePaymentUrlTemplateChanged(); - } - if (serving_operator_changed) - NotifyServingOperatorInfoChanged(); -} - -void MobileOperator::NotifyHomeProviderInfoChanged() { - FOR_EACH_OBSERVER(Observer, observers_, OnHomeProviderInfoChanged(this)); -} - -void MobileOperator::NotifyServingOperatorInfoChanged() { - FOR_EACH_OBSERVER(Observer, observers_, OnServingOperatorInfoChanged(this)); -} - -void MobileOperator::NotifyApnListChanged() { - FOR_EACH_OBSERVER(Observer, observers_, OnApnListChanged(this)); -} - -void MobileOperator::NotifyOnlinePaymentUrlTemplateChanged() { - FOR_EACH_OBSERVER( - Observer, observers_, OnOnlinePaymentUrlTemplateChanged(this)); -} - -} // namespace shill
diff --git a/mobile_operator.h b/mobile_operator.h deleted file mode 100644 index cf2ad2c..0000000 --- a/mobile_operator.h +++ /dev/null
@@ -1,139 +0,0 @@ -// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SHILL_MOBILE_OPERATOR_H_ -#define SHILL_MOBILE_OPERATOR_H_ - -#include <string> - -#include <base/observer_list.h> - -#include "shill/accessor_interface.h" - -namespace shill { - -class ModemInfo; - -// MobileOperator contains information related to the current cellular -// carrier based on data read from the Modem and provides a common place to -// access this information from. -class MobileOperator { - public: - enum OperatorCodeType { - kOperatorCodeTypeSID, - kOperatorCodeTypeMCCMNC - }; - - // Observer interface used to notify interested classes that data has been - // updated. - class Observer { - public: - virtual void OnHomeProviderInfoChanged(const MobileOperator *handler) = 0; - virtual void OnServingOperatorInfoChanged( - const MobileOperator *handler) = 0; - virtual void OnApnListChanged(const MobileOperator *handler) = 0; - virtual void OnOnlinePaymentUrlTemplateChanged( - const MobileOperator *handler) = 0; - }; - - explicit MobileOperator(ModemInfo *modem_info); - - // Add/remove observers to subscribe to notifications. - void AddObserver(Observer *observer); - void RemoveObserver(Observer *observer); - - // This should be called, when operator data is received OTA. The result of - // this operation dictates the serving operator, APN list and the online - // payment URL. This method will do its best to fill in the operator - // information from the databases. - // - // If |operator_code| is missing, and no best match is found based on - // |operator_name|, the contents of the serving operator will be cleared. If - // neither |operator_code| nor |operator_name| match an entry in the - // databases, the serving operator will be updated based on these arguments. - void OtaOperatorInfoReceived(const std::string &operator_code, - const std::string &operator_name, - OperatorCodeType type); - - // This should be called, when operator data is received from the SIM card. - // The result of this operation dictates the home provider. - // - // If |operator_code| is missing, and no best match is found based on - // |operator_name|, the contents of the home provider will be cleared. If - // neither |operator_code| nor |operator_name| match an entry in the - // databases, the home provider will be updated based on these arguments. - // - // For this method, |operator_code| is always in the MCCMNC format, as SIMs - // don't report SIDs. If an SID is passed for |operator_code|, the method - // will interpret it as an MCCMNC value. - void SimOperatorInfoReceived(const std::string &operator_code, - const std::string &operator_name); - - // Provider information. A user's home provider is the carrier they purchased - // their data plan from, whereas the serving operator is the current cellular - // operator that is feeding their data. These two are usually the same, - // except in the cases of roaming and CDMA. The format of the returned - // dictionary is: - // { - // "name": <operator-name>, - // "code": <operator-code>, - // "country": <operator-country> - // } - // The keys correspond to shill::kOperatorNameKey, shill::kOperatorCodeKey, - // and shill::kOperatorCountryKey respectively, as defined in - // service_constants.h. If any of the above keys is not known, there will be - // no entry in the dictionary for it. - const Stringmap &home_provider() const { return home_provider_; } - const Stringmap &serving_operator() const { return serving_operator_; } - - // Known access points related to the current serving operator. Possible keys - // are defined in service_constants.h as shill::kApn*. - const Stringmaps &apn_list() const { return apn_list_; } - - // The online payment URL, when available, is used by Chrome to access the - // carrier's service activation portal it is only available for select - // carriers. Possible keys are: - // { - // "url": <the url>, - // "method": <HTTP method>, - // "postdata": <argument template for the url> - // } - // The argument template is used to construct the POST arguments for the URL - // using information such as ICCID, IMEI, etc. - // TODO(armansito): Define constants for the above keys in - // service_constants.h (Also see TODO in cellular_service.cc:35). - const Stringmap &online_payment_url_template() const { - return online_payment_url_template_; - } - - bool home_provider_requires_roaming() const { - return home_provider_requires_roaming_; - } - - private: - // These methods notify observers of events. - void NotifyHomeProviderInfoChanged(); - void NotifyServingOperatorInfoChanged(); - void NotifyApnListChanged(); - void NotifyOnlinePaymentUrlTemplateChanged(); - - // It is OK to use a raw pointer here, as: - // 1. ModemInfo is not owned by MobileOperator. - // 2. ModemInfo has a longer life-time than MobileOperator. - ModemInfo *modem_info_; - - Stringmap home_provider_; - Stringmap serving_operator_; - Stringmaps apn_list_; - Stringmap online_payment_url_template_; - bool home_provider_requires_roaming_; - - ObserverList<Observer> observers_; - - DISALLOW_COPY_AND_ASSIGN(MobileOperator); -}; - -} // namespace shill - -#endif // SHILL_MOBILE_OPERATOR_H_
diff --git a/mobile_operator_unittest.cc b/mobile_operator_unittest.cc deleted file mode 100644 index 9ec044b..0000000 --- a/mobile_operator_unittest.cc +++ /dev/null
@@ -1,651 +0,0 @@ -// Copyright (c) 2013 The Chromium OS Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "shill/mobile_operator.h" - -#include <gmock/gmock.h> -#include <gtest/gtest.h> - -#include "shill/cellular_service.h" // TODO(armansito): Remove once OLP moves. -#include "shill/mock_cellular_operator_info.h" -#include "shill/mock_modem_info.h" - -using testing::_; -using testing::Mock; -using testing::Return; - -namespace shill { - -namespace { - -const char kTestMobileProviderDbPath[] = "provider_db_unittest.bfd"; -const char kTestUnknownOperatorCode[] = "unknown-code"; -const char kTestUnknownOperatorName[] = "unknown-name"; -const char kTestOperatorInfoCodeMccmnc[] = "test-mccmnc"; -const char kTestOperatorInfoCodeSid[] = "test-sid"; -const char kTestNoOlpOperatorInfoCode[] = "no-olp-code"; -const char kTestOperatorInfoName[] = "test-operator-name"; -const char kTestOperatorInfoCountry[] = "test-country"; -const char kTestOlpUrl[] = "test-url"; -const char kTestOlpMethod[] = "test-method"; -const char kTestOlpPostData[] = "test-post-data"; -const char kTestLocalizedName[] = "test-localized-name"; -const char kTestLocalizedNameLanguage[] = "test-localized-name-language"; -const char kTestApn0[] = "test-apn0"; -const char kTestApnUsername0[] = "test-apn-username0"; -const char kTestApnPassword0[] = "test-apn-password0"; -const char kTestApn1[] = "test-apn1"; -const char kTestApnUsername1[] = "test-apn-username1"; -const char kTestApnPassword1[] = "test-apn-password1"; - -const char kProviderDbCode0[] = "22803"; -const char kProviderDbName0[] = "Orange"; -const char kProviderDbCountry0[] = "ch"; -const char kProviderDbCode1[] = "310038"; -const char kProviderDbName1[] = "AT&T"; -const char kProviderDbCountry1[] = "us"; - -} // namespace - -class TestMobileOperatorObserver : public MobileOperator::Observer { - public: - MOCK_METHOD1(OnHomeProviderInfoChanged, void(const MobileOperator *)); - MOCK_METHOD1(OnServingOperatorInfoChanged, void(const MobileOperator *)); - MOCK_METHOD1(OnApnListChanged, void(const MobileOperator *)); - MOCK_METHOD1(OnOnlinePaymentUrlTemplateChanged, - void(const MobileOperator *)); -}; - -class MobileOperatorTest : public testing::Test { - public: - MobileOperatorTest() - : modem_info_(NULL, NULL, NULL, NULL, NULL), - operator_(&modem_info_) {} - - void SetUp() { - operator_.AddObserver(&observer_); - modem_info_.SetProviderDB(kTestMobileProviderDbPath); - SetupCellularOperatorInfo(); - } - - void TearDown() { - operator_.RemoveObserver(&observer_); - } - - // Called from SetUp. - void SetupCellularOperatorInfo() { - test_olp_.SetURL(kTestOlpUrl); - test_olp_.SetMethod(kTestOlpMethod); - test_olp_.SetPostData(kTestOlpPostData); - CellularOperatorInfo::LocalizedName name; - name.name = kTestOperatorInfoName; - test_operator_.name_list_.push_back(name); - test_operator_.country_ = kTestOperatorInfoCountry; - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetCellularOperatorByMCCMNC(_)) - .WillByDefault(Return(nullptr)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetCellularOperatorByMCCMNC(kTestOperatorInfoCodeMccmnc)) - .WillByDefault(Return(&test_operator_)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetCellularOperatorByMCCMNC(kTestNoOlpOperatorInfoCode)) - .WillByDefault(Return(&test_operator_)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetCellularOperatorBySID(_)) - .WillByDefault(Return(nullptr)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetCellularOperatorBySID(kTestOperatorInfoCodeSid)) - .WillByDefault(Return(&test_operator_)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetCellularOperatorBySID(kTestNoOlpOperatorInfoCode)) - .WillByDefault(Return(&test_operator_)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetOLPByMCCMNC(_)) - .WillByDefault(Return(nullptr)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetOLPByMCCMNC(kTestOperatorInfoCodeMccmnc)) - .WillByDefault(Return(&test_olp_)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetOLPBySID(_)) - .WillByDefault(Return(nullptr)); - ON_CALL(*modem_info_.mock_cellular_operator_info(), - GetOLPBySID(kTestOperatorInfoCodeSid)) - .WillByDefault(Return(&test_olp_)); - } - - // Called from tests. - void SetupApnList() { - CellularOperatorInfo::LocalizedName localized_name( - kTestLocalizedName, kTestLocalizedNameLanguage); - CellularOperatorInfo::MobileAPN *apn = new CellularOperatorInfo::MobileAPN; - apn->apn = kTestApn0; - apn->username = kTestApnUsername0; - apn->password = kTestApnPassword0; - apn->name_list.push_back(localized_name); - test_operator_.apn_list_.push_back(apn); // Passes ownership. - - apn = new CellularOperatorInfo::MobileAPN; - apn->apn = kTestApn1; - apn->username = kTestApnUsername1; - apn->password = kTestApnPassword1; - apn->name_list.push_back(CellularOperatorInfo::LocalizedName( - kTestOperatorInfoName, "")); - apn->name_list.push_back(localized_name); - test_operator_.apn_list_.push_back(apn); // Passes ownership. - } - - protected: - MockModemInfo modem_info_; - MobileOperator operator_; - TestMobileOperatorObserver observer_; - CellularOperatorInfo::CellularOperator test_operator_; - CellularService::OLP test_olp_; -}; - -TEST_F(MobileOperatorTest, OtaOperatorInfoReceivedNotFound) { - EXPECT_TRUE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.apn_list().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - - operator_.OtaOperatorInfoReceived( - "", "", MobileOperator::kOperatorCodeTypeMCCMNC); - operator_.OtaOperatorInfoReceived( - "", "", MobileOperator::kOperatorCodeTypeSID); - Mock::VerifyAndClearExpectations(&observer_); - - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(2); - operator_.OtaOperatorInfoReceived(kTestUnknownOperatorCode, "", - MobileOperator::kOperatorCodeTypeMCCMNC); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_EQ(kTestUnknownOperatorCode, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(operator_.serving_operator().end(), - operator_.serving_operator().find("name")); - operator_.OtaOperatorInfoReceived("", kTestUnknownOperatorName, - MobileOperator::kOperatorCodeTypeMCCMNC); - EXPECT_EQ(operator_.serving_operator().end(), - operator_.serving_operator().find("code")); - EXPECT_EQ(kTestUnknownOperatorName, - operator_.serving_operator().find("name")->second); - - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.apn_list().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); -} - -TEST_F(MobileOperatorTest, SimOperatorInfoReceivedNotFound) { - EXPECT_TRUE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.apn_list().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - - operator_.SimOperatorInfoReceived("", ""); - Mock::VerifyAndClearExpectations(&observer_); - - operator_.SimOperatorInfoReceived(kTestUnknownOperatorCode, ""); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_EQ(kTestUnknownOperatorCode, - operator_.home_provider().find("code")->second); - EXPECT_EQ(operator_.home_provider().end(), - operator_.home_provider().find("name")); - - operator_.SimOperatorInfoReceived("", kTestUnknownOperatorName); - EXPECT_EQ(operator_.home_provider().end(), - operator_.home_provider().find("code")); - EXPECT_EQ(kTestUnknownOperatorName, - operator_.home_provider().find("name")->second); - - EXPECT_TRUE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.apn_list().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); -} - -TEST_F(MobileOperatorTest, OtaOperatorInfoReceivedMccmnc) { - // Operator code only. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kTestNoOlpOperatorInfoCode, "", - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestNoOlpOperatorInfoCode, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(kTestOperatorInfoCountry, - operator_.serving_operator().find("country")->second); - - // Update to same value. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - operator_.OtaOperatorInfoReceived(kTestNoOlpOperatorInfoCode, - kTestOperatorInfoName, - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestNoOlpOperatorInfoCode, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(kTestOperatorInfoCountry, - operator_.serving_operator().find("country")->second); - - // Update With OLP. - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kTestOperatorInfoCodeMccmnc, "", - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_EQ(kTestOperatorInfoCodeMccmnc, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.serving_operator().find("name")->second); - EXPECT_FALSE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestOlpUrl, - operator_.online_payment_url_template().find("url")->second); - EXPECT_EQ(kTestOlpMethod, - operator_.online_payment_url_template().find("method")->second); - EXPECT_EQ(kTestOlpPostData, - operator_.online_payment_url_template().find("postdata")->second); - - // Update just the operator name. - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - operator_.OtaOperatorInfoReceived(kTestOperatorInfoCodeMccmnc, "banana", - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_EQ(kTestOperatorInfoCodeMccmnc, - operator_.serving_operator().find("code")->second); - EXPECT_EQ("banana", - operator_.serving_operator().find("name")->second); - EXPECT_FALSE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestOlpUrl, - operator_.online_payment_url_template().find("url")->second); - EXPECT_EQ(kTestOlpMethod, - operator_.online_payment_url_template().find("method")->second); - EXPECT_EQ(kTestOlpPostData, - operator_.online_payment_url_template().find("postdata")->second); -} - -TEST_F(MobileOperatorTest, OtaOperatorInfoReceivedSid) { - // Operator code only. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kTestNoOlpOperatorInfoCode, "", - MobileOperator::kOperatorCodeTypeSID); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestNoOlpOperatorInfoCode, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(kTestOperatorInfoCountry, - operator_.serving_operator().find("country")->second); - - // Update to same value. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - operator_.OtaOperatorInfoReceived(kTestNoOlpOperatorInfoCode, - kTestOperatorInfoName, - MobileOperator::kOperatorCodeTypeSID); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestNoOlpOperatorInfoCode, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(kTestOperatorInfoCountry, - operator_.serving_operator().find("country")->second); - - // Update With OLP. - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kTestOperatorInfoCodeSid, "", - MobileOperator::kOperatorCodeTypeSID); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_EQ(kTestOperatorInfoCodeSid, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.serving_operator().find("name")->second); - EXPECT_FALSE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestOlpUrl, - operator_.online_payment_url_template().find("url")->second); - EXPECT_EQ(kTestOlpMethod, - operator_.online_payment_url_template().find("method")->second); - EXPECT_EQ(kTestOlpPostData, - operator_.online_payment_url_template().find("postdata")->second); - - // Update just the operator name. - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - operator_.OtaOperatorInfoReceived(kTestOperatorInfoCodeSid, "banana", - MobileOperator::kOperatorCodeTypeSID); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_EQ(kTestOperatorInfoCodeSid, - operator_.serving_operator().find("code")->second); - EXPECT_EQ("banana", - operator_.serving_operator().find("name")->second); - EXPECT_FALSE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestOlpUrl, - operator_.online_payment_url_template().find("url")->second); - EXPECT_EQ(kTestOlpMethod, - operator_.online_payment_url_template().find("method")->second); - EXPECT_EQ(kTestOlpPostData, - operator_.online_payment_url_template().find("postdata")->second); -} - -TEST_F(MobileOperatorTest, OtaReceivedMobileProviderDb) { - // Update with operator ID that doesn't exist in COI but is in - // the mobile provider db. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kProviderDbCode0, "", - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kProviderDbCode0, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kProviderDbName0, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(kProviderDbCountry0, - operator_.serving_operator().find("country")->second); - - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kProviderDbCode1, "", - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kProviderDbCode1, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(kProviderDbName1, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(kProviderDbCountry1, - operator_.serving_operator().find("country")->second); - - // Look up by name. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived("", kProviderDbName0, - MobileOperator::kOperatorCodeTypeMCCMNC); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(operator_.serving_operator().end(), - operator_.serving_operator().find("code")); - EXPECT_EQ(kProviderDbName0, - operator_.serving_operator().find("name")->second); - EXPECT_EQ(operator_.serving_operator().end(), - operator_.serving_operator().find("country")); - - // mobile provider DB doesn't support SID. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(1); - operator_.OtaOperatorInfoReceived(kProviderDbCode0, "", - MobileOperator::kOperatorCodeTypeSID); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kProviderDbCode0, - operator_.serving_operator().find("code")->second); - EXPECT_EQ(operator_.serving_operator().end(), - operator_.serving_operator().find("name")); - EXPECT_EQ(operator_.serving_operator().end(), - operator_.serving_operator().find("country")); -} - -TEST_F(MobileOperatorTest, SimOperatorInfoReceived) { - // Operator code only. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - operator_.SimOperatorInfoReceived(kTestNoOlpOperatorInfoCode, ""); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestNoOlpOperatorInfoCode, - operator_.home_provider().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.home_provider().find("name")->second); - EXPECT_EQ(kTestOperatorInfoCountry, - operator_.home_provider().find("country")->second); - - // Update to same value. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - operator_.SimOperatorInfoReceived(kTestNoOlpOperatorInfoCode, ""); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestNoOlpOperatorInfoCode, - operator_.home_provider().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.home_provider().find("name")->second); - EXPECT_EQ(kTestOperatorInfoCountry, - operator_.home_provider().find("country")->second); - - // Update with OLP: OLP shouldn't change. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - operator_.SimOperatorInfoReceived(kTestOperatorInfoCodeMccmnc, ""); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestOperatorInfoCodeMccmnc, - operator_.home_provider().find("code")->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.home_provider().find("name")->second); - - // Update just the operator name. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - operator_.SimOperatorInfoReceived(kTestOperatorInfoCodeMccmnc, "banana"); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_EQ(kTestOperatorInfoCodeMccmnc, - operator_.home_provider().find("code")->second); - EXPECT_EQ("banana", - operator_.home_provider().find("name")->second); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - - // Try passing a SID. No matching entry will be found. - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(1); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - operator_.SimOperatorInfoReceived(kTestOperatorInfoCodeSid, ""); - Mock::VerifyAndClearExpectations(&observer_); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_EQ(kTestOperatorInfoCodeSid, - operator_.home_provider().find("code")->second); - EXPECT_EQ(operator_.home_provider().end(), - operator_.home_provider().find("name")); - EXPECT_EQ(operator_.home_provider().end(), - operator_.home_provider().find("country")); -} - -TEST_F(MobileOperatorTest, ApnListUpdate) { - SetupApnList(); - EXPECT_TRUE(operator_.apn_list().empty()); - EXPECT_TRUE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - - // Set MCCMNC OTA. - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(3); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(3); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(2); - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(0); - operator_.OtaOperatorInfoReceived(kTestOperatorInfoCodeMccmnc, "", - MobileOperator::kOperatorCodeTypeMCCMNC); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_FALSE(operator_.online_payment_url_template().empty()); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_EQ(2, operator_.apn_list().size()); - EXPECT_EQ(kTestApn0, operator_.apn_list()[0].find(kApnProperty)->second); - EXPECT_EQ(kTestApnUsername0, - operator_.apn_list()[0].find(kApnUsernameProperty)->second); - EXPECT_EQ(kTestApnPassword0, - operator_.apn_list()[0].find(kApnPasswordProperty)->second); - EXPECT_EQ(kTestLocalizedName, - operator_.apn_list()[0].find(kApnLocalizedNameProperty)->second); - EXPECT_EQ(kTestLocalizedNameLanguage, - operator_.apn_list()[0].find(kApnLanguageProperty)->second); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnNameProperty)); - - EXPECT_EQ(kTestApn1, operator_.apn_list()[1].find("apn")->second); - EXPECT_EQ(kTestApnUsername1, - operator_.apn_list()[1].find(kApnUsernameProperty)->second); - EXPECT_EQ(kTestApnPassword1, - operator_.apn_list()[1].find(kApnPasswordProperty)->second); - EXPECT_EQ(kTestLocalizedName, - operator_.apn_list()[1].find(kApnLocalizedNameProperty)->second); - EXPECT_EQ(kTestLocalizedNameLanguage, - operator_.apn_list()[1].find(kApnLanguageProperty)->second); - EXPECT_EQ(kTestOperatorInfoName, - operator_.apn_list()[1].find(kApnNameProperty)->second); - - // Update APN list via provider DB. - operator_.OtaOperatorInfoReceived( - "22801", "", MobileOperator::kOperatorCodeTypeMCCMNC); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_TRUE(operator_.home_provider().empty()); - EXPECT_EQ(1, operator_.apn_list().size()); - EXPECT_EQ("gprs.swisscom.ch", - operator_.apn_list()[0].find(kApnProperty)->second); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnUsernameProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnPasswordProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnLocalizedNameProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnLanguageProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnNameProperty)); - - operator_.OtaOperatorInfoReceived( - "310160", "", MobileOperator::kOperatorCodeTypeMCCMNC); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_TRUE(operator_.home_provider().empty()); - - EXPECT_EQ(4, operator_.apn_list().size()); - EXPECT_EQ("epc.tmobile.com", - operator_.apn_list()[0].find(kApnProperty)->second); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnUsernameProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnPasswordProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnLocalizedNameProperty)); - EXPECT_EQ(operator_.apn_list()[0].end(), - operator_.apn_list()[0].find(kApnLanguageProperty)); - EXPECT_EQ("Internet/WebConnect", - operator_.apn_list()[0].find(kApnNameProperty)->second); - - EXPECT_EQ("wap.voicestream.com", - operator_.apn_list()[1].find(kApnProperty)->second); - EXPECT_EQ(operator_.apn_list()[1].end(), - operator_.apn_list()[1].find(kApnUsernameProperty)); - EXPECT_EQ(operator_.apn_list()[1].end(), - operator_.apn_list()[1].find(kApnPasswordProperty)); - EXPECT_EQ(operator_.apn_list()[1].end(), - operator_.apn_list()[1].find(kApnLocalizedNameProperty)); - EXPECT_EQ(operator_.apn_list()[1].end(), - operator_.apn_list()[1].find(kApnLanguageProperty)); - EXPECT_EQ("Web2Go/t-zones", - operator_.apn_list()[1].find(kApnNameProperty)->second); - - EXPECT_EQ("internet2.voicestream.com", - operator_.apn_list()[2].find(kApnProperty)->second); - EXPECT_EQ(operator_.apn_list()[2].end(), - operator_.apn_list()[2].find(kApnUsernameProperty)); - EXPECT_EQ(operator_.apn_list()[2].end(), - operator_.apn_list()[2].find(kApnPasswordProperty)); - EXPECT_EQ(operator_.apn_list()[2].end(), - operator_.apn_list()[2].find(kApnLocalizedNameProperty)); - EXPECT_EQ(operator_.apn_list()[2].end(), - operator_.apn_list()[2].find(kApnLanguageProperty)); - EXPECT_EQ("Internet (old)", - operator_.apn_list()[2].find(kApnNameProperty)->second); - - EXPECT_EQ("internet3.voicestream.com", - operator_.apn_list()[3].find(kApnProperty)->second); - EXPECT_EQ(operator_.apn_list()[3].end(), - operator_.apn_list()[3].find(kApnUsernameProperty)); - EXPECT_EQ(operator_.apn_list()[3].end(), - operator_.apn_list()[3].find(kApnPasswordProperty)); - EXPECT_EQ(operator_.apn_list()[3].end(), - operator_.apn_list()[3].find(kApnLocalizedNameProperty)); - EXPECT_EQ(operator_.apn_list()[3].end(), - operator_.apn_list()[3].find(kApnLanguageProperty)); - EXPECT_EQ("Internet with VPN (old)", - operator_.apn_list()[3].find(kApnNameProperty)->second); - Mock::VerifyAndClearExpectations(&observer_); - - // Set from SIM. This shouldn't update the APN list. - EXPECT_CALL(observer_, OnApnListChanged(_)).Times(0); - EXPECT_CALL(observer_, OnServingOperatorInfoChanged(_)).Times(0); - EXPECT_CALL(observer_, OnOnlinePaymentUrlTemplateChanged(_)).Times(0); - EXPECT_CALL(observer_, OnHomeProviderInfoChanged(_)).Times(1); - operator_.SimOperatorInfoReceived(kTestOperatorInfoCodeMccmnc, ""); - EXPECT_FALSE(operator_.serving_operator().empty()); - EXPECT_TRUE(operator_.online_payment_url_template().empty()); - EXPECT_FALSE(operator_.home_provider().empty()); - EXPECT_EQ(4, operator_.apn_list().size()); -} - -} // namespace shill