connection_manager_unittest.cc revision 4348879380222dc8c74b0976e527bf3da66ba08f
14348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 24348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan// Use of this source code is governed by a BSD-style license that can be 34348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan// found in the LICENSE file. 44348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 54348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <base/logging.h> 64348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <chromeos/dbus/service_constants.h> 74348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <gtest/gtest.h> 84348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include <string> 94348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 104348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include "update_engine/connection_manager.h" 114348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include "update_engine/mock_dbus_interface.h" 124348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan#include "update_engine/mock_system_state.h" 134348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 144348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing std::set; 154348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing std::string; 164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing testing::_; 174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing testing::AnyNumber; 184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing testing::Return; 194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing testing::SetArgumentPointee; 204348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanusing testing::StrEq; 214348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasannamespace chromeos_update_engine { 234348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 244348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanclass ConnectionManagerTest : public ::testing::Test { 254348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan public: 264348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ConnectionManagerTest() 274348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan : kMockFlimFlamManagerProxy_(NULL), 284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan kMockFlimFlamServiceProxy_(NULL), 294348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan kServicePath_(NULL), 304348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_(&mock_system_state_) { 314348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan mock_system_state_.SetConnectionManager(&cmut_); 324348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan } 334348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan protected: 354348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan void SetupMocks(const char* service_path); 364348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan void SetManagerReply(gconstpointer value, const GType& type); 374348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan void SetServiceReply(const char* service_type); 384348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan void TestWithServiceType( 394348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const char* service_type, NetworkConnectionType expected_type); 404348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 414348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan static const char* kGetPropertiesMethod; 424348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan DBusGProxy* kMockFlimFlamManagerProxy_; 434348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan DBusGProxy* kMockFlimFlamServiceProxy_; 444348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan DBusGConnection* kMockSystemBus_; 454348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const char* kServicePath_; 464348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan MockDbusGlib dbus_iface_; 474348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ConnectionManager cmut_; // ConnectionManager under test. 484348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan MockSystemState mock_system_state_; 494348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan}; 504348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 514348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan// static 524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanconst char* ConnectionManagerTest::kGetPropertiesMethod = "GetProperties"; 534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 544348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanvoid ConnectionManagerTest::SetupMocks(const char* service_path) { 554348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan int number = 1; 564348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan kMockSystemBus_ = reinterpret_cast<DBusGConnection*>(number++); 574348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan kMockFlimFlamManagerProxy_ = reinterpret_cast<DBusGProxy*>(number++); 584348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan kMockFlimFlamServiceProxy_ = reinterpret_cast<DBusGProxy*>(number++); 594348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ASSERT_NE(kMockSystemBus_, reinterpret_cast<DBusGConnection*>(NULL)); 604348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 614348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan kServicePath_ = service_path; 624348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 634348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ON_CALL(dbus_iface_, BusGet(DBUS_BUS_SYSTEM, _)) 644348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillByDefault(Return(kMockSystemBus_)); 654348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, BusGet(DBUS_BUS_SYSTEM, _)) 664348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(AnyNumber()); 674348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 684348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 694348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanvoid ConnectionManagerTest::SetManagerReply(gconstpointer reply_value, 704348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const GType& reply_type) { 714348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Initialize return value for D-Bus call to Manager object. 724348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // TODO (jaysri): Free the objects allocated here. 734348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan GHashTable* manager_hash_table = g_hash_table_new(g_str_hash, g_str_equal); 744348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 754348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan GArray* array = g_array_new(FALSE, FALSE, sizeof(const char*)); 764348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ASSERT_TRUE(array != NULL); 774348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 784348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_EQ(array, g_array_append_val(array, reply_value)); 794348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan GValue* array_as_value = g_new0(GValue, 1); 804348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_EQ(array_as_value, g_value_init(array_as_value, reply_type)); 814348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan g_value_take_boxed(array_as_value, array); 824348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan g_hash_table_insert(manager_hash_table, 834348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const_cast<char*>("Services"), 844348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan array_as_value); 854348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 864348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Plumb return value into mock object. 874348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, ProxyCall(kMockFlimFlamManagerProxy_, 884348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(kGetPropertiesMethod), 894348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan _, 904348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_INVALID, 914348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan dbus_g_type_get_map("GHashTable", 924348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_STRING, 934348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_VALUE), 944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan _, 954348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_INVALID)) 964348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<5>(manager_hash_table), Return(TRUE))); 974348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 984348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Set other expectations. 994348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, 1004348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ProxyNewForNameOwner(kMockSystemBus_, 1014348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(flimflam::kFlimflamServiceName), 1024348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(flimflam::kFlimflamServicePath), 1034348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(flimflam::kFlimflamManagerInterface), 1044348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan _)) 1054348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(Return(kMockFlimFlamManagerProxy_)); 1064348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, ProxyUnref(kMockFlimFlamManagerProxy_)); 1074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, BusGet(DBUS_BUS_SYSTEM, _)) 1084348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .RetiresOnSaturation(); 1094348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1104348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1114348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanvoid ConnectionManagerTest::SetServiceReply(const char* service_type) { 1124348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Initialize return value for D-Bus call to Service object. 1134348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // TODO (jaysri): Free the objects allocated here. 1144348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan GHashTable* service_hash_table = g_hash_table_new(g_str_hash, g_str_equal); 1154348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan GValue* service_type_value = g_new0(GValue, 1); 1174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_EQ(service_type_value, 1184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan g_value_init(service_type_value, G_TYPE_STRING)); 1194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan g_value_set_static_string(service_type_value, service_type); 1204348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1214348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan g_hash_table_insert(service_hash_table, 1224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const_cast<char*>("Type"), 1234348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan service_type_value); 1244348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1254348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Plumb return value into mock object. 1264348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, ProxyCall(kMockFlimFlamServiceProxy_, 1274348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(kGetPropertiesMethod), 1284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan _, 1294348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_INVALID, 1304348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan dbus_g_type_get_map("GHashTable", 1314348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_STRING, 1324348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_VALUE), 1334348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan _, 1344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan G_TYPE_INVALID)) 1354348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<5>(service_hash_table), Return(TRUE))); 1364348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1374348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Set other expectations. 1384348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, 1394348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan ProxyNewForNameOwner(kMockSystemBus_, 1404348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(flimflam::kFlimflamServiceName), 1414348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(kServicePath_), 1424348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan StrEq(flimflam::kFlimflamServiceInterface), 1434348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan _)) 1444348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(Return(kMockFlimFlamServiceProxy_)); 1454348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, ProxyUnref(kMockFlimFlamServiceProxy_)); 1464348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(dbus_iface_, BusGet(DBUS_BUS_SYSTEM, _)) 1474348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .RetiresOnSaturation(); 1484348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1494348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1504348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasanvoid ConnectionManagerTest::TestWithServiceType( 1514348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan const char* service_type, 1524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType expected_type) { 1534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1544348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan SetupMocks("/service/guest-network"); 1554348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan SetManagerReply(kServicePath_, DBUS_TYPE_G_OBJECT_PATH_ARRAY); 1564348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan SetServiceReply(service_type); 1574348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1584348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType type; 1594348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_TRUE(cmut_.GetConnectionType(&dbus_iface_, &type)); 1604348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_EQ(expected_type, type); 1614348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1624348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1634348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, SimpleTest) { 1644348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan TestWithServiceType(flimflam::kTypeEthernet, kNetEthernet); 1654348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan TestWithServiceType(flimflam::kTypeWifi, kNetWifi); 1664348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan TestWithServiceType(flimflam::kTypeWimax, kNetWimax); 1674348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan TestWithServiceType(flimflam::kTypeBluetooth, kNetBluetooth); 1684348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan TestWithServiceType(flimflam::kTypeCellular, kNetCellular); 1694348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1704348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1714348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, UnknownTest) { 1724348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan TestWithServiceType("foo", kNetUnknown); 1734348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1744348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1754348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOverEthernetTest) { 1764348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()).Times(0); 1774348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1784348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Updates over Ethernet are allowed even if there's no policy. 1794348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_TRUE(cmut_.IsUpdateAllowedOver(kNetEthernet)); 1804348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1814348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1824348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOverWifiTest) { 1834348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()).Times(0); 1844348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_TRUE(cmut_.IsUpdateAllowedOver(kNetWifi)); 1854348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1864348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1874348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOverWimaxTest) { 1884348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()).Times(0); 1894348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_TRUE(cmut_.IsUpdateAllowedOver(kNetWimax)); 1904348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1914348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1924348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOverBluetoothTest) { 1934348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()).Times(0); 1944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_FALSE(cmut_.IsUpdateAllowedOver(kNetBluetooth)); 1954348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 1964348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 1974348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOnlyOver3GPerPolicyTest) { 1984348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy allow_3g_policy; 1994348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2004348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()) 2014348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2024348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(Return(&allow_3g_policy)); 2034348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2044348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // This test tests 3G being the only connection type being allowed. 2054348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 2064348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetCellular)); 2074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2084348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(allow_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 2094348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2104348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<0>(allowed_set), Return(true))); 2114348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2124348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_TRUE(cmut_.IsUpdateAllowedOver(kNetCellular)); 2134348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2144348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2154348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, AllowUpdatesOver3GAndOtherTypesPerPolicyTest) { 2164348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy allow_3g_policy; 2174348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2184348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()) 2194348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2204348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(Return(&allow_3g_policy)); 2214348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2224348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // This test tests multiple connection types being allowed, with 2234348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // 3G one among them. 2244348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 2254348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetEthernet)); 2264348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetCellular)); 2274348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetWifi)); 2284348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2294348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(allow_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 2304348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2314348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<0>(allowed_set), Return(true))); 2324348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2334348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_TRUE(cmut_.IsUpdateAllowedOver(kNetCellular)); 2344348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2354348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2364348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOver3GByDefaultTest) { 2374348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()).Times(1); 2384348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_FALSE(cmut_.IsUpdateAllowedOver(kNetCellular)); 2394348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2404348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2414348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOver3GPerPolicyTest) { 2424348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy block_3g_policy; 2434348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2444348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()) 2454348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2464348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(Return(&block_3g_policy)); 2474348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2484348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Test that updates for 3G are blocked while updates are allowed 2494348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // over several other types. 2504348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 2514348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetEthernet)); 2524348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetWifi)); 2534348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetWimax)); 2544348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2554348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(block_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 2564348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2574348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<0>(allowed_set), Return(true))); 2584348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2594348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_FALSE(cmut_.IsUpdateAllowedOver(kNetCellular)); 2604348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2614348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2624348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, BlockUpdatesOver3GIfErrorInPolicyFetchTest) { 2634348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan policy::MockDevicePolicy allow_3g_policy; 2644348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2654348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(mock_system_state_, GetDevicePolicy()) 2664348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2674348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(Return(&allow_3g_policy)); 2684348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2694348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan set<string> allowed_set; 2704348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan allowed_set.insert(cmut_.StringForConnectionType(kNetCellular)); 2714348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2724348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // Return false for GetAllowedConnectionTypesForUpdate and see 2734348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // that updates are still blocked for 3G despite the value being in 2744348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan // the string set above. 2754348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_CALL(allow_3g_policy, GetAllowedConnectionTypesForUpdate(_)) 2764348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .Times(1) 2774348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<0>(allowed_set), Return(false))); 2784348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2794348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_FALSE(cmut_.IsUpdateAllowedOver(kNetCellular)); 2804348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2814348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 2824348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, StringForConnectionTypeTest) { 2834348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ(flimflam::kTypeEthernet, 2844348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType(kNetEthernet)); 2854348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ(flimflam::kTypeWifi, 2864348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType(kNetWifi)); 2874348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ(flimflam::kTypeWimax, 2884348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType(kNetWimax)); 2894348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ(flimflam::kTypeBluetooth, 2904348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType(kNetBluetooth)); 2914348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ(flimflam::kTypeCellular, 2924348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType(kNetCellular)); 2934348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ("Unknown", 2944348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType(kNetUnknown)); 2954348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_STREQ("Unknown", 2964348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan cmut_.StringForConnectionType( 2974348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan static_cast<NetworkConnectionType>(999999))); 2984348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 2994348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3004348879380222dc8c74b0976e527bf3da66ba08fJay SrinivasanTEST_F(ConnectionManagerTest, MalformedServiceList) { 3014348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan SetupMocks("/service/guest-network"); 3024348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan string service_name(kServicePath_); 3034348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan SetManagerReply(&service_name, DBUS_TYPE_G_STRING_ARRAY); 3044348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3054348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan NetworkConnectionType type; 3064348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan EXPECT_FALSE(cmut_.GetConnectionType(&dbus_iface_, &type)); 3074348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} 3084348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan 3094348879380222dc8c74b0976e527bf3da66ba08fJay Srinivasan} // namespace chromeos_update_engine 310