12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_validator.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utility> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_signature.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_test_utils.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_utils.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace onc { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ONCValidatorTest : public ::testing::Test { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Validate |onc_object| with the given |signature|. The object is considered 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to be managed if |managed_onc| is true. A strict validator is used if 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |strict| is true. |onc_object| and the resulting repaired object of the 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // validation is stored, so that expectations can be checked afterwards using 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // one of the Expect* functions below. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Validate(bool strict, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> onc_object, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const OncValueSignature* signature, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool managed_onc, 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONCSource onc_source) { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Validator> validator; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (strict) { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a strict validator that complains about every error. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) validator.reset(new Validator(true, true, true, managed_onc)); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a liberal validator that ignores or repairs non-critical errors. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) validator.reset(new Validator(false, false, false, managed_onc)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) validator->SetOncSource(onc_source); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) original_object_ = onc_object.Pass(); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) repaired_object_ = validator->ValidateAndRepairObject(signature, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *original_object_, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &validation_result_); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectValid() { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Validator::VALID, validation_result_); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(test_utils::Equals(original_object_.get(), 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) repaired_object_.get())); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectRepairWithWarnings( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue& expected_repaired) { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Validator::VALID_WITH_WARNINGS, validation_result_); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(test_utils::Equals(&expected_repaired, repaired_object_.get())); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectInvalid() { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(Validator::INVALID, validation_result_); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, repaired_object_.get()); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Validator::Result validation_result_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<const base::DictionaryValue> original_object_; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<const base::DictionaryValue> repaired_object_; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct OncParams { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |location_of_object| is a string to identify the object to be tested. It 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // may be used as a filename or as a dictionary key. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OncParams(const std::string& location_of_object, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const OncValueSignature* onc_signature, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_managed_onc, 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : location(location_of_object), 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) signature(onc_signature), 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_managed(is_managed_onc), 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc_source(onc_source) { 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string location; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const OncValueSignature* signature; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_managed; 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONCSource onc_source; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)::std::ostream& operator<<(::std::ostream& os, const OncParams& onc) { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return os << "(" << onc.location << ", " << onc.signature << ", " 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << (onc.is_managed ? "managed" : "unmanaged") << ", " 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << GetSourceAsString(onc.onc_source) << ")"; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Ensure that the constant |kEmptyUnencryptedConfiguration| describes a valid 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ONC toplevel object. 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ONCValidatorTest, EmptyUnencryptedConfiguration) { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Validate(true, ReadDictionaryFromJson(kEmptyUnencryptedConfiguration), 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &kToplevelConfigurationSignature, false, ::onc::ONC_SOURCE_NONE); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectValid(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test case is about validating valid ONC objects without any errors. Both 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the strict and the liberal validator accept the object. 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ONCValidatorValidTest : public ONCValidatorTest, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ::testing::WithParamInterface<OncParams> { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(ONCValidatorValidTest, StrictValidationValid) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OncParams onc = GetParam(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Validate(true, test_utils::ReadTestDictionary(onc.location), onc.signature, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc.is_managed, onc.onc_source); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectValid(); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(ONCValidatorValidTest, LiberalValidationValid) { 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OncParams onc = GetParam(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Validate(false, test_utils::ReadTestDictionary(onc.location), onc.signature, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc.is_managed, onc.onc_source); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectValid(); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The parameters are: 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OncParams(string: Filename of a ONC file that is to be validated, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OncValueSignature: signature of that ONC, 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// bool: true if the ONC is managed). 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P( 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ONCValidatorValidTest, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ONCValidatorValidTest, 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ::testing::Values( 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("managed_toplevel1.onc", 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true), 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("managed_toplevel2.onc", 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true), 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("managed_toplevel_with_global_config.onc", 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true), 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Check that at least one configuration is accepted for 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // device policies. 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("managed_toplevel_wifi_peap.onc", 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true, 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ::onc::ONC_SOURCE_DEVICE_POLICY), 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("managed_toplevel_l2tpipsec.onc", 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true), 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_wifi_wpa_psk.onc", 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_wifi_wep_proxy.onc", 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_wifi_leap.onc", 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_wifi_eap_clientcert_with_cert_pems.onc", 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_wifi_remove.onc", 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_wifi_open.onc", 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("toplevel_openvpn_clientcert_with_cert_pems.onc", 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kToplevelConfigurationSignature, 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OncParams("toplevel_empty.onc", 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &kToplevelConfigurationSignature, 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false), 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OncParams("toplevel_only_global_config.onc", 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &kToplevelConfigurationSignature, 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true), 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("encrypted.onc", &kToplevelConfigurationSignature, true), 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("managed_vpn.onc", &kNetworkConfigurationSignature, true), 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("ethernet.onc", &kNetworkConfigurationSignature, true), 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("ethernet_with_eap.onc", 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kNetworkConfigurationSignature, 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) true), 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu OncParams("translation_of_shill_ethernet_with_ipconfig.onc", 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &kNetworkWithStateSignature, 1905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu true), 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("translation_of_shill_wifi_with_state.onc", 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kNetworkWithStateSignature, 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false), 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OncParams("valid_openvpn_with_cert_pems.onc", 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kNetworkConfigurationSignature, 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false))); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct RepairParams { 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Both arguments are strings to identify the object that is expected as the 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // validation result. They may either be used as filenames or as dictionary 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // keys. 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams(std::string strict_repaired, 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string liberal_repaired) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : location_of_strict_repaired(strict_repaired), 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location_of_liberal_repaired(liberal_repaired) { 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string location_of_strict_repaired; 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string location_of_liberal_repaired; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)::std::ostream& operator<<(::std::ostream& os, const RepairParams& rp) { 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return os << "(" << rp.location_of_strict_repaired << ", " 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << rp.location_of_liberal_repaired << ")"; 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test case is about validating ONC objects that contain errors which can 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// be repaired (then the errors count as warnings). If a location of the 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// expected repaired object is given, then it is checked that the validator 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// (either strict or liberal) returns this repaired object and the result is 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// VALID_WITH_WARNINGS. If the location is the empty string, then it is expected 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// that the validator returns NULL and the result INVALID. 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ONCValidatorTestRepairable 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public ONCValidatorTest, 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ::testing::WithParamInterface<std::pair<OncParams, 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams> > { 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Load the common test data and return the dictionary at the field with 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // name |name|. 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> GetDictionaryFromTestFile( 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string &name) { 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<const base::DictionaryValue> dict( 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_utils::ReadTestDictionary("invalid_settings_with_repairs.json")); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* onc_object = NULL; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(dict->GetDictionary(name, &onc_object)); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr(onc_object->DeepCopy()); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(ONCValidatorTestRepairable, StrictValidation) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OncParams onc = GetParam().first; 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Validate(true, GetDictionaryFromTestFile(onc.location), onc.signature, 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc.is_managed, onc.onc_source); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string location_of_repaired = 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetParam().second.location_of_strict_repaired; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (location_of_repaired.empty()) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectInvalid(); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRepairWithWarnings(*GetDictionaryFromTestFile(location_of_repaired)); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(ONCValidatorTestRepairable, LiberalValidation) { 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OncParams onc = GetParam().first; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Validate(false, GetDictionaryFromTestFile(onc.location), onc.signature, 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) onc.is_managed, onc.onc_source); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string location_of_repaired = 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetParam().second.location_of_liberal_repaired; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (location_of_repaired.empty()) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectInvalid(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRepairWithWarnings(*GetDictionaryFromTestFile(location_of_repaired)); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The parameters for all test case instantations below are: 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OncParams(string: A fieldname in the dictionary from the file 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// "invalid_settings_with_repairs.json". That nested 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// dictionary will be tested. 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OncValueSignature: signature of that ONC, 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// bool: true if the ONC is managed). 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// RepairParams(string: A fieldname in the dictionary from the file 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// "invalid_settings_with_repairs.json". That nested 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// dictionary is the expected result from strict 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// validation, 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// string: A fieldname in the dictionary from the file 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// "invalid_settings_with_repairs.json". That nested 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// dictionary is the expected result from liberal 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// validation). 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Strict validator returns INVALID. Liberal validator repairs. 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StrictInvalidLiberalRepair, 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ONCValidatorTestRepairable, 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::testing::Values( 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("network-unknown-fieldname", 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "network-repaired")), 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("managed-network-unknown-fieldname", 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true), 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "managed-network-repaired")), 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("managed-network-unknown-recommended", 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true), 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "managed-network-repaired")), 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("managed-network-dict-recommended", 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true), 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "managed-network-repaired")), 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("network-missing-required", 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "network-missing-required")), 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("managed-network-missing-required", 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true), 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "managed-network-missing-required")), 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Ensure that state values from Shill aren't accepted as 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // configuration. 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("network-state-field", 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "network-repaired")), 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("network-nested-state-field", 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "network-nested-state-field-repaired")), 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::make_pair(OncParams("network-with-ipconfigs", 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &kNetworkConfigurationSignature, 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false), 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RepairParams("", "network-repaired")), 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("openvpn-missing-verify-x509-name", 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kNetworkConfigurationSignature, false), 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RepairParams("", "openvpn-missing-verify-x509-name")), 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("ipsec-with-client-cert-missing-cacert", 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kIPsecSignature, 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "ipsec-with-client-cert-missing-cacert")), 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("toplevel-with-repairable-networks", 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kToplevelConfigurationSignature, 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false, 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::onc::ONC_SOURCE_DEVICE_POLICY), 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "toplevel-with-repaired-networks")))); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Strict and liberal validator repair identically. 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P( 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StrictAndLiberalRepairIdentically, 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ONCValidatorTestRepairable, 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::testing::Values( 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("toplevel-invalid-network", 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kToplevelConfigurationSignature, 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false), 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("toplevel-repaired", 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "toplevel-repaired")), 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("duplicate-network-guid", 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kToplevelConfigurationSignature, 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("repaired-duplicate-network-guid", 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "repaired-duplicate-network-guid")), 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("duplicate-cert-guid", 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kToplevelConfigurationSignature, 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false), 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("repaired-duplicate-cert-guid", 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "repaired-duplicate-cert-guid")), 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("toplevel-invalid-network", 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kToplevelConfigurationSignature, 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true), 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("toplevel-repaired", 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "toplevel-repaired")), 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Ignore recommended arrays in unmanaged ONC. 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("network-with-illegal-recommended", 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false), 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("network-repaired", "network-repaired")), 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("toplevel-with-vpn", 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kToplevelConfigurationSignature, 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false, 3734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONC_SOURCE_DEVICE_POLICY), 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("toplevel-empty", "toplevel-empty")), 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("toplevel-with-server-and-ca-cert", 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kToplevelConfigurationSignature, 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONC_SOURCE_DEVICE_POLICY), 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("toplevel-server-and-ca-cert-dropped", 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "toplevel-server-and-ca-cert-dropped")))); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Strict and liberal validator both repair, but with different results. 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P( 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StrictAndLiberalRepairDifferently, 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ONCValidatorTestRepairable, 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::testing::Values( 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("toplevel-with-nested-warning", 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kToplevelConfigurationSignature, 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false), 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("toplevel-empty", "toplevel-repaired")))); 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Strict and liberal validator return both INVALID. 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)INSTANTIATE_TEST_CASE_P( 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StrictAndLiberalInvalid, 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ONCValidatorTestRepairable, 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::testing::Values( 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("network-unknown-value", 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, false), 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("", "")), 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("managed-network-unknown-value", 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, true), 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("", "")), 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("network-value-out-of-range", 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, false), 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("", "")), 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("ipsec-with-psk-and-cacert", 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kIPsecSignature, false), 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "")), 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("ipsec-with-empty-cacertrefs", 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kIPsecSignature, false), 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "")), 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("ipsec-with-servercaref-and-servercarefs", 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kIPsecSignature, false), 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "")), 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("openvpn-with-servercaref-and-servercarefs", 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kOpenVPNSignature, false), 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "")), 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::make_pair(OncParams("eap-with-servercaref-and-servercarefs", 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &kEAPSignature, false), 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RepairParams("", "")), 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("managed-network-value-out-of-range", 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, true), 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("", "")), 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("network-wrong-type", 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, false), 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("", "")), 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("managed-network-wrong-type", 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, true), 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RepairParams("", "")), 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::make_pair(OncParams("network-with-client-cert-pattern", 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &kNetworkConfigurationSignature, true, 4324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ::onc::ONC_SOURCE_DEVICE_POLICY), 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RepairParams("", "")), 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::make_pair(OncParams("openvpn-invalid-verify-x509-type", 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &kNetworkConfigurationSignature, false), 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RepairParams("", "")) 437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) )); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace onc 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 441