1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2012 The Android Open Source Project 3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License. 6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at 7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software 11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and 14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License. 15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 178427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo#include "update_engine/connection_manager.h" 188427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo 19d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko#include <set> 20d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko#include <string> 21d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko 224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <base/logging.h> 233f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/any.h> 243f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/make_unique_ptr.h> 253f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/message_loops/fake_message_loop.h> 263f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/variant_dictionary.h> 275665d0ced6812771559ca7bf938fa48f2b93ae48Alex Deymo#include <gmock/gmock.h> 284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <gtest/gtest.h> 29d6deb1d0357f47d5525bfaeffa6c201b19abd3e7Alex Deymo#include <shill/dbus-constants.h> 30d6deb1d0357f47d5525bfaeffa6c201b19abd3e7Alex Deymo#include <shill/dbus-proxies.h> 31d6deb1d0357f47d5525bfaeffa6c201b19abd3e7Alex Deymo#include <shill/dbus-proxy-mocks.h> 324348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3339910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/test_utils.h" 34305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo#include "update_engine/fake_shill_proxy.h" 355bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold#include "update_engine/fake_system_state.h" 364348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 37305345001d85ca2282112c2a30fe75c7a4773491Alex Deymousing org::chromium::flimflam::ManagerProxyMock; 38305345001d85ca2282112c2a30fe75c7a4773491Alex Deymousing org::chromium::flimflam::ServiceProxyMock; 394348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing std::set; 404348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing std::string; 414348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing testing::Return; 42305345001d85ca2282112c2a30fe75c7a4773491Alex Deymousing testing::SetArgPointee; 43f329b933db41d26644a97afef928eb1b319d6d99Alex Deymousing testing::_; 444348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 454348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasannamespace chromeos_update_engine { 464348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 474348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanclass ConnectionManagerTest : public ::testing::Test { 484348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan public: 49305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo void SetUp() override { 50305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo loop_.SetAsCurrent(); 515bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state_.set_connection_manager(&cmut_); 524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 54305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo void TearDown() override { EXPECT_FALSE(loop_.PendingTasks()); } 551c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo 56305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo protected: 57305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // Sets the default_service object path in the response from the 58305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // ManagerProxyMock instance. 59305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo void SetManagerReply(const char* default_service, bool reply_succeeds); 60305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo 61305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // Sets the |service_type|, |physical_technology| and |service_tethering| 62305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // properties in the mocked service |service_path|. If any of the three 63305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // const char* is a nullptr, the corresponding property will not be included 64305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // in the response. 65305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo void SetServiceReply(const string& service_path, 66305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo const char* service_type, 676ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo const char* physical_technology, 686ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo const char* service_tethering); 69305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo 704348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan void TestWithServiceType( 711c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo const char* service_type, 721c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo const char* physical_technology, 731c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo NetworkConnectionType expected_type); 746ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo void TestWithServiceTethering( 756ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo const char* service_tethering, 766ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering expected_tethering); 774348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 783f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::FakeMessageLoop loop_{nullptr}; 795bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state_; 80305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo FakeShillProxy fake_shill_proxy_; 814348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 82305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // ConnectionManager under test. 83305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo ConnectionManager cmut_{&fake_shill_proxy_, &fake_system_state_}; 84305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo}; 854348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 86305345001d85ca2282112c2a30fe75c7a4773491Alex Deymovoid ConnectionManagerTest::SetManagerReply(const char* default_service, 87305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo bool reply_succeeds) { 88305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo ManagerProxyMock* manager_proxy_mock = fake_shill_proxy_.GetManagerProxy(); 89305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo if (!reply_succeeds) { 90305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_CALL(*manager_proxy_mock, GetProperties(_, _, _)) 91305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(Return(false)); 92305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo return; 93305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo } 944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 95305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // Create a dictionary of properties and optionally include the default 96305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo // service. 973f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::VariantDictionary reply_dict; 98305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo reply_dict["SomeOtherProperty"] = 0xC0FFEE; 994348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 100305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo if (default_service) { 101305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo reply_dict[shill::kDefaultServiceProperty] = 102305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo dbus::ObjectPath(default_service); 103305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo } 104305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_CALL(*manager_proxy_mock, GetProperties(_, _, _)) 105305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<0>(reply_dict), Return(true))); 1064348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 108305345001d85ca2282112c2a30fe75c7a4773491Alex Deymovoid ConnectionManagerTest::SetServiceReply(const string& service_path, 109305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo const char* service_type, 1106ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo const char* physical_technology, 1116ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo const char* service_tethering) { 1123f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::VariantDictionary reply_dict; 113305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo reply_dict["SomeOtherProperty"] = 0xC0FFEE; 114305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo 115305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo if (service_type) 116305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo reply_dict[shill::kTypeProperty] = string(service_type); 1174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 11888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko if (physical_technology) { 119305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo reply_dict[shill::kPhysicalTechnologyProperty] = 120305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo string(physical_technology); 1211c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo } 1221c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo 123305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo if (service_tethering) 124305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo reply_dict[shill::kTetheringProperty] = string(service_tethering); 125305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo 126305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo std::unique_ptr<ServiceProxyMock> service_proxy_mock(new ServiceProxyMock()); 1276ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 1284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Plumb return value into mock object. 129305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_CALL(*service_proxy_mock.get(), GetProperties(_, _, _)) 130305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<0>(reply_dict), Return(true))); 131305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo 132758dd53cf503adbcb049909f25f54603d411be09Alex Deymo fake_shill_proxy_.SetServiceForPath(dbus::ObjectPath(service_path), 133305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo std::move(service_proxy_mock)); 1344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1354348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1364348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanvoid ConnectionManagerTest::TestWithServiceType( 1374348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const char* service_type, 1381c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo const char* physical_technology, 1394348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType expected_type) { 140758dd53cf503adbcb049909f25f54603d411be09Alex Deymo SetManagerReply("/service/guest/network", true); 141758dd53cf503adbcb049909f25f54603d411be09Alex Deymo SetServiceReply("/service/guest/network", 142305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo service_type, 143305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo physical_technology, 1446ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo shill::kTetheringNotDetectedState); 1454348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1464348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType type; 1476ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering tethering; 148305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_TRUE(cmut_.GetConnectionProperties(&type, &tethering)); 1494348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_EQ(expected_type, type); 150305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo testing::Mock::VerifyAndClearExpectations( 151305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo fake_shill_proxy_.GetManagerProxy()); 1524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1546ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymovoid ConnectionManagerTest::TestWithServiceTethering( 1556ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo const char* service_tethering, 1566ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering expected_tethering) { 157758dd53cf503adbcb049909f25f54603d411be09Alex Deymo SetManagerReply("/service/guest/network", true); 158305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo SetServiceReply( 159758dd53cf503adbcb049909f25f54603d411be09Alex Deymo "/service/guest/network", shill::kTypeWifi, nullptr, service_tethering); 1606ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 1616ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkConnectionType type; 1626ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering tethering; 163305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_TRUE(cmut_.GetConnectionProperties(&type, &tethering)); 1646ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo EXPECT_EQ(expected_tethering, tethering); 165305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo testing::Mock::VerifyAndClearExpectations( 166305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo fake_shill_proxy_.GetManagerProxy()); 1676ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo} 1686ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 1694348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, SimpleTest) { 17075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeEthernet, nullptr, 17175eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kEthernet); 17275eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeWifi, nullptr, 17375eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kWifi); 17475eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeWimax, nullptr, 17575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kWimax); 17675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeBluetooth, nullptr, 17775eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kBluetooth); 17875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeCellular, nullptr, 17975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kCellular); 1801c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo} 1811c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex Deymo 1821c4e6382a74db329a3cfad10e68dd077cb75e5c4Alex DeymoTEST_F(ConnectionManagerTest, PhysicalTechnologyTest) { 18375eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeVPN, nullptr, 18475eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kUnknown); 18575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeVPN, shill::kTypeVPN, 18675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kUnknown); 18775eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeVPN, shill::kTypeWifi, 18875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kWifi); 18975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType(shill::kTypeVPN, shill::kTypeWimax, 19075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kWimax); 1914348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1924348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1936ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex DeymoTEST_F(ConnectionManagerTest, TetheringTest) { 1946ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo TestWithServiceTethering(shill::kTetheringConfirmedState, 1956ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kConfirmed); 1966ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo TestWithServiceTethering(shill::kTetheringNotDetectedState, 1976ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kNotDetected); 1986ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo TestWithServiceTethering(shill::kTetheringSuspectedState, 1996ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kSuspected); 2006ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo TestWithServiceTethering("I'm not a valid property value =)", 2016ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown); 2026ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo} 2036ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 2044348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, UnknownTest) { 20575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo TestWithServiceType("foo", nullptr, NetworkConnectionType::kUnknown); 2064348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2084348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOverEthernetTest) { 2094348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Updates over Ethernet are allowed even if there's no policy. 21075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kEthernet, 2116ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 2124348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2134348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2144348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOverWifiTest) { 21575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWifi, 21675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkTethering::kUnknown)); 2174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2194348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOverWimaxTest) { 22075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWimax, 2216ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 2224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2234348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2244348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOverBluetoothTest) { 22575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kBluetooth, 2266ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 2274348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2294348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOnlyOver3GPerPolicyTest) { 2304348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy allow_3g_policy; 2314348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2325bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state_.set_device_policy(&allow_3g_policy); 2334348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 234f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // This test tests cellular (3G) being the only connection type being allowed. 2354348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 23675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 23775eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kCellular)); 2384348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2394348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(allow_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 2404348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 241305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<0>(allowed_set), Return(true))); 2424348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 24375eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 2446ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 2454348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2464348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2474348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOver3GAndOtherTypesPerPolicyTest) { 2484348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy allow_3g_policy; 2494348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2505bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state_.set_device_policy(&allow_3g_policy); 2514348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // This test tests multiple connection types being allowed, with 253f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // 3G one among them. Only Cellular is currently enforced by the policy 254f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // setting, the others are ignored (see Bluetooth for example). 2554348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 25675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 25775eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kCellular)); 25875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 25975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kBluetooth)); 2604348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2614348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(allow_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 2626ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo .Times(3) 263305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillRepeatedly(DoAll(SetArgPointee<0>(allowed_set), Return(true))); 2646ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 26575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kEthernet, 2666ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 26775eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kEthernet, 2686ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kNotDetected)); 26975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 27075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkTethering::kUnknown)); 27175eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWifi, 2726ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 27375eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWimax, 27475eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkTethering::kUnknown)); 27575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kBluetooth, 2766ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 2776ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 2786ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo // Tethered networks are treated in the same way as Cellular networks and 2796ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo // thus allowed. 28075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kEthernet, 2816ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kConfirmed)); 28275eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWifi, 2836ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kConfirmed)); 2844348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2854348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 286f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex DeymoTEST_F(ConnectionManagerTest, BlockUpdatesOverCellularByDefaultTest) { 28775eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 2886ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 2896ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo} 2906ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo 2916ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex DeymoTEST_F(ConnectionManagerTest, BlockUpdatesOverTetheredNetworkByDefaultTest) { 29275eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWifi, 2936ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kConfirmed)); 29475eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kEthernet, 2956ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kConfirmed)); 29675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kWifi, 2976ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kSuspected)); 2984348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2994348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3004348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOver3GPerPolicyTest) { 3014348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy block_3g_policy; 3024348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3035bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state_.set_device_policy(&block_3g_policy); 3044348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3054348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Test that updates for 3G are blocked while updates are allowed 3064348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // over several other types. 3074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 30875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 30975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kEthernet)); 31075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 31175eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kWifi)); 31275eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 31375eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kWimax)); 3144348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3154348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(block_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 3164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 317305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<0>(allowed_set), Return(true))); 3184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 31975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 3206ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 3214348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 3224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3234348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOver3GIfErrorInPolicyFetchTest) { 3244348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy allow_3g_policy; 3254348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3265bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state_.set_device_policy(&allow_3g_policy); 3274348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 32975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo allowed_set.insert( 33075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kCellular)); 3314348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3324348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Return false for GetAllowedConnectionTypesForUpdate and see 3334348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // that updates are still blocked for 3G despite the value being in 3344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // the string set above. 3354348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(allow_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 3364348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 337305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<0>(allowed_set), Return(false))); 3384348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 33975eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 3406ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 3414348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 3424348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 343f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex DeymoTEST_F(ConnectionManagerTest, UseUserPrefForUpdatesOverCellularIfNoPolicyTest) { 344f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo policy::MockDevicePolicy no_policy; 3458427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo testing::NiceMock<MockPrefs>* prefs = fake_system_state_.mock_prefs(); 346f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 3475bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state_.set_device_policy(&no_policy); 348f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 349f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // No setting enforced by the device policy, user prefs should be used. 350f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo EXPECT_CALL(no_policy, GetAllowedConnectionTypesForUpdate(_)) 351f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .Times(3) 352f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .WillRepeatedly(Return(false)); 353f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 354f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // No user pref: block. 355f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo EXPECT_CALL(*prefs, Exists(kPrefsUpdateOverCellularPermission)) 356f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .Times(1) 357f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .WillOnce(Return(false)); 35875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 3596ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 360f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 361f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // Allow per user pref. 362f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo EXPECT_CALL(*prefs, Exists(kPrefsUpdateOverCellularPermission)) 363f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .Times(1) 364f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .WillOnce(Return(true)); 365efb7c4c605440fdc6297deed8fa9d1aecb77235eAlex Deymo EXPECT_CALL(*prefs, GetBoolean(kPrefsUpdateOverCellularPermission, _)) 366f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .Times(1) 367305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<1>(true), Return(true))); 36875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_TRUE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 3696ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 370f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 371f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo // Block per user pref. 372f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo EXPECT_CALL(*prefs, Exists(kPrefsUpdateOverCellularPermission)) 373f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .Times(1) 374f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .WillOnce(Return(true)); 375efb7c4c605440fdc6297deed8fa9d1aecb77235eAlex Deymo EXPECT_CALL(*prefs, GetBoolean(kPrefsUpdateOverCellularPermission, _)) 376f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo .Times(1) 377305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillOnce(DoAll(SetArgPointee<1>(false), Return(true))); 37875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_FALSE(cmut_.IsUpdateAllowedOver(NetworkConnectionType::kCellular, 3796ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering::kUnknown)); 380f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo} 381f4867c4dab4d1ca566f1aa3f585bd16d87b911ddAlex Deymo 3824348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, StringForConnectionTypeTest) { 383c6007e4fbd9a58ca467fa59feef4a46b8075d434Ben Chan EXPECT_STREQ(shill::kTypeEthernet, 38475eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kEthernet)); 385c6007e4fbd9a58ca467fa59feef4a46b8075d434Ben Chan EXPECT_STREQ(shill::kTypeWifi, 38675eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kWifi)); 387c6007e4fbd9a58ca467fa59feef4a46b8075d434Ben Chan EXPECT_STREQ(shill::kTypeWimax, 38875eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kWimax)); 389c6007e4fbd9a58ca467fa59feef4a46b8075d434Ben Chan EXPECT_STREQ(shill::kTypeBluetooth, 39075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType( 39175eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo NetworkConnectionType::kBluetooth)); 392c6007e4fbd9a58ca467fa59feef4a46b8075d434Ben Chan EXPECT_STREQ(shill::kTypeCellular, 39375eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kCellular)); 3944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ("Unknown", 39575eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo cmut_.StringForConnectionType(NetworkConnectionType::kUnknown)); 3964348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ("Unknown", 3974348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType( 3984348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan static_cast<NetworkConnectionType>(999999))); 3994348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 4004348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 4014348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, MalformedServiceList) { 402758dd53cf503adbcb049909f25f54603d411be09Alex Deymo SetManagerReply("/service/guest/network", false); 4034348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 4044348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType type; 4056ae9120dc76ce9a3c8d05f71c05f23e3f4bdc6bdAlex Deymo NetworkTethering tethering; 406305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_FALSE(cmut_.GetConnectionProperties(&type, &tethering)); 4074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 4084348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 4094348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} // namespace chromeos_update_engine 410