Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(851)

Side by Side Diff: chrome/browser/chromeos/cros/network_library_unittest.cc

Issue 11578052: Replace OncNetworkParser by the new ONC translator. (Closed) Base URL: http://git.chromium.org/chromium/src.git@extend_onc_to_shill
Patch Set: Rebased. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <cert.h> 5 #include <cert.h>
6 #include <pk11pub.h> 6 #include <pk11pub.h>
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/at_exit.h" 11 #include "base/at_exit.h"
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/file_util.h" 13 #include "base/file_util.h"
14 #include "base/files/scoped_temp_dir.h" 14 #include "base/files/scoped_temp_dir.h"
15 #include "base/json/json_reader.h" 15 #include "base/json/json_reader.h"
16 #include "base/lazy_instance.h" 16 #include "base/lazy_instance.h"
17 #include "base/path_service.h" 17 #include "base/path_service.h"
18 #include "chrome/browser/chromeos/cros/cros_library.h" 18 #include "chrome/browser/chromeos/cros/cros_library.h"
19 #include "chrome/browser/chromeos/cros/network_library.h" 19 #include "chrome/browser/chromeos/cros/network_library.h"
20 #include "chrome/browser/chromeos/cros/onc_network_parser.h" 20 #include "chrome/browser/chromeos/cros/network_library_impl_stub.h"
21 #include "chrome/browser/chromeos/login/mock_user_manager.h"
22 #include "chrome/browser/google_apis/test_util.h"
21 #include "chrome/common/chrome_paths.h" 23 #include "chrome/common/chrome_paths.h"
22 #include "chromeos/network/onc/onc_certificate_importer.h" 24 #include "chromeos/network/onc/onc_certificate_importer.h"
23 #include "chromeos/network/onc/onc_constants.h" 25 #include "chromeos/network/onc/onc_constants.h"
26 #include "chromeos/network/onc/onc_test_utils.h"
24 #include "chromeos/network/onc/onc_utils.h" 27 #include "chromeos/network/onc/onc_utils.h"
25 #include "crypto/nss_util.h" 28 #include "crypto/nss_util.h"
26 #include "net/base/crypto_module.h" 29 #include "net/base/crypto_module.h"
27 #include "net/base/nss_cert_database.h" 30 #include "net/base/nss_cert_database.h"
28 #include "net/base/x509_certificate.h" 31 #include "net/base/x509_certificate.h"
29 #include "testing/gmock/include/gmock/gmock.h" 32 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
31 34
32 using ::testing::Return; 35 using ::testing::Return;
36 using ::testing::AtLeast;
33 37
34 namespace chromeos { 38 namespace chromeos {
35 39
36 namespace { 40 namespace {
37 41
38 // Have to do a stub here because MOCK can't handle closure arguments. 42 // Have to do a stub here because MOCK can't handle closure arguments.
39 class StubEnrollmentDelegate : public EnrollmentDelegate { 43 class StubEnrollmentDelegate : public EnrollmentDelegate {
40 public: 44 public:
41 explicit StubEnrollmentDelegate() 45 explicit StubEnrollmentDelegate()
42 : did_enroll(false), 46 : did_enroll(false),
43 correct_args(false) {} 47 correct_args(false) {}
44 48
45 void Enroll(const std::vector<std::string>& uri_list, 49 void Enroll(const std::vector<std::string>& uri_list,
46 const base::Closure& closure) { 50 const base::Closure& closure) {
47 std::vector<std::string> expected_uri_list; 51 std::vector<std::string> expected_uri_list;
48 expected_uri_list.push_back("http://youtu.be/dQw4w9WgXcQ"); 52 expected_uri_list.push_back("http://youtu.be/dQw4w9WgXcQ");
49 expected_uri_list.push_back("chrome-extension://abc/keygen-cert.html"); 53 expected_uri_list.push_back("chrome-extension://abc/keygen-cert.html");
50 if (uri_list == expected_uri_list) 54 if (uri_list == expected_uri_list)
51 correct_args = true; 55 correct_args = true;
52 56
53 did_enroll = true; 57 did_enroll = true;
54 closure.Run(); 58 closure.Run();
55 } 59 }
56 60
57 bool did_enroll; 61 bool did_enroll;
58 bool correct_args; 62 bool correct_args;
59 }; 63 };
60 64
61 void WifiNetworkConnectCallback(NetworkLibrary* cros, WifiNetwork* wifi) { 65 void WifiNetworkConnectCallback(NetworkLibrary* cros, WifiNetwork* wifi) {
62 cros->ConnectToWifiNetwork(wifi); 66 cros->ConnectToWifiNetwork(wifi, false);
63 } 67 }
64 68
65 void VirtualNetworkConnectCallback(NetworkLibrary* cros, VirtualNetwork* vpn) { 69 void VirtualNetworkConnectCallback(NetworkLibrary* cros, VirtualNetwork* vpn) {
66 cros->ConnectToVirtualNetwork(vpn); 70 cros->ConnectToVirtualNetwork(vpn);
67 } 71 }
68 72
69 } // namespace 73 } // namespace
70 74
71 TEST(NetworkLibraryTest, DecodeNonAsciiSSID) { 75 TEST(NetworkLibraryTest, DecodeNonAsciiSSID) {
72 76
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 128 }
125 } 129 }
126 130
127 // Create a stub libcros for testing NetworkLibrary functionality through 131 // Create a stub libcros for testing NetworkLibrary functionality through
128 // NetworkLibraryStubImpl. 132 // NetworkLibraryStubImpl.
129 // NOTE: It would be of little value to test stub functions that simply return 133 // NOTE: It would be of little value to test stub functions that simply return
130 // predefined values, e.g. ethernet_available(). However, many other functions 134 // predefined values, e.g. ethernet_available(). However, many other functions
131 // such as connected_network() return values which are set indirectly and thus 135 // such as connected_network() return values which are set indirectly and thus
132 // we can test the logic of those setters. 136 // we can test the logic of those setters.
133 137
134 class NetworkLibraryStubTest : public testing::Test { 138 class NetworkLibraryStubTest : public ::testing::Test {
135 public: 139 public:
136 NetworkLibraryStubTest() : cros_(NULL) {} 140 NetworkLibraryStubTest() : cros_(NULL) {}
137 141
138 protected: 142 protected:
139 virtual void SetUp() { 143 virtual void SetUp() {
140 ASSERT_TRUE(test_nssdb_.is_open()); 144 ASSERT_TRUE(test_nssdb_.is_open());
141 145
142 slot_ = net::NSSCertDatabase::GetInstance()->GetPublicModule(); 146 slot_ = net::NSSCertDatabase::GetInstance()->GetPublicModule();
143 cros_ = CrosLibrary::Get()->GetNetworkLibrary(); 147 cros_ = static_cast<NetworkLibraryImplStub*>(
148 CrosLibrary::Get()->GetNetworkLibrary());
144 ASSERT_TRUE(cros_) << "GetNetworkLibrary() Failed!"; 149 ASSERT_TRUE(cros_) << "GetNetworkLibrary() Failed!";
145 150
146 // Test db should be empty at start of test. 151 // Test db should be empty at start of test.
147 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); 152 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size());
148 } 153 }
154
149 virtual void TearDown() { 155 virtual void TearDown() {
150 cros_ = NULL; 156 cros_ = NULL;
151 EXPECT_TRUE(CleanupSlotContents(slot_->os_module_handle())); 157 EXPECT_TRUE(CleanupSlotContents(slot_->os_module_handle()));
152 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); 158 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size());
153 } 159 }
154 160
155 virtual void GetTestData(const std::string& filename, 161 // Load the ONC from |onc_file| using NetworkLibrary::LoadOncNetworks. Check
156 scoped_ptr<base::ListValue>* certificates, 162 // that return value matches |expect_successful_import| and the configuration
157 scoped_ptr<base::ListValue>* network_configs) { 163 // that would be sent to Shill matches |shill_json|.
158 FilePath path; 164 void LoadOncAndVerifyNetworks(std::string onc_file,
159 PathService::Get(chrome::DIR_TEST_DATA, &path); 165 std::string shill_json,
160 path = path.AppendASCII("chromeos").AppendASCII("cros").Append(filename); 166 onc::ONCSource source,
161 ASSERT_TRUE(file_util::PathExists(path)) 167 bool expect_successful_import) {
162 << "Couldn't find test data file " << path.value(); 168 ScopedMockUserManagerEnabler mock_user_manager;
163 std::string contents; 169 mock_user_manager.user_manager()->SetLoggedInUser("madmax@my.domain.com");
164 ASSERT_TRUE(file_util::ReadFileToString(path, &contents)) 170 EXPECT_CALL(*mock_user_manager.user_manager(), IsUserLoggedIn())
165 << "Unable to read test data file " << path.value(); 171 .Times(AtLeast(0))
172 .WillRepeatedly(Return(true));
166 173
167 scoped_ptr<base::DictionaryValue> root = 174 std::string onc_blob =
168 onc::ReadDictionaryFromJson(contents); 175 onc::test_utils::ReadTestData(onc_file);
169 CHECK(root.get() != NULL) << "ONC is not a valid JSON dictionary.";
170 176
171 base::ListValue* certificates_ptr; 177 scoped_ptr<base::Value> expected_value =
172 CHECK(root->GetListWithoutPathExpansion(onc::kCertificates, 178 google_apis::test_util::LoadJSONFile(shill_json);
173 &certificates_ptr)); 179 base::DictionaryValue* expected_configs;
174 certificates->reset(certificates_ptr->DeepCopy()); 180 expected_value->GetAsDictionary(&expected_configs);
175 181
176 base::ListValue* network_configs_ptr; 182 EXPECT_EQ(expect_successful_import,
177 CHECK(root->GetListWithoutPathExpansion(onc::kNetworkConfigurations, 183 cros_->LoadOncNetworks(onc_blob, "", source, true));
178 &network_configs_ptr)); 184
179 network_configs->reset(network_configs_ptr->DeepCopy()); 185 const std::map<std::string, base::DictionaryValue*>& configs =
186 cros_->GetConfigurations();
187
188 EXPECT_EQ(expected_configs->size(), configs.size());
189
190 for (base::DictionaryValue::Iterator it(*expected_configs); it.HasNext();
191 it.Advance()) {
192 const base::DictionaryValue* expected_config;
193 it.value().GetAsDictionary(&expected_config);
194
195 std::map<std::string, base::DictionaryValue*>::const_iterator entry =
196 configs.find(it.key());
197 EXPECT_NE(entry, configs.end());
198 base::DictionaryValue* actual_config = entry->second;
199 EXPECT_TRUE(onc::test_utils::Equals(expected_config, actual_config));
200 }
180 } 201 }
181 202
182 ScopedStubCrosEnabler cros_stub_; 203 ScopedStubCrosEnabler cros_stub_;
183 NetworkLibrary* cros_; 204 NetworkLibraryImplStub* cros_;
184 private: 205 protected:
185 net::CertificateList ListCertsInSlot(PK11SlotInfo* slot) { 206 net::CertificateList ListCertsInSlot(PK11SlotInfo* slot) {
186 net::CertificateList result; 207 net::CertificateList result;
187 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); 208 CERTCertList* cert_list = PK11_ListCertsInSlot(slot);
188 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); 209 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list);
189 !CERT_LIST_END(node, cert_list); 210 !CERT_LIST_END(node, cert_list);
190 node = CERT_LIST_NEXT(node)) { 211 node = CERT_LIST_NEXT(node)) {
191 result.push_back(net::X509Certificate::CreateFromHandle( 212 result.push_back(net::X509Certificate::CreateFromHandle(
192 node->cert, net::X509Certificate::OSCertHandles())); 213 node->cert, net::X509Certificate::OSCertHandles()));
193 } 214 }
194 CERT_DestroyCertList(cert_list); 215 CERT_DestroyCertList(cert_list);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 WifiNetwork* wifi1 = cros_->FindWifiNetworkByPath("wifi1"); 310 WifiNetwork* wifi1 = cros_->FindWifiNetworkByPath("wifi1");
290 ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi1); 311 ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi1);
291 EXPECT_TRUE(wifi1->connected()); 312 EXPECT_TRUE(wifi1->connected());
292 cros_->DisconnectFromNetwork(wifi1); 313 cros_->DisconnectFromNetwork(wifi1);
293 EXPECT_FALSE(wifi1->connected()); 314 EXPECT_FALSE(wifi1->connected());
294 EXPECT_TRUE(cros_->CanConnectToNetwork(wifi1)); 315 EXPECT_TRUE(cros_->CanConnectToNetwork(wifi1));
295 cros_->ConnectToWifiNetwork(wifi1); 316 cros_->ConnectToWifiNetwork(wifi1);
296 EXPECT_TRUE(wifi1->connected()); 317 EXPECT_TRUE(wifi1->connected());
297 } 318 }
298 319
299 TEST_F(NetworkLibraryStubTest, NetworkConnectOncWifi) { 320 TEST_F(NetworkLibraryStubTest, NetworkConnectWifiWithCertPattern) {
300 // Import a wireless network via loading an ONC file. 321 scoped_ptr<base::DictionaryValue> onc_root =
301 scoped_ptr<base::ListValue> network_configs; 322 onc::test_utils::ReadTestDictionary("toplevel_wifi_eap_clientcert.onc");
302 scoped_ptr<base::ListValue> certificates; 323 base::ListValue* certificates;
303 GetTestData("cert-pattern.onc", &certificates, &network_configs); 324 onc_root->GetListWithoutPathExpansion(onc::kCertificates, &certificates);
304 325
305 onc::CertificateImporter importer(onc::ONC_SOURCE_USER_IMPORT, 326 onc::CertificateImporter importer(onc::ONC_SOURCE_USER_IMPORT,
306 false /* don't allow webtrust */); 327 false /* don't allow webtrust */);
307 EXPECT_EQ(onc::CertificateImporter::IMPORT_OK, 328 ASSERT_EQ(onc::CertificateImporter::IMPORT_OK,
308 importer.ParseAndStoreCertificates(*certificates)); 329 importer.ParseAndStoreCertificates(*certificates));
309 330
310 OncNetworkParser parser(*network_configs, 331 WifiNetwork* wifi = cros_->FindWifiNetworkByPath("wifi_cert_pattern");
311 onc::ONC_SOURCE_USER_IMPORT);
312 ASSERT_TRUE(parser.parse_error().empty());
313 EXPECT_EQ(1, parser.GetNetworkConfigsSize());
314 scoped_ptr<Network> network(parser.ParseNetwork(0, NULL));
315 ASSERT_TRUE(network.get());
316 EXPECT_EQ(CLIENT_CERT_TYPE_PATTERN, network->client_cert_type());
317 332
318 StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate(); 333 StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate();
319 334 wifi->SetEnrollmentDelegate(enrollment_delegate);
320 network->SetEnrollmentDelegate(enrollment_delegate);
321 EXPECT_FALSE(enrollment_delegate->did_enroll); 335 EXPECT_FALSE(enrollment_delegate->did_enroll);
322 EXPECT_FALSE(enrollment_delegate->correct_args); 336 EXPECT_FALSE(enrollment_delegate->correct_args);
323 WifiNetwork* wifi1 = static_cast<WifiNetwork*>(network.get());
324 337
325 ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi1); 338 ASSERT_NE(static_cast<const WifiNetwork*>(NULL), wifi);
326 EXPECT_FALSE(wifi1->connected()); 339 EXPECT_FALSE(wifi->connected());
327 EXPECT_TRUE(cros_->CanConnectToNetwork(wifi1)); 340 EXPECT_TRUE(cros_->CanConnectToNetwork(wifi));
328 EXPECT_FALSE(wifi1->connected()); 341 EXPECT_FALSE(wifi->connected());
329 wifi1->AttemptConnection( 342 wifi->AttemptConnection(
330 base::Bind(&WifiNetworkConnectCallback, cros_, wifi1)); 343 base::Bind(&WifiNetworkConnectCallback, cros_, wifi));
331 EXPECT_TRUE(wifi1->connected()); 344 EXPECT_TRUE(wifi->connected());
332 EXPECT_TRUE(enrollment_delegate->did_enroll); 345 EXPECT_TRUE(enrollment_delegate->did_enroll);
333 EXPECT_TRUE(enrollment_delegate->correct_args); 346 EXPECT_TRUE(enrollment_delegate->correct_args);
334 } 347 }
335 348
336 TEST_F(NetworkLibraryStubTest, NetworkConnectOncVPN) { 349 TEST_F(NetworkLibraryStubTest, NetworkConnectVPNWithCertPattern) {
337 // Import a wireless network via loading an ONC file. 350 scoped_ptr<base::DictionaryValue> onc_root =
338 scoped_ptr<base::ListValue> network_configs; 351 onc::test_utils::ReadTestDictionary("toplevel_openvpn_clientcert.onc");
339 scoped_ptr<base::ListValue> certificates; 352 base::ListValue* certificates;
340 GetTestData("cert-pattern-vpn.onc", &certificates, &network_configs); 353 onc_root->GetListWithoutPathExpansion(onc::kCertificates, &certificates);
341 354
342 onc::CertificateImporter importer(onc::ONC_SOURCE_USER_IMPORT, 355 onc::CertificateImporter importer(onc::ONC_SOURCE_USER_IMPORT,
343 false /* don't allow webtrust */); 356 false /* don't allow webtrust */);
344 EXPECT_EQ(onc::CertificateImporter::IMPORT_OK, 357 ASSERT_EQ(onc::CertificateImporter::IMPORT_OK,
345 importer.ParseAndStoreCertificates(*certificates)); 358 importer.ParseAndStoreCertificates(*certificates));
346 359
347 OncNetworkParser parser(*network_configs, 360 VirtualNetwork* vpn = cros_->FindVirtualNetworkByPath("vpn_cert_pattern");
348 onc::ONC_SOURCE_USER_IMPORT);
349 ASSERT_TRUE(parser.parse_error().empty());
350 EXPECT_EQ(1, parser.GetNetworkConfigsSize());
351 scoped_ptr<Network> network(parser.ParseNetwork(0, NULL));
352 ASSERT_TRUE(network.get());
353 EXPECT_EQ(CLIENT_CERT_TYPE_PATTERN, network->client_cert_type());
354 361
355 StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate(); 362 StubEnrollmentDelegate* enrollment_delegate = new StubEnrollmentDelegate();
356 363 vpn->SetEnrollmentDelegate(enrollment_delegate);
357 network->SetEnrollmentDelegate(enrollment_delegate);
358 EXPECT_FALSE(enrollment_delegate->did_enroll); 364 EXPECT_FALSE(enrollment_delegate->did_enroll);
359 EXPECT_FALSE(enrollment_delegate->correct_args); 365 EXPECT_FALSE(enrollment_delegate->correct_args);
360 VirtualNetwork* vpn1 = static_cast<VirtualNetwork*>(network.get());
361 366
362 ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), vpn1); 367 ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), vpn);
363 EXPECT_FALSE(vpn1->connected()); 368 EXPECT_FALSE(vpn->connected());
364 EXPECT_TRUE(cros_->CanConnectToNetwork(vpn1)); 369 EXPECT_TRUE(cros_->CanConnectToNetwork(vpn));
365 EXPECT_FALSE(vpn1->connected()); 370 EXPECT_FALSE(vpn->connected());
366 vpn1->AttemptConnection( 371 vpn->AttemptConnection(
367 base::Bind(&VirtualNetworkConnectCallback, cros_, vpn1)); 372 base::Bind(&VirtualNetworkConnectCallback, cros_, vpn));
368 EXPECT_TRUE(vpn1->connected()); 373 EXPECT_TRUE(vpn->connected());
369 EXPECT_TRUE(enrollment_delegate->did_enroll); 374 EXPECT_TRUE(enrollment_delegate->did_enroll);
370 EXPECT_TRUE(enrollment_delegate->correct_args); 375 EXPECT_TRUE(enrollment_delegate->correct_args);
371 } 376 }
372 377
373 TEST_F(NetworkLibraryStubTest, NetworkConnectVPN) { 378 TEST_F(NetworkLibraryStubTest, NetworkConnectVPN) {
374 VirtualNetwork* vpn1 = cros_->FindVirtualNetworkByPath("vpn1"); 379 VirtualNetwork* vpn1 = cros_->FindVirtualNetworkByPath("vpn1");
375 EXPECT_NE(static_cast<const VirtualNetwork*>(NULL), vpn1); 380 EXPECT_NE(static_cast<const VirtualNetwork*>(NULL), vpn1);
376 EXPECT_FALSE(vpn1->connected()); 381 EXPECT_FALSE(vpn1->connected());
377 EXPECT_TRUE(cros_->CanConnectToNetwork(vpn1)); 382 EXPECT_TRUE(cros_->CanConnectToNetwork(vpn1));
378 cros_->ConnectToVirtualNetwork(vpn1); 383 cros_->ConnectToVirtualNetwork(vpn1);
379 EXPECT_TRUE(vpn1->connected()); 384 EXPECT_TRUE(vpn1->connected());
380 ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), cros_->virtual_network()); 385 ASSERT_NE(static_cast<const VirtualNetwork*>(NULL), cros_->virtual_network());
381 EXPECT_EQ("vpn1", cros_->virtual_network()->service_path()); 386 EXPECT_EQ("vpn1", cros_->virtual_network()->service_path());
382 } 387 }
383 388
389 TEST_F(NetworkLibraryStubTest, LoadOncNetworksWithInvalidConfig) {
390 LoadOncAndVerifyNetworks(
391 "toplevel_partially_invalid.onc",
392 "net/shill_for_toplevel_partially_invalid.json",
393 onc::ONC_SOURCE_USER_POLICY,
394 false /* expect import to fail */);
395
396 EXPECT_EQ(ListCertsInSlot(slot_->os_module_handle()).size(), 1U);
397 }
398
399 namespace {
400
401 struct ImportParams {
402 // |onc_file|: Filename of source ONC, relative to
403 // chromeos/test/data/network.
404 // |shill_file|: Filename of expected Shill config, relative to
405 // chrome/test/data/chromeos).
406 // |onc_source|: The source of the ONC.
407 // |expect_import_result|: The expected return value of LoadOncNetworks.
408 ImportParams(const std::string& onc_file,
409 const std::string& shill_file,
410 onc::ONCSource onc_source,
411 bool expect_import_result = true)
412 : onc_file(onc_file),
413 shill_file(shill_file),
414 onc_source(onc_source),
415 expect_import_result(expect_import_result) {
416 }
417
418 std::string onc_file, shill_file;
419 onc::ONCSource onc_source;
420 bool expect_import_result;
421 };
422
423 ::std::ostream& operator<<(::std::ostream& os, const ImportParams& params) {
424 return os << "(" << params.onc_file << ", " << params.shill_file << ", "
425 << onc::GetSourceAsString(params.onc_source) << ", "
426 << (params.expect_import_result ? "valid" : "invalid") << ")";
427 }
428
429 } // namespace
430
431 class LoadOncNetworksTest
432 : public NetworkLibraryStubTest,
433 public ::testing::WithParamInterface<ImportParams> {
434 };
435
436 TEST_P(LoadOncNetworksTest, VerifyNetworksAndCertificates) {
437 LoadOncAndVerifyNetworks(GetParam().onc_file,
438 GetParam().shill_file,
439 GetParam().onc_source,
440 GetParam().expect_import_result);
441
442 scoped_ptr<base::DictionaryValue> onc_dict =
443 onc::test_utils::ReadTestDictionary(GetParam().onc_file);
444 base::ListValue* onc_certs;
445 onc_dict->GetListWithoutPathExpansion(onc::kCertificates, &onc_certs);
446
447 EXPECT_EQ(onc_certs->GetSize(),
448 ListCertsInSlot(slot_->os_module_handle()).size());
449 }
450
451 INSTANTIATE_TEST_CASE_P(
452 LoadOncNetworksTest,
453 LoadOncNetworksTest,
454 ::testing::Values(
455 ImportParams("managed_toplevel1.onc",
456 "net/shill_for_managed_toplevel1.json",
457 onc::ONC_SOURCE_USER_POLICY),
458 ImportParams("managed_toplevel2.onc",
459 "net/shill_for_managed_toplevel2.json",
460 onc::ONC_SOURCE_USER_POLICY),
461 ImportParams("managed_toplevel_l2tpipsec.onc",
462 "net/shill_for_managed_toplevel_l2tpipsec.json",
463 onc::ONC_SOURCE_USER_POLICY),
464 ImportParams("managed_toplevel_wifi_peap.onc",
465 "net/shill_for_managed_toplevel_wifi_peap.json",
466 onc::ONC_SOURCE_DEVICE_POLICY),
467 ImportParams("toplevel_wifi_open.onc",
468 "net/shill_for_toplevel_wifi_open.json",
469 onc::ONC_SOURCE_DEVICE_POLICY),
470 ImportParams("toplevel_wifi_wep_proxy.onc",
471 "net/shill_for_toplevel_wifi_wep_proxy.json",
472 onc::ONC_SOURCE_USER_POLICY),
473 ImportParams("toplevel_wifi_wpa_psk.onc",
474 "net/shill_for_toplevel_wifi_wpa_psk.json",
475 onc::ONC_SOURCE_USER_POLICY),
476 ImportParams("toplevel_wifi_leap.onc",
477 "net/shill_for_toplevel_wifi_leap.json",
478 onc::ONC_SOURCE_USER_POLICY),
479 ImportParams("toplevel_wifi_eap_clientcert.onc",
480 "net/shill_for_toplevel_wifi_eap_clientcert.json",
481 onc::ONC_SOURCE_USER_POLICY),
482 ImportParams("toplevel_openvpn_clientcert.onc",
483 "net/shill_for_toplevel_openvpn_clientcert.json",
484 onc::ONC_SOURCE_USER_POLICY),
485 ImportParams("toplevel_wifi_remove.onc",
486 "net/shill_for_toplevel_wifi_remove.json",
487 onc::ONC_SOURCE_USER_POLICY),
488 ImportParams("toplevel_with_unknown_fields.onc",
489 "net/shill_for_toplevel_with_unknown_fields.json",
490 onc::ONC_SOURCE_USER_POLICY,
491 false)));
492
384 // TODO(stevenjb): Test remembered networks. 493 // TODO(stevenjb): Test remembered networks.
385 494
386 // TODO(stevenjb): Test network profiles. 495 // TODO(stevenjb): Test network profiles.
387 496
388 // TODO(stevenjb): Test network devices. 497 // TODO(stevenjb): Test network devices.
389 498
390 // TODO(stevenjb): Test data plans. 499 // TODO(stevenjb): Test data plans.
391 500
392 // TODO(stevenjb): Test monitor network / device. 501 // TODO(stevenjb): Test monitor network / device.
393 502
394 } // namespace chromeos 503 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/network_library_impl_stub.cc ('k') | chrome/browser/chromeos/cros/onc_network_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698