blob: bb03d5c8facdec3b0978726bde16a9f03edc746e [file] [log] [blame]
// 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/cellular_operator_info.h"
#include <base/file_util.h>
#include <gtest/gtest.h>
#include "shill/glib.h"
using base::FilePath;
using std::map;
using std::string;
using std::vector;
namespace shill {
namespace {
const char kTestInfoFileContent[] =
"#\n"
"# Comments\n"
"#\n"
"serviceproviders:3.0\n"
"country:us\n"
"\n"
"# TestProvider1\n"
"provider:1,1,0,1\n"
"identifier:provider1identifier\n"
"name:,TestProvider1\n"
"mccmnc:000001,0,000002,0\n"
"sid:1,0,2,0,3,0\n"
"olp:POST,https://testurl,imei=${imei}&iccid=${iccid}\n"
"apn:2,testprovider1apn,,\n"
"name:en,Test Provider 1\n"
"name:de,Testmobilfunkanbieter 1\n"
"\n"
"# TestProvider2\n"
"provider:1,2,1,0\n"
"identifier:provider2identifier\n"
"name:,TestProviderTwo\n"
"name:,TestProvider2\n"
"mccmnc:100001,1,100002,0\n"
"sid:4,0,5,1\n"
"olp:,https://testurl2,\n"
"olp:,https://testurl3,\n"
"apn:1,testprovider2apn,,\n"
"name:,Test Provider 2\n"
"apn:1,testprovider2apn2,testusername,testpassword\n"
"name:tr,Test Operatoru 2\n";
} // namespace
class CellularOperatorInfoTest : public testing::Test {
public:
CellularOperatorInfoTest() {}
protected:
void SetUp() {
ASSERT_TRUE(file_util::CreateTemporaryFile(&info_file_path_));
ASSERT_EQ(arraysize(kTestInfoFileContent),
file_util::WriteFile(info_file_path_, kTestInfoFileContent,
arraysize(kTestInfoFileContent)));
}
void TruncateFile() {
FILE *file = file_util::OpenFile(info_file_path_, "rw");
file_util::TruncateFile(file);
file_util::CloseFile(file);
}
void WriteToFile(const char *content) {
ASSERT_EQ(strlen(content),
file_util::WriteFile(info_file_path_, content, strlen(content)));
}
void TruncateAndWriteToFile(const char *content) {
TruncateFile();
WriteToFile(content);
}
void TearDown() {
ASSERT_TRUE(file_util::Delete(info_file_path_, false));
}
GLib glib_;
FilePath info_file_path_;
CellularOperatorInfo info_;
};
TEST_F(CellularOperatorInfoTest, ParseSuccess) {
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(2, info_.operators().size());
const CellularOperatorInfo::CellularOperator *provider = info_.operators()[0];
EXPECT_FALSE(provider->is_primary());
EXPECT_TRUE(provider->requires_roaming());
EXPECT_EQ("us", provider->country());
EXPECT_EQ("provider1identifier", provider->identifier());
EXPECT_EQ(1, provider->name_list().size());
EXPECT_TRUE(provider->name_list()[0].language.empty());
EXPECT_EQ("TestProvider1", provider->name_list()[0].name);
EXPECT_EQ(2, provider->mccmnc_list().size());
EXPECT_EQ("000001", provider->mccmnc_list()[0]);
EXPECT_EQ("000002", provider->mccmnc_list()[1]);
EXPECT_EQ(3, provider->sid_list().size());
EXPECT_EQ("1", provider->sid_list()[0]);
EXPECT_EQ("2", provider->sid_list()[1]);
EXPECT_EQ("3", provider->sid_list()[2]);
EXPECT_EQ(1, provider->olp_list().size());
EXPECT_EQ("https://testurl", provider->olp_list()[0]->GetURL());
EXPECT_EQ("POST", provider->olp_list()[0]->GetMethod());
EXPECT_EQ("imei=${imei}&iccid=${iccid}",
provider->olp_list()[0]->GetPostData());
EXPECT_EQ(1, provider->apn_list().size());
EXPECT_EQ("testprovider1apn", provider->apn_list()[0]->apn);
EXPECT_TRUE(provider->apn_list()[0]->username.empty());
EXPECT_TRUE(provider->apn_list()[0]->password.empty());
EXPECT_EQ(2, provider->apn_list()[0]->name_list.size());
EXPECT_EQ("en", provider->apn_list()[0]->name_list[0].language);
EXPECT_EQ("Test Provider 1", provider->apn_list()[0]->name_list[0].name);
EXPECT_EQ("de", provider->apn_list()[0]->name_list[1].language);
EXPECT_EQ("Testmobilfunkanbieter 1",
provider->apn_list()[0]->name_list[1].name);
const CellularOperatorInfo::CellularOperator *provider2 =
info_.operators()[1];
EXPECT_TRUE(provider2->is_primary());
EXPECT_FALSE(provider2->requires_roaming());
EXPECT_EQ("us", provider2->country());
EXPECT_EQ("provider2identifier", provider2->identifier());
EXPECT_EQ(2, provider2->name_list().size());
EXPECT_TRUE(provider2->name_list()[0].language.empty());
EXPECT_EQ("TestProviderTwo", provider2->name_list()[0].name);
EXPECT_TRUE(provider2->name_list()[1].language.empty());
EXPECT_EQ("TestProvider2", provider2->name_list()[1].name);
EXPECT_EQ(2, provider2->mccmnc_list().size());
EXPECT_EQ("100001", provider2->mccmnc_list()[0]);
EXPECT_EQ("100002", provider2->mccmnc_list()[1]);
EXPECT_EQ(2, provider2->sid_list().size());
EXPECT_EQ("4", provider2->sid_list()[0]);
EXPECT_EQ("5", provider2->sid_list()[1]);
EXPECT_EQ(2, provider2->olp_list().size());
EXPECT_EQ("https://testurl2", provider2->olp_list()[0]->GetURL());
EXPECT_TRUE(provider2->olp_list()[0]->GetMethod().empty());
EXPECT_TRUE(provider2->olp_list()[0]->GetPostData().empty());
EXPECT_EQ("https://testurl3", provider2->olp_list()[1]->GetURL());
EXPECT_TRUE(provider2->olp_list()[1]->GetMethod().empty());
EXPECT_TRUE(provider2->olp_list()[1]->GetPostData().empty());
EXPECT_EQ(2, provider2->apn_list().size());
EXPECT_EQ("testprovider2apn", provider2->apn_list()[0]->apn);
EXPECT_TRUE(provider2->apn_list()[0]->username.empty());
EXPECT_TRUE(provider2->apn_list()[0]->password.empty());
EXPECT_EQ(1, provider2->apn_list()[0]->name_list.size());
EXPECT_TRUE(provider2->apn_list()[0]->name_list[0].language.empty());
EXPECT_EQ("Test Provider 2",
provider2->apn_list()[0]->name_list[0].name);
EXPECT_EQ("testprovider2apn2", provider2->apn_list()[1]->apn);
EXPECT_EQ("testusername", provider2->apn_list()[1]->username);
EXPECT_EQ("testpassword", provider2->apn_list()[1]->password);
EXPECT_EQ(1, provider2->apn_list()[1]->name_list.size());
EXPECT_EQ("tr", provider2->apn_list()[1]->name_list[0].language);
EXPECT_EQ("Test Operatoru 2",
provider2->apn_list()[1]->name_list[0].name);
}
TEST_F(CellularOperatorInfoTest, GetCellularOperatorByMCCMNC) {
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_FALSE(info_.GetCellularOperatorByMCCMNC("1"));
EXPECT_FALSE(info_.GetCellularOperatorByMCCMNC("000003"));
EXPECT_FALSE(info_.GetCellularOperatorByMCCMNC("bananas"));
EXPECT_FALSE(info_.GetCellularOperatorByMCCMNC("abcd"));
const CellularOperatorInfo::CellularOperator *provider = NULL;
EXPECT_TRUE((provider = info_.GetCellularOperatorByMCCMNC("000001")));
EXPECT_EQ(info_.operators()[0], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorByMCCMNC("100001")));
EXPECT_EQ(info_.operators()[1], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorByMCCMNC("000002")));
EXPECT_EQ(info_.operators()[0], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorByMCCMNC("100002")));
EXPECT_EQ(info_.operators()[1], provider);
}
TEST_F(CellularOperatorInfoTest, GetCellularOperatorBySID) {
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_FALSE(info_.GetCellularOperatorBySID("000001"));
EXPECT_FALSE(info_.GetCellularOperatorBySID("000002"));
EXPECT_FALSE(info_.GetCellularOperatorBySID("100001"));
EXPECT_FALSE(info_.GetCellularOperatorBySID("100002"));
EXPECT_FALSE(info_.GetCellularOperatorBySID("banana"));
const CellularOperatorInfo::CellularOperator *provider = NULL;
EXPECT_TRUE((provider = info_.GetCellularOperatorBySID("1")));
EXPECT_EQ(info_.operators()[0], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorBySID("4")));
EXPECT_EQ(info_.operators()[1], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorBySID("2")));
EXPECT_EQ(info_.operators()[0], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorBySID("5")));
EXPECT_EQ(info_.operators()[1], provider);
EXPECT_TRUE((provider = info_.GetCellularOperatorBySID("3")));
EXPECT_EQ(info_.operators()[0], provider);
}
TEST_F(CellularOperatorInfoTest, GetCellularOperators) {
EXPECT_TRUE(info_.Load(info_file_path_));
const vector<const CellularOperatorInfo::CellularOperator *> *list = NULL;
EXPECT_FALSE(info_.GetCellularOperators("banana"));
EXPECT_FALSE(info_.GetCellularOperators("TestProvider2"));
EXPECT_TRUE((list = info_.GetCellularOperators("TestProvider1")));
EXPECT_EQ(1, list->size());
EXPECT_EQ("testprovider1apn", (*list)[0]->apn_list()[0]->apn);
EXPECT_FALSE(info_.GetCellularOperators("TestProvider2"));
EXPECT_TRUE((list = info_.GetCellularOperators("TestProviderTwo")));
EXPECT_EQ(1, list->size());
EXPECT_EQ("testprovider2apn", (*list)[0]->apn_list()[0]->apn);
}
TEST_F(CellularOperatorInfoTest, GetOLPByMCCMNC) {
EXPECT_TRUE(info_.Load(info_file_path_));
const CellularService::OLP *olp = NULL;
EXPECT_TRUE((olp = info_.GetOLPByMCCMNC("000001")));
EXPECT_EQ("https://testurl", olp->GetURL());
EXPECT_EQ("POST", olp->GetMethod());
EXPECT_EQ("imei=${imei}&iccid=${iccid}", olp->GetPostData());
EXPECT_TRUE((olp = info_.GetOLPByMCCMNC("000002")));
EXPECT_EQ("https://testurl", olp->GetURL());
EXPECT_EQ("POST", olp->GetMethod());
EXPECT_EQ("imei=${imei}&iccid=${iccid}", olp->GetPostData());
EXPECT_TRUE((olp = info_.GetOLPByMCCMNC("100001")));
EXPECT_EQ("https://testurl3", olp->GetURL());
EXPECT_TRUE(olp->GetMethod().empty());
EXPECT_TRUE(olp->GetPostData().empty());
EXPECT_TRUE((olp = info_.GetOLPByMCCMNC("100002")));
EXPECT_EQ("https://testurl2", olp->GetURL());
EXPECT_TRUE(olp->GetMethod().empty());
EXPECT_TRUE(olp->GetPostData().empty());
EXPECT_FALSE(info_.GetOLPByMCCMNC("000003"));
EXPECT_FALSE(info_.GetOLPByMCCMNC("000004"));
}
TEST_F(CellularOperatorInfoTest, GetOLPBySID) {
EXPECT_TRUE(info_.Load(info_file_path_));
const CellularService::OLP *olp = NULL;
EXPECT_TRUE((olp = info_.GetOLPBySID("1")));
EXPECT_EQ("https://testurl", olp->GetURL());
EXPECT_EQ("POST", olp->GetMethod());
EXPECT_EQ("imei=${imei}&iccid=${iccid}", olp->GetPostData());
EXPECT_TRUE((olp = info_.GetOLPBySID("2")));
EXPECT_EQ("https://testurl", olp->GetURL());
EXPECT_EQ("POST", olp->GetMethod());
EXPECT_EQ("imei=${imei}&iccid=${iccid}", olp->GetPostData());
EXPECT_TRUE((olp = info_.GetOLPBySID("3")));
EXPECT_EQ("https://testurl", olp->GetURL());
EXPECT_EQ("POST", olp->GetMethod());
EXPECT_EQ("imei=${imei}&iccid=${iccid}", olp->GetPostData());
EXPECT_TRUE((olp = info_.GetOLPBySID("4")));
EXPECT_EQ("https://testurl2", olp->GetURL());
EXPECT_TRUE(olp->GetMethod().empty());
EXPECT_TRUE(olp->GetPostData().empty());
EXPECT_TRUE((olp = info_.GetOLPBySID("5")));
EXPECT_EQ("https://testurl3", olp->GetURL());
EXPECT_TRUE(olp->GetMethod().empty());
EXPECT_TRUE(olp->GetPostData().empty());
EXPECT_FALSE(info_.GetOLPBySID("6"));
EXPECT_FALSE(info_.GetOLPBySID("7"));
}
TEST_F(CellularOperatorInfoTest, BadServiceProvidersLine) {
TruncateFile();
// Invalid first line.
TruncateAndWriteToFile(
"# Bla bla bla\n"
"# Blabbidy boo\n"
"serviceproviders:2.3\n");
EXPECT_FALSE(info_.Load(info_file_path_));
// Valid first line
TruncateAndWriteToFile(
"# Bla bla bla\n"
"# Blabbidy boo\n"
"serviceproviders:3.0\n");
EXPECT_TRUE(info_.Load(info_file_path_));
}
TEST_F(CellularOperatorInfoTest, HandleProvider) {
// Invalid provider entry
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# Invalid provider entry\n"
"provider:0,0,0\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# Invalid provider entry\n"
"provider:1,1,0,1\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_FALSE(info_.operators()[0]->is_primary());
EXPECT_TRUE(info_.operators()[0]->requires_roaming());
EXPECT_TRUE(info_.operators()[0]->country().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# Invalid provider entry\n"
"country:us\n"
"provider:1,1,1,0\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_TRUE(info_.operators()[0]->is_primary());
EXPECT_FALSE(info_.operators()[0]->requires_roaming());
EXPECT_EQ("us", info_.operators()[0]->country());
}
TEST_F(CellularOperatorInfoTest, HandleMCCMNC) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# MCCMNC entry without a provider.\n"
"mccmnc:1,1\n");
EXPECT_FALSE(info_.Load(info_file_path_));
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# Empty MCCMNC entry.\n"
"provider:1,1,0,1\n"
"mccmnc:\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# MCCMNC entry has odd number of values.\n"
"provider:1,1,0,1\n"
"mccmnc:000001,0,000002\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# MCCMNC entry in this one is good.\n"
"provider:1,1,0,1\n"
"mccmnc:000001,0,000002,3\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(2, info_.operators()[0]->mccmnc_list().size());
EXPECT_EQ("000001", info_.operators()[0]->mccmnc_list()[0]);
EXPECT_EQ("000002", info_.operators()[0]->mccmnc_list()[1]);
EXPECT_EQ(info_.operators()[0], info_.GetCellularOperatorByMCCMNC("000001"));
EXPECT_EQ(info_.operators()[0], info_.GetCellularOperatorByMCCMNC("000002"));
EXPECT_EQ(NULL, info_.GetCellularOperatorByMCCMNC("000003"));
}
TEST_F(CellularOperatorInfoTest, HandleName) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# No provider entry\n"
"name:,\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"# Name has incorrect number of fields.\n"
"name:,,\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"# Name is valid.\n"
"name:en,Test Name\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(1, info_.operators()[0]->name_list().size());
EXPECT_EQ("en", info_.operators()[0]->name_list()[0].language);
EXPECT_EQ("Test Name", info_.operators()[0]->name_list()[0].name);
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"# More than one valid names.\n"
"name:en,Test Name\n"
"name:,Other Name\n"
"name:de,\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(3, info_.operators()[0]->name_list().size());
EXPECT_EQ("en", info_.operators()[0]->name_list()[0].language);
EXPECT_EQ("Test Name", info_.operators()[0]->name_list()[0].name);
EXPECT_TRUE(info_.operators()[0]->name_list()[1].language.empty());
EXPECT_EQ("Other Name", info_.operators()[0]->name_list()[1].name);
EXPECT_EQ("de", info_.operators()[0]->name_list()[2].language);
EXPECT_TRUE(info_.operators()[0]->name_list()[2].name.empty());
}
TEST_F(CellularOperatorInfoTest, HandleAPN) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# No provider\n"
"apn:,,,\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,0,0,0\n"
"# Badly formed apn line.\n"
"apn:,\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,0,0,0\n"
"apn:0,testapn,testusername,testpassword\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(1, info_.operators()[0]->apn_list().size());
EXPECT_EQ("testapn", info_.operators()[0]->apn_list()[0]->apn);
EXPECT_EQ("testusername", info_.operators()[0]->apn_list()[0]->username);
EXPECT_EQ("testpassword", info_.operators()[0]->apn_list()[0]->password);
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,0,0,0\n"
"apn:0,apn1,user1,password1\n"
"apn:2,apn2,user2,password2\n"
"name:en,Apn Name\n"
"name:de,Apn Name2\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(2, info_.operators()[0]->apn_list().size());
EXPECT_EQ("apn1", info_.operators()[0]->apn_list()[0]->apn);
EXPECT_EQ("user1", info_.operators()[0]->apn_list()[0]->username);
EXPECT_EQ("password1", info_.operators()[0]->apn_list()[0]->password);
EXPECT_EQ("apn2", info_.operators()[0]->apn_list()[1]->apn);
EXPECT_EQ("user2", info_.operators()[0]->apn_list()[1]->username);
EXPECT_EQ("password2", info_.operators()[0]->apn_list()[1]->password);
EXPECT_TRUE(info_.operators()[0]->apn_list()[0]->name_list.empty());
EXPECT_EQ(2, info_.operators()[0]->apn_list()[1]->name_list.size());
EXPECT_EQ("en",
info_.operators()[0]->apn_list()[1]->name_list[0].language);
EXPECT_EQ("Apn Name",
info_.operators()[0]->apn_list()[1]->name_list[0].name);
EXPECT_EQ("de",
info_.operators()[0]->apn_list()[1]->name_list[1].language);
EXPECT_EQ("Apn Name2",
info_.operators()[0]->apn_list()[1]->name_list[1].name);
}
TEST_F(CellularOperatorInfoTest, HandleSID) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# SID entry without a provider.\n"
"sid:1,1\n");
EXPECT_FALSE(info_.Load(info_file_path_));
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# Empty SID entry.\n"
"provider:1,1,0,1\n"
"sid:\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# SID entry has odd number of values.\n"
"provider:1,1,0,1\n"
"sid:1,0,2\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# SID entry in this one is good.\n"
"provider:1,1,0,1\n"
"sid:1,0,2,3\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(2, info_.operators()[0]->sid_list().size());
EXPECT_EQ("1", info_.operators()[0]->sid_list()[0]);
EXPECT_EQ("2", info_.operators()[0]->sid_list()[1]);
EXPECT_EQ(info_.operators()[0], info_.GetCellularOperatorBySID("1"));
EXPECT_EQ(info_.operators()[0], info_.GetCellularOperatorBySID("2"));
EXPECT_EQ(NULL, info_.GetCellularOperatorBySID("3"));
}
TEST_F(CellularOperatorInfoTest, HandleIdentifier) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# No provider entry.\n"
"identifier:test-id\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"identifier:test-id\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ("test-id", info_.operators()[0]->identifier());
}
TEST_F(CellularOperatorInfoTest, HandleActivationCode) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# No provider entry.\n"
"activation-code:test-code\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"activation-code:test-code\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ("test-code", info_.operators()[0]->activation_code());
}
TEST_F(CellularOperatorInfoTest, HandleOLP) {
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"# No provider entry.\n"
"olp:,,\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"# Badly formed APN\n"
"olp:,\n");
EXPECT_FALSE(info_.Load(info_file_path_));
EXPECT_TRUE(info_.operators().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"# Badly formed APN\n"
"olp:,,\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(1, info_.operators()[0]->olp_list().size());
EXPECT_TRUE(info_.operators()[0]->olp_list()[0]->GetURL().empty());
EXPECT_TRUE(info_.operators()[0]->olp_list()[0]->GetMethod().empty());
EXPECT_TRUE(info_.operators()[0]->olp_list()[0]->GetPostData().empty());
TruncateAndWriteToFile(
"serviceproviders:3.0\n"
"provider:1,1,0,0\n"
"# Badly formed APN\n"
"olp:a,b,c\n"
"olp:d,e,f\n");
EXPECT_TRUE(info_.Load(info_file_path_));
EXPECT_EQ(1, info_.operators().size());
EXPECT_EQ(2, info_.operators()[0]->olp_list().size());
EXPECT_EQ("a", info_.operators()[0]->olp_list()[0]->GetMethod());
EXPECT_EQ("b", info_.operators()[0]->olp_list()[0]->GetURL());
EXPECT_EQ("c", info_.operators()[0]->olp_list()[0]->GetPostData());
EXPECT_EQ("d", info_.operators()[0]->olp_list()[1]->GetMethod());
EXPECT_EQ("e", info_.operators()[0]->olp_list()[1]->GetURL());
EXPECT_EQ("f", info_.operators()[0]->olp_list()[1]->GetPostData());
}
} // namespace shill