blob: f7b3f7cc82084b1ed3d7e65168b466d0b26c3690 [file] [log] [blame]
fqjfee5067a2015-11-13 20:12:591// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chromeos/network/prohibited_technologies_handler.h"
6
dcheng0a6e80c2016-04-08 18:37:387#include <memory>
fqjfee5067a2015-11-13 20:12:598#include <string>
dcheng7df85ba2015-12-31 04:56:399#include <utility>
fqjfee5067a2015-11-13 20:12:5910
11#include "base/bind.h"
12#include "base/callback.h"
13#include "base/json/json_reader.h"
avi6e1a22d2015-12-21 03:43:2014#include "base/macros.h"
fqjfee5067a2015-11-13 20:12:5915#include "base/run_loop.h"
fdoray822e6b22017-04-27 20:47:0316#include "base/test/scoped_task_environment.h"
fqjfee5067a2015-11-13 20:12:5917#include "chromeos/network/managed_network_configuration_handler_impl.h"
18#include "chromeos/network/network_configuration_handler.h"
19#include "chromeos/network/network_profile_handler.h"
Steven Bennettsf13e1e42019-05-15 00:26:3120#include "chromeos/network/network_state_handler.h"
Steven Bennetts200d0612019-02-08 02:17:1221#include "chromeos/network/network_state_test_helper.h"
fqjfee5067a2015-11-13 20:12:5922#include "chromeos/network/onc/onc_utils.h"
23#include "testing/gtest/include/gtest/gtest.h"
24#include "third_party/cros_system_api/dbus/service_constants.h"
25
26namespace chromeos {
27
Steven Bennetts200d0612019-02-08 02:17:1228class ProhibitedTechnologiesHandlerTest : public testing::Test {
fqjfee5067a2015-11-13 20:12:5929 public:
fdoray822e6b22017-04-27 20:47:0330 ProhibitedTechnologiesHandlerTest()
31 : scoped_task_environment_(
32 base::test::ScopedTaskEnvironment::MainThreadType::UI) {}
fqjfee5067a2015-11-13 20:12:5933
34 void SetUp() override {
fqjfee5067a2015-11-13 20:12:5935 LoginState::Initialize();
fqjfee5067a2015-11-13 20:12:5936
Steven Bennetts200d0612019-02-08 02:17:1237 helper_.manager_test()->AddTechnology(shill::kTypeCellular,
38 true /* enabled */);
stevenjb888a70ed2017-03-29 22:17:1739
fqjfee5067a2015-11-13 20:12:5940 network_config_handler_.reset(
41 NetworkConfigurationHandler::InitializeForTest(
Steven Bennetts200d0612019-02-08 02:17:1242 helper_.network_state_handler(),
43 nullptr /* network_device_handler */));
fqjfee5067a2015-11-13 20:12:5944
45 network_profile_handler_.reset(new NetworkProfileHandler());
46 network_profile_handler_->Init();
47
48 managed_config_handler_.reset(new ManagedNetworkConfigurationHandlerImpl());
49 prohibited_technologies_handler_.reset(new ProhibitedTechnologiesHandler());
50
51 managed_config_handler_->Init(
Steven Bennetts200d0612019-02-08 02:17:1252 helper_.network_state_handler(), network_profile_handler_.get(),
fqjfee5067a2015-11-13 20:12:5953 network_config_handler_.get(), nullptr /* network_device_handler */,
54 prohibited_technologies_handler_.get());
55
56 prohibited_technologies_handler_->Init(managed_config_handler_.get(),
Steven Bennetts200d0612019-02-08 02:17:1257 helper_.network_state_handler());
fqjfee5067a2015-11-13 20:12:5958
59 base::RunLoop().RunUntilIdle();
60
61 PreparePolicies();
62 }
63
64 void PreparePolicies() {
dcheng0a6e80c2016-04-08 18:37:3865 std::unique_ptr<base::ListValue> val(new base::ListValue());
fqjfee5067a2015-11-13 20:12:5966 val->AppendString("WiFi");
dcheng7df85ba2015-12-31 04:56:3967 global_config_disable_wifi.Set("DisableNetworkTypes", std::move(val));
fqjfee5067a2015-11-13 20:12:5968 val.reset(new base::ListValue());
69 val->AppendString("WiFi");
70 val->AppendString("Cellular");
dcheng7df85ba2015-12-31 04:56:3971 global_config_disable_wifi_and_cell.Set("DisableNetworkTypes",
72 std::move(val));
fqjfee5067a2015-11-13 20:12:5973 }
74
75 void TearDown() override {
76 prohibited_technologies_handler_.reset();
77 managed_config_handler_.reset();
78 network_profile_handler_.reset();
79 network_config_handler_.reset();
fqjfee5067a2015-11-13 20:12:5980 LoginState::Shutdown();
fqjfee5067a2015-11-13 20:12:5981 }
82
83 protected:
84 void LoginToRegularUser() {
85 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE,
86 LoginState::LOGGED_IN_USER_REGULAR);
87 base::RunLoop().RunUntilIdle();
88 }
89
90 void SetupPolicy(const base::DictionaryValue& global_config,
91 bool user_policy) {
92 if (user_policy) {
93 managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_USER_POLICY,
Steven Bennetts200d0612019-02-08 02:17:1294 helper_.UserHash(), base::ListValue(),
fqjfee5067a2015-11-13 20:12:5995 global_config);
96 } else {
97 managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY,
98 std::string(), // no username hash
99 base::ListValue(), global_config);
100 }
101 base::RunLoop().RunUntilIdle();
102 }
103
Steven Bennetts200d0612019-02-08 02:17:12104 NetworkStateHandler* network_state_handler() {
105 return helper_.network_state_handler();
106 }
107
108 base::DictionaryValue global_config_disable_wifi;
109 base::DictionaryValue global_config_disable_wifi_and_cell;
Anatoliy Potapchuk7912da42019-03-14 14:25:23110 std::unique_ptr<ProhibitedTechnologiesHandler>
111 prohibited_technologies_handler_;
Steven Bennetts200d0612019-02-08 02:17:12112
113 private:
114 base::test::ScopedTaskEnvironment scoped_task_environment_;
115 NetworkStateTestHelper helper_{false /* use_default_devices_and_services */};
Anatoliy Potapchuk7912da42019-03-14 14:25:23116
dcheng0a6e80c2016-04-08 18:37:38117 std::unique_ptr<NetworkConfigurationHandler> network_config_handler_;
118 std::unique_ptr<ManagedNetworkConfigurationHandlerImpl>
119 managed_config_handler_;
120 std::unique_ptr<NetworkProfileHandler> network_profile_handler_;
fqjfee5067a2015-11-13 20:12:59121
fqjfee5067a2015-11-13 20:12:59122 DISALLOW_COPY_AND_ASSIGN(ProhibitedTechnologiesHandlerTest);
123};
124
125TEST_F(ProhibitedTechnologiesHandlerTest,
126 ProhibitedTechnologiesAllowedLoginScreen) {
127 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17128 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
129 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59130 NetworkTypePattern::Cellular()));
131 SetupPolicy(global_config_disable_wifi_and_cell, false);
132 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17133 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
134 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59135 NetworkTypePattern::Cellular()));
fdorayf5b47fd12016-09-13 14:12:36136}
fqjfee5067a2015-11-13 20:12:59137
138TEST_F(ProhibitedTechnologiesHandlerTest,
139 ProhibitedTechnologiesNotAllowedUserSession) {
140 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17141 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
142 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59143 NetworkTypePattern::Cellular()));
144 SetupPolicy(global_config_disable_wifi_and_cell, false);
145
146 LoginToRegularUser();
147 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17148 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
149 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59150 NetworkTypePattern::Cellular()));
151
152 SetupPolicy(base::DictionaryValue(), true); // wait for user policy
153
154 // Should be disabled after logged in
155 EXPECT_FALSE(
stevenjb888a70ed2017-03-29 22:17:17156 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
157 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59158 NetworkTypePattern::Cellular()));
159
160 // Can not enable it back
stevenjb888a70ed2017-03-29 22:17:17161 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59162 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback());
stevenjb888a70ed2017-03-29 22:17:17163 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59164 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
fdorayf5b47fd12016-09-13 14:12:36165 base::RunLoop().RunUntilIdle();
fqjfee5067a2015-11-13 20:12:59166 EXPECT_FALSE(
stevenjb888a70ed2017-03-29 22:17:17167 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
168 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59169 NetworkTypePattern::Cellular()));
170
171 // Can enable Cellular back after modifying policy
172 SetupPolicy(global_config_disable_wifi, false);
stevenjb888a70ed2017-03-29 22:17:17173 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59174 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback());
stevenjb888a70ed2017-03-29 22:17:17175 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59176 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
fdorayf5b47fd12016-09-13 14:12:36177 base::RunLoop().RunUntilIdle();
fqjfee5067a2015-11-13 20:12:59178 EXPECT_FALSE(
stevenjb888a70ed2017-03-29 22:17:17179 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
180 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59181 NetworkTypePattern::Cellular()));
fdorayf5b47fd12016-09-13 14:12:36182}
fqjfee5067a2015-11-13 20:12:59183
Anatoliy Potapchuk7912da42019-03-14 14:25:23184TEST_F(ProhibitedTechnologiesHandlerTest,
185 IsGloballyProhibitedTechnologyWorksAfterReenabling) {
186 LoginToRegularUser();
187 SetupPolicy(base::DictionaryValue(), true); // wait for user policy
188
189 EXPECT_TRUE(
190 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
191 prohibited_technologies_handler_->AddGloballyProhibitedTechnology(
192 shill::kTypeWifi);
193 EXPECT_FALSE(
194 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
195
196 // Enabling it back
197 prohibited_technologies_handler_->RemoveGloballyProhibitedTechnology(
198 shill::kTypeWifi);
199 network_state_handler()->SetTechnologyEnabled(
200 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback());
201 base::RunLoop().RunUntilIdle();
202 EXPECT_TRUE(
203 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
204}
205
206TEST_F(ProhibitedTechnologiesHandlerTest,
207 InteractionBetweenGloballyAndSessionsProhibitedTechnologies) {
208 // Set session prohibiting of Cellular, should not prohibit on login screen
209 SetupPolicy(global_config_disable_wifi_and_cell, false);
210 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
211 NetworkTypePattern::Cellular()));
212
213 LoginToRegularUser();
214 SetupPolicy(base::DictionaryValue(), true); // receive user policy
215 // Cellular should be prohibited
216 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
217 NetworkTypePattern::Cellular()));
218
219 // Should be prohibited after adding to globally prohibited list
220 prohibited_technologies_handler_->AddGloballyProhibitedTechnology(
221 shill::kTypeCellular);
222 network_state_handler()->SetTechnologyEnabled(
223 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
224 base::RunLoop().RunUntilIdle();
225 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
226 NetworkTypePattern::Cellular()));
227
228 // Should be prohibited after removing from globally prohibited list
229 prohibited_technologies_handler_->RemoveGloballyProhibitedTechnology(
230 shill::kTypeCellular);
231 network_state_handler()->SetTechnologyEnabled(
232 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
233 base::RunLoop().RunUntilIdle();
234 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
235 NetworkTypePattern::Cellular()));
236
237 // Should not be prohibited after updating session prohibited list.
238 SetupPolicy(global_config_disable_wifi, false);
239 network_state_handler()->SetTechnologyEnabled(
240 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
241 base::RunLoop().RunUntilIdle();
242 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
243 NetworkTypePattern::Cellular()));
244}
245
fqjfee5067a2015-11-13 20:12:59246} // namespace chromeos