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