| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/cros/onc_network_parser.h" | 5 #include "chrome/browser/chromeos/cros/onc_network_parser.h" |
| 6 | 6 |
| 7 #include <cert.h> | 7 #include <cert.h> |
| 8 #include <pk11pub.h> | 8 #include <pk11pub.h> |
| 9 | 9 |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 11 #include "base/scoped_temp_dir.h" | 11 #include "base/scoped_temp_dir.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/browser/chromeos/cros/network_library.h" | 13 #include "chrome/browser/chromeos/cros/network_library.h" |
| 14 #include "crypto/nss_util.h" | 14 #include "crypto/nss_util.h" |
| 15 #include "net/base/cert_database.h" | 15 #include "net/base/cert_database.h" |
| 16 #include "net/base/crypto_module.h" | 16 #include "net/base/crypto_module.h" |
| 17 #include "net/base/x509_certificate.h" | 17 #include "net/base/x509_certificate.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "third_party/cros_system_api/dbus/service_constants.h" | |
| 20 | 19 |
| 21 namespace chromeos { | 20 namespace chromeos { |
| 22 | 21 |
| 23 const char kNetworkConfigurationOpenVPN[] = | |
| 24 " {" | |
| 25 " \"GUID\": \"{408290ea-9299-4757-ab04-8957d55f0f13}\"," | |
| 26 " \"Type\": \"VPN\"," | |
| 27 " \"Name\": \"MyVPN\"," | |
| 28 " \"VPN\": {" | |
| 29 " \"Host\": \"vpn.acme.org\"," | |
| 30 " \"Type\": \"OpenVPN\"," | |
| 31 " \"OpenVPN\": {" | |
| 32 " \"AuthRetry\": \"interact\"," | |
| 33 " \"CompLZO\": \"true\"," | |
| 34 " \"KeyDirection\": \"1\"," | |
| 35 " \"Port\": 443," | |
| 36 " \"Proto\": \"udp\"," | |
| 37 " \"PushPeerInfo\": true," | |
| 38 " \"RemoteCertEKU\": \"TLS Web Server Authentication\"," | |
| 39 " \"RemoteCertKU\": [" | |
| 40 " \"eo\"" | |
| 41 " ]," | |
| 42 " \"RemoteCertTLS\": \"server\"," | |
| 43 " \"RenegSec\": 0," | |
| 44 " \"ServerPollTimeout\": 10," | |
| 45 " \"StaticChallenge\": \"My static challenge\"," | |
| 46 " \"TLSAuthContents\": \"" | |
| 47 "-----BEGIN OpenVPN Static key V1-----\n" | |
| 48 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 49 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 50 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 51 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 52 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 53 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 54 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 55 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 56 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 57 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 58 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 59 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 60 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 61 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 62 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 63 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" | |
| 64 "END OpenVPN Static key V1-----\n\"," | |
| 65 " \"TLSRemote\": \"MyOpenVPNServer\"," | |
| 66 " \"SaveCredentials\": false," | |
| 67 " \"ServerCARef\": \"{55ca78f6-0842-4e1b-96a3-09a9e1a26ef5}\"," | |
| 68 " \"ClientCertType\": \"Pattern\"," | |
| 69 " \"ClientCertPattern\": {" | |
| 70 " \"IssuerRef\": \"{68a2ed90-13a1-4120-a1fe-282508320e18}\"," | |
| 71 " \"EnrollmentURI\": [" | |
| 72 " \"chrome-extension://abc/keygen-cert.html\"" | |
| 73 " ]" | |
| 74 " }," | |
| 75 " }" | |
| 76 " }" | |
| 77 " }"; | |
| 78 | |
| 79 const char kCertificateWebAuthority[] = | |
| 80 " {" | |
| 81 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ab}\"," | |
| 82 " \"Type\": \"Authority\"," | |
| 83 " \"Trust\": [\"Web\"]," | |
| 84 " \"X509\": \"MIIDojCCAwugAwIBAgIJAKGvi5ZgEWDVMA0GCSqGSIb3D" | |
| 85 "QEBBAUAMIGTMRUwEwYDVQQKEwxHb29nbGUsIEluYy4xETAPBgNVBAsTCENocm9tZU9TMS" | |
| 86 "IwIAYJKoZIhvcNAQkBFhNnc3BlbmNlckBnb29nbGUuY29tMRowGAYDVQQHExFNb3VudGF" | |
| 87 "pbiBWaWV3LCBDQTELMAkGA1UECBMCQ0ExCzAJBgNVBAYTAlVTMQ0wCwYDVQQDEwRsbWFv" | |
| 88 "MB4XDTExMDMxNjIzNDcxMFoXDTEyMDMxNTIzNDcxMFowgZMxFTATBgNVBAoTDEdvb2dsZ" | |
| 89 "SwgSW5jLjERMA8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQG" | |
| 90 "dvb2dsZS5jb20xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTE" | |
| 91 "LMAkGA1UEBhMCVVMxDTALBgNVBAMTBGxtYW8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ" | |
| 92 "AoGBAMDX6BQz2JUzIAVjetiXxDznd2wdqVqVHfNkbSRW+xBywgqUaIXmFEGUol7VzPfme" | |
| 93 "FV8o8ok/eFlQB0h6ycqgwwMd0KjtJs2ys/k0F5GuN0G7fsgr+NRnhVgxj21yF6gYTN/8a" | |
| 94 "9kscla/svdmp8ekexbALFnghbLBx3CgcqUxT+tAgMBAAGjgfswgfgwDAYDVR0TBAUwAwE" | |
| 95 "B/zAdBgNVHQ4EFgQUbYygbSkl4kpjCNuxoezFGupA97UwgcgGA1UdIwSBwDCBvYAUbYyg" | |
| 96 "bSkl4kpjCNuxoezFGupA97WhgZmkgZYwgZMxFTATBgNVBAoTDEdvb2dsZSwgSW5jLjERM" | |
| 97 "A8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQGdvb2dsZS5jb2" | |
| 98 "0xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTELMAkGA1UEBhM" | |
| 99 "CVVMxDTALBgNVBAMTBGxtYW+CCQChr4uWYBFg1TANBgkqhkiG9w0BAQQFAAOBgQCDq9wi" | |
| 100 "Q4uVuf1CQU3sXfXCy1yqi5m8AsO9FxHvah5/SVFNwKllqTfedpCaWEswJ55YAojW9e+pY" | |
| 101 "2Fh3Fo/Y9YkF88KCtLuBjjqDKCRLxF4LycjHODKyQQ7mN/t5AtP9yKOsNvWF+M4IfReg5" | |
| 102 "1kohau6FauQx87by5NIRPdkNPvkQ==\"" | |
| 103 " }"; | |
| 104 | |
| 105 | |
| 106 class OncNetworkParserTest : public testing::Test { | 22 class OncNetworkParserTest : public testing::Test { |
| 107 public: | 23 public: |
| 108 static void SetUpTestCase() { | 24 static void SetUpTestCase() { |
| 109 ASSERT_TRUE(temp_db_dir_.Get().CreateUniqueTempDir()); | 25 ASSERT_TRUE(temp_db_dir_.Get().CreateUniqueTempDir()); |
| 110 // Ideally, we'd open a test DB for each test case, and close it | 26 // Ideally, we'd open a test DB for each test case, and close it |
| 111 // again, removing the temp dir, but unfortunately, there's a | 27 // again, removing the temp dir, but unfortunately, there's a |
| 112 // bug in NSS that prevents this from working, so we just open | 28 // bug in NSS that prevents this from working, so we just open |
| 113 // it once, and empty it for each test case. Here's the bug: | 29 // it once, and empty it for each test case. Here's the bug: |
| 114 // https://bugzilla.mozilla.org/show_bug.cgi?id=588269 | 30 // https://bugzilla.mozilla.org/show_bug.cgi?id=588269 |
| 115 ASSERT_TRUE( | 31 ASSERT_TRUE( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 129 | 45 |
| 130 // Test db should be empty at start of test. | 46 // Test db should be empty at start of test. |
| 131 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 47 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 132 } | 48 } |
| 133 | 49 |
| 134 virtual void TearDown() { | 50 virtual void TearDown() { |
| 135 EXPECT_TRUE(CleanupSlotContents(slot_->os_module_handle())); | 51 EXPECT_TRUE(CleanupSlotContents(slot_->os_module_handle())); |
| 136 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 52 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 137 } | 53 } |
| 138 | 54 |
| 139 const base::Value* GetExpectedProperty(const Network* network, | |
| 140 PropertyIndex index, | |
| 141 base::Value::Type expected_type); | |
| 142 void CheckStringProperty(const Network* network, | |
| 143 PropertyIndex index, | |
| 144 const char* expected); | |
| 145 void CheckBooleanProperty(const Network* network, | |
| 146 PropertyIndex index, | |
| 147 bool expected); | |
| 148 | |
| 149 protected: | 55 protected: |
| 150 scoped_refptr<net::CryptoModule> slot_; | 56 scoped_refptr<net::CryptoModule> slot_; |
| 151 net::CertDatabase cert_db_; | 57 net::CertDatabase cert_db_; |
| 152 | 58 |
| 153 private: | 59 private: |
| 154 net::CertificateList ListCertsInSlot(PK11SlotInfo* slot) { | 60 net::CertificateList ListCertsInSlot(PK11SlotInfo* slot) { |
| 155 net::CertificateList result; | 61 net::CertificateList result; |
| 156 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); | 62 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); |
| 157 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); | 63 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); |
| 158 !CERT_LIST_END(node, cert_list); | 64 !CERT_LIST_END(node, cert_list); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 173 for (size_t i = 0; i < certs.size(); ++i) { | 79 for (size_t i = 0; i < certs.size(); ++i) { |
| 174 if (!cert_db_.DeleteCertAndKey(certs[i])) | 80 if (!cert_db_.DeleteCertAndKey(certs[i])) |
| 175 ok = false; | 81 ok = false; |
| 176 } | 82 } |
| 177 return ok; | 83 return ok; |
| 178 } | 84 } |
| 179 | 85 |
| 180 static base::LazyInstance<ScopedTempDir> temp_db_dir_; | 86 static base::LazyInstance<ScopedTempDir> temp_db_dir_; |
| 181 }; | 87 }; |
| 182 | 88 |
| 183 const base::Value* OncNetworkParserTest::GetExpectedProperty( | |
| 184 const Network* network, | |
| 185 PropertyIndex index, | |
| 186 base::Value::Type expected_type) { | |
| 187 const base::Value* value; | |
| 188 if (!network->GetProperty(index, &value)) { | |
| 189 ADD_FAILURE() << "Property " << index << " does not exist"; | |
| 190 return NULL; | |
| 191 } | |
| 192 if (!value->IsType(expected_type)) { | |
| 193 ADD_FAILURE() << "Property " << index << " expected type " | |
| 194 << expected_type << " actual type " | |
| 195 << value->GetType(); | |
| 196 return NULL; | |
| 197 } | |
| 198 return value; | |
| 199 } | |
| 200 | |
| 201 void OncNetworkParserTest::CheckStringProperty(const Network* network, | |
| 202 PropertyIndex index, | |
| 203 const char* expected) { | |
| 204 const base::Value* value = | |
| 205 GetExpectedProperty(network, index, base::Value::TYPE_STRING); | |
| 206 if (!value) | |
| 207 return; | |
| 208 std::string string_value; | |
| 209 value->GetAsString(&string_value); | |
| 210 EXPECT_EQ(expected, string_value); | |
| 211 } | |
| 212 | |
| 213 void OncNetworkParserTest::CheckBooleanProperty(const Network* network, | |
| 214 PropertyIndex index, | |
| 215 bool expected) { | |
| 216 const base::Value* value = | |
| 217 GetExpectedProperty(network, index, base::Value::TYPE_BOOLEAN); | |
| 218 if (!value) | |
| 219 return; | |
| 220 bool bool_value = false; | |
| 221 value->GetAsBoolean(&bool_value); | |
| 222 EXPECT_EQ(expected, bool_value); | |
| 223 } | |
| 224 | |
| 225 // static | 89 // static |
| 226 base::LazyInstance<ScopedTempDir> OncNetworkParserTest::temp_db_dir_ = | 90 base::LazyInstance<ScopedTempDir> OncNetworkParserTest::temp_db_dir_ = |
| 227 LAZY_INSTANCE_INITIALIZER; | 91 LAZY_INSTANCE_INITIALIZER; |
| 228 | 92 |
| 229 TEST_F(OncNetworkParserTest, TestCreateNetworkWifi1) { | 93 TEST_F(OncNetworkParserTest, TestCreateNetworkWifi1) { |
| 230 std::string test_blob( | 94 std::string test_blob( |
| 231 "{" | 95 "{" |
| 232 " \"NetworkConfigurations\": [{" | 96 " \"NetworkConfigurations\": [{" |
| 233 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," | 97 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," |
| 234 " \"Type\": \"WiFi\"," | 98 " \"Type\": \"WiFi\"," |
| 235 " \"WiFi\": {" | 99 " \"WiFi\": {" |
| 236 " \"Security\": \"WEP-PSK\"," | 100 " \"Security\": \"WEP\"," |
| 237 " \"SSID\": \"ssid\"," | 101 " \"SSID\": \"ssid\"," |
| 238 " \"Passphrase\": \"pass\"," | 102 " \"Passphrase\": \"pass\"," |
| 239 " }" | 103 " }" |
| 240 " }]" | 104 " }]" |
| 241 "}"); | 105 "}"); |
| 242 OncNetworkParser parser(test_blob); | 106 OncNetworkParser parser(test_blob); |
| 243 | 107 |
| 244 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 108 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
| 245 EXPECT_EQ(0, parser.GetCertificatesSize()); | 109 EXPECT_EQ(0, parser.GetCertificatesSize()); |
| 246 EXPECT_FALSE(parser.ParseNetwork(1)); | 110 EXPECT_FALSE(parser.ParseNetwork(1)); |
| 247 scoped_ptr<Network> network(parser.ParseNetwork(0)); | 111 Network* network = parser.ParseNetwork(0); |
| 248 ASSERT_TRUE(network.get()); | 112 ASSERT_TRUE(network); |
| 249 | 113 |
| 250 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); | 114 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); |
| 251 WifiNetwork* wifi = static_cast<WifiNetwork*>(network.get()); | 115 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
| 252 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_WEP); | 116 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_WEP); |
| 253 CheckStringProperty(wifi, PROPERTY_INDEX_SECURITY, flimflam::kSecurityWep); | |
| 254 EXPECT_EQ(wifi->name(), "ssid"); | 117 EXPECT_EQ(wifi->name(), "ssid"); |
| 255 CheckStringProperty(wifi, PROPERTY_INDEX_SSID, "ssid"); | |
| 256 EXPECT_EQ(wifi->auto_connect(), false); | 118 EXPECT_EQ(wifi->auto_connect(), false); |
| 257 EXPECT_EQ(wifi->passphrase(), "pass"); | 119 EXPECT_EQ(wifi->passphrase(), "pass"); |
| 258 CheckStringProperty(wifi, PROPERTY_INDEX_PASSPHRASE, "pass"); | |
| 259 } | 120 } |
| 260 | 121 |
| 261 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP1) { | 122 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP1) { |
| 262 std::string test_blob( | 123 std::string test_blob( |
| 263 "{" | 124 "{" |
| 264 " \"NetworkConfigurations\": [{" | 125 " \"NetworkConfigurations\": [{" |
| 265 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," | 126 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," |
| 266 " \"Type\": \"WiFi\"," | 127 " \"Type\": \"WiFi\"," |
| 267 " \"WiFi\": {" | 128 " \"WiFi\": {" |
| 268 " \"Security\": \"WPA-EAP\"," | 129 " \"Security\": \"WPA2\"," |
| 269 " \"SSID\": \"ssid\"," | 130 " \"SSID\": \"ssid\"," |
| 270 " \"AutoConnect\": true," | 131 " \"AutoConnect\": true," |
| 271 " \"EAP\": {" | 132 " \"EAP\": {" |
| 272 " \"Outer\": \"PEAP\"," | 133 " \"Outer\": \"PEAP\"," |
| 273 " \"UseSystemCAs\": false," | 134 " \"UseSystemCAs\": false," |
| 274 " }" | 135 " }" |
| 275 " }" | 136 " }" |
| 276 " }]" | 137 " }]" |
| 277 "}"); | 138 "}"); |
| 278 OncNetworkParser parser(test_blob); | 139 OncNetworkParser parser(test_blob); |
| 279 | 140 |
| 280 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 141 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
| 281 EXPECT_EQ(0, parser.GetCertificatesSize()); | 142 EXPECT_EQ(0, parser.GetCertificatesSize()); |
| 282 EXPECT_FALSE(parser.ParseNetwork(1)); | 143 EXPECT_FALSE(parser.ParseNetwork(1)); |
| 283 scoped_ptr<Network> network(parser.ParseNetwork(0)); | 144 Network* network = parser.ParseNetwork(0); |
| 284 ASSERT_TRUE(network.get()); | 145 ASSERT_TRUE(network); |
| 285 | 146 |
| 286 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); | 147 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); |
| 287 WifiNetwork* wifi = static_cast<WifiNetwork*>(network.get()); | 148 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
| 288 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); | 149 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); |
| 289 CheckStringProperty(wifi, PROPERTY_INDEX_SECURITY, flimflam::kSecurity8021x); | |
| 290 EXPECT_EQ(wifi->name(), "ssid"); | 150 EXPECT_EQ(wifi->name(), "ssid"); |
| 291 EXPECT_EQ(wifi->auto_connect(), true); | 151 EXPECT_EQ(wifi->auto_connect(), true); |
| 292 CheckBooleanProperty(wifi, PROPERTY_INDEX_AUTO_CONNECT, true); | |
| 293 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_PEAP); | 152 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_PEAP); |
| 294 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_METHOD, | |
| 295 flimflam::kEapMethodPEAP); | |
| 296 EXPECT_EQ(wifi->eap_use_system_cas(), false); | 153 EXPECT_EQ(wifi->eap_use_system_cas(), false); |
| 297 } | 154 } |
| 298 | 155 |
| 299 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP2) { | 156 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP2) { |
| 300 std::string test_blob( | 157 std::string test_blob( |
| 301 "{" | 158 "{" |
| 302 " \"NetworkConfigurations\": [{" | 159 " \"NetworkConfigurations\": [{" |
| 303 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," | 160 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," |
| 304 " \"Type\": \"WiFi\"," | 161 " \"Type\": \"WiFi\"," |
| 305 " \"WiFi\": {" | 162 " \"WiFi\": {" |
| 306 " \"Security\": \"WPA-EAP\"," | 163 " \"Security\": \"WPA2\"," |
| 307 " \"SSID\": \"ssid\"," | 164 " \"SSID\": \"ssid\"," |
| 308 " \"AutoConnect\": false," | 165 " \"AutoConnect\": false," |
| 309 " \"EAP\": {" | 166 " \"EAP\": {" |
| 310 " \"Outer\": \"LEAP\"," | 167 " \"Outer\": \"LEAP\"," |
| 311 " \"Identity\": \"user\"," | 168 " \"Identity\": \"user\"," |
| 312 " \"Password\": \"pass\"," | 169 " \"Password\": \"pass\"," |
| 313 " \"AnonymousIdentity\": \"anon\"," | 170 " \"AnonymousIdentity\": \"anon\"," |
| 314 " }" | 171 " }" |
| 315 " }" | 172 " }" |
| 316 " }]" | 173 " }]" |
| 317 "}"); | 174 "}"); |
| 318 OncNetworkParser parser(test_blob); | 175 OncNetworkParser parser(test_blob); |
| 319 | 176 |
| 320 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 177 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
| 321 EXPECT_EQ(0, parser.GetCertificatesSize()); | 178 EXPECT_EQ(0, parser.GetCertificatesSize()); |
| 322 EXPECT_FALSE(parser.ParseNetwork(1)); | 179 EXPECT_FALSE(parser.ParseNetwork(1)); |
| 323 scoped_ptr<Network> network(parser.ParseNetwork(0)); | 180 Network* network = parser.ParseNetwork(0); |
| 324 ASSERT_TRUE(network.get()); | 181 ASSERT_TRUE(network); |
| 325 | 182 |
| 326 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); | 183 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); |
| 327 WifiNetwork* wifi = static_cast<WifiNetwork*>(network.get()); | 184 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
| 328 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); | 185 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); |
| 329 EXPECT_EQ(wifi->name(), "ssid"); | 186 EXPECT_EQ(wifi->name(), "ssid"); |
| 330 EXPECT_EQ(wifi->auto_connect(), false); | 187 EXPECT_EQ(wifi->auto_connect(), false); |
| 331 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_LEAP); | 188 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_LEAP); |
| 332 EXPECT_EQ(wifi->eap_use_system_cas(), true); | 189 EXPECT_EQ(wifi->eap_use_system_cas(), true); |
| 333 EXPECT_EQ(wifi->eap_identity(), "user"); | 190 EXPECT_EQ(wifi->eap_identity(), "user"); |
| 334 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_IDENTITY, "user"); | |
| 335 EXPECT_EQ(wifi->eap_passphrase(), "pass"); | 191 EXPECT_EQ(wifi->eap_passphrase(), "pass"); |
| 336 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_PASSWORD, "pass"); | |
| 337 EXPECT_EQ(wifi->eap_anonymous_identity(), "anon"); | 192 EXPECT_EQ(wifi->eap_anonymous_identity(), "anon"); |
| 338 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY, "anon"); | |
| 339 } | |
| 340 | |
| 341 TEST_F(OncNetworkParserTest, TestCreateNetworkOpenVPN) { | |
| 342 std::string test_blob(std::string( | |
| 343 "{" | |
| 344 " \"NetworkConfigurations\": [") + | |
| 345 std::string(kNetworkConfigurationOpenVPN) + std::string( | |
| 346 " ]}")); | |
| 347 OncNetworkParser parser(test_blob); | |
| 348 | |
| 349 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | |
| 350 EXPECT_EQ(0, parser.GetCertificatesSize()); | |
| 351 scoped_ptr<Network> network(parser.ParseNetwork(0)); | |
| 352 ASSERT_TRUE(network.get() != NULL); | |
| 353 | |
| 354 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); | |
| 355 CheckStringProperty(network.get(), PROPERTY_INDEX_TYPE, flimflam::kTypeVPN); | |
| 356 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network.get()); | |
| 357 EXPECT_EQ("MyVPN", vpn->name()); | |
| 358 EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type()); | |
| 359 CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_TYPE, | |
| 360 flimflam::kProviderOpenVpn); | |
| 361 EXPECT_EQ("vpn.acme.org", vpn->server_hostname()); | |
| 362 CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_HOST, "vpn.acme.org"); | |
| 363 CheckStringProperty(vpn, PROPERTY_INDEX_VPN_DOMAIN, ""); | |
| 364 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_AUTHRETRY, "interact"); | |
| 365 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_CACERT, | |
| 366 "{55ca78f6-0842-4e1b-96a3-09a9e1a26ef5}"); | |
| 367 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_COMPLZO, "true"); | |
| 368 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_KEYDIRECTION, "1"); | |
| 369 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_PORT, "443"); | |
| 370 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_PROTO, "udp"); | |
| 371 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_PUSHPEERINFO, "true"); | |
| 372 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_REMOTECERTEKU, | |
| 373 "TLS Web Server Authentication"); | |
| 374 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_REMOTECERTKU, "eo"); | |
| 375 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_REMOTECERTTLS, "server"); | |
| 376 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_RENEGSEC, "0"); | |
| 377 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_SERVERPOLLTIMEOUT, "10"); | |
| 378 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_STATICCHALLENGE, | |
| 379 "My static challenge"); | |
| 380 // Check the default properties are set. | |
| 381 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_AUTHUSERPASS, ""); | |
| 382 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_MGMT_ENABLE, ""); | |
| 383 | |
| 384 std::string tls_auth_contents; | |
| 385 const Value* tls_auth_value = | |
| 386 GetExpectedProperty(vpn, PROPERTY_INDEX_OPEN_VPN_TLSAUTHCONTENTS, | |
| 387 base::Value::TYPE_STRING); | |
| 388 if (tls_auth_value != NULL) { | |
| 389 tls_auth_value->GetAsString(&tls_auth_contents); | |
| 390 EXPECT_NE(std::string::npos, | |
| 391 tls_auth_contents.find("END OpenVPN Static key V1-----\n")); | |
| 392 EXPECT_NE(std::string::npos, | |
| 393 tls_auth_contents.find( | |
| 394 "-----BEGIN OpenVPN Static key V1-----\n")); | |
| 395 } | |
| 396 CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_TLSREMOTE, | |
| 397 "MyOpenVPNServer"); | |
| 398 EXPECT_FALSE(vpn->save_credentials()); | |
| 399 EXPECT_EQ("{55ca78f6-0842-4e1b-96a3-09a9e1a26ef5}", vpn->ca_cert_nss()); | |
| 400 } | |
| 401 | |
| 402 TEST_F(OncNetworkParserTest, TestCreateNetworkL2TPIPsec) { | |
| 403 std::string test_blob( | |
| 404 "{" | |
| 405 " \"NetworkConfigurations\": [" | |
| 406 " {" | |
| 407 " \"GUID\": \"{926b84e4-f2c5-0972-b9bbb8f44c4316f5}\"," | |
| 408 " \"Name\": \"MyL2TPVPN\"," | |
| 409 " \"Type\": \"VPN\"," | |
| 410 " \"VPN\": {" | |
| 411 " \"Host\": \"l2tp.acme.org\"," | |
| 412 " \"Type\": \"L2TP-IPsec\"," | |
| 413 " \"IPsec\": {" | |
| 414 " \"IKEVersion\": 1," | |
| 415 " \"AuthenticationType\": \"PSK\"," | |
| 416 " \"PSK\": \"passphrase\"" | |
| 417 " }," | |
| 418 " \"L2TP\": {" | |
| 419 " \"SaveCredentials\": false" | |
| 420 " }" | |
| 421 " }" | |
| 422 " }" | |
| 423 " ]," | |
| 424 " \"Certificates\": []" | |
| 425 "}"); | |
| 426 OncNetworkParser parser(test_blob); | |
| 427 | |
| 428 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | |
| 429 EXPECT_EQ(0, parser.GetCertificatesSize()); | |
| 430 scoped_ptr<Network> network(parser.ParseNetwork(0)); | |
| 431 ASSERT_TRUE(network != NULL); | |
| 432 | |
| 433 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); | |
| 434 CheckStringProperty(network.get(), PROPERTY_INDEX_TYPE, flimflam::kTypeVPN); | |
| 435 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network.get()); | |
| 436 EXPECT_EQ("MyL2TPVPN", vpn->name()); | |
| 437 EXPECT_EQ(PROVIDER_TYPE_L2TP_IPSEC_PSK, vpn->provider_type()); | |
| 438 CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_TYPE, | |
| 439 flimflam::kProviderL2tpIpsec); | |
| 440 EXPECT_EQ("l2tp.acme.org", vpn->server_hostname()); | |
| 441 CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_HOST, "l2tp.acme.org"); | |
| 442 CheckStringProperty(vpn, PROPERTY_INDEX_VPN_DOMAIN, ""); | |
| 443 EXPECT_EQ("passphrase", vpn->psk_passphrase()); | |
| 444 CheckStringProperty(vpn, PROPERTY_INDEX_L2TPIPSEC_PSK, "passphrase"); | |
| 445 CheckStringProperty(vpn, PROPERTY_INDEX_IPSEC_IKEVERSION, "1"); | |
| 446 EXPECT_FALSE(vpn->save_credentials()); | |
| 447 } | 193 } |
| 448 | 194 |
| 449 TEST_F(OncNetworkParserTest, TestAddServerCertificate) { | 195 TEST_F(OncNetworkParserTest, TestAddServerCertificate) { |
| 450 std::string test_blob( | 196 std::string test_blob( |
| 451 "{" | 197 "{" |
| 452 " \"Certificates\": [" | 198 " \"Certificates\": [" |
| 453 " {" | 199 " {" |
| 454 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," | 200 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," |
| 455 " \"Type\": \"Server\"," | 201 " \"Type\": \"Server\"," |
| 456 " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" | 202 " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 469 " }" | 215 " }" |
| 470 " ]," | 216 " ]," |
| 471 "}"); | 217 "}"); |
| 472 OncNetworkParser parser(test_blob); | 218 OncNetworkParser parser(test_blob); |
| 473 | 219 |
| 474 EXPECT_EQ(1, parser.GetCertificatesSize()); | 220 EXPECT_EQ(1, parser.GetCertificatesSize()); |
| 475 EXPECT_TRUE(parser.ParseCertificate(0)); | 221 EXPECT_TRUE(parser.ParseCertificate(0)); |
| 476 } | 222 } |
| 477 | 223 |
| 478 TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { | 224 TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { |
| 479 const std::string test_blob(std::string("{" | 225 const std::string test_blob("{" |
| 480 " \"Certificates\": [") + | 226 " \"Certificates\": [" |
| 481 std::string(kCertificateWebAuthority) + std::string( | 227 " {" |
| 228 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ab}\"," |
| 229 " \"Type\": \"Authority\"," |
| 230 " \"Trust\": [\"Web\"]," |
| 231 " \"X509\": \"MIIDojCCAwugAwIBAgIJAKGvi5ZgEWDVMA0GCSqGSIb3D" |
| 232 "QEBBAUAMIGTMRUwEwYDVQQKEwxHb29nbGUsIEluYy4xETAPBgNVBAsTCENocm9tZU9TMS" |
| 233 "IwIAYJKoZIhvcNAQkBFhNnc3BlbmNlckBnb29nbGUuY29tMRowGAYDVQQHExFNb3VudGF" |
| 234 "pbiBWaWV3LCBDQTELMAkGA1UECBMCQ0ExCzAJBgNVBAYTAlVTMQ0wCwYDVQQDEwRsbWFv" |
| 235 "MB4XDTExMDMxNjIzNDcxMFoXDTEyMDMxNTIzNDcxMFowgZMxFTATBgNVBAoTDEdvb2dsZ" |
| 236 "SwgSW5jLjERMA8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQG" |
| 237 "dvb2dsZS5jb20xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTE" |
| 238 "LMAkGA1UEBhMCVVMxDTALBgNVBAMTBGxtYW8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ" |
| 239 "AoGBAMDX6BQz2JUzIAVjetiXxDznd2wdqVqVHfNkbSRW+xBywgqUaIXmFEGUol7VzPfme" |
| 240 "FV8o8ok/eFlQB0h6ycqgwwMd0KjtJs2ys/k0F5GuN0G7fsgr+NRnhVgxj21yF6gYTN/8a" |
| 241 "9kscla/svdmp8ekexbALFnghbLBx3CgcqUxT+tAgMBAAGjgfswgfgwDAYDVR0TBAUwAwE" |
| 242 "B/zAdBgNVHQ4EFgQUbYygbSkl4kpjCNuxoezFGupA97UwgcgGA1UdIwSBwDCBvYAUbYyg" |
| 243 "bSkl4kpjCNuxoezFGupA97WhgZmkgZYwgZMxFTATBgNVBAoTDEdvb2dsZSwgSW5jLjERM" |
| 244 "A8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQGdvb2dsZS5jb2" |
| 245 "0xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTELMAkGA1UEBhM" |
| 246 "CVVMxDTALBgNVBAMTBGxtYW+CCQChr4uWYBFg1TANBgkqhkiG9w0BAQQFAAOBgQCDq9wi" |
| 247 "Q4uVuf1CQU3sXfXCy1yqi5m8AsO9FxHvah5/SVFNwKllqTfedpCaWEswJ55YAojW9e+pY" |
| 248 "2Fh3Fo/Y9YkF88KCtLuBjjqDKCRLxF4LycjHODKyQQ7mN/t5AtP9yKOsNvWF+M4IfReg5" |
| 249 "1kohau6FauQx87by5NIRPdkNPvkQ==\"" |
| 250 " }" |
| 482 " ]," | 251 " ]," |
| 483 "}")); | 252 "}"); |
| 484 OncNetworkParser parser(test_blob); | 253 OncNetworkParser parser(test_blob); |
| 485 | 254 |
| 486 EXPECT_EQ(1, parser.GetCertificatesSize()); | 255 EXPECT_EQ(1, parser.GetCertificatesSize()); |
| 487 EXPECT_TRUE(parser.ParseCertificate(0)); | 256 EXPECT_TRUE(parser.ParseCertificate(0)); |
| 488 } | 257 } |
| 489 | 258 |
| 490 TEST_F(OncNetworkParserTest, TestAddClientCertificate) { | 259 TEST_F(OncNetworkParserTest, TestAddClientCertificate) { |
| 491 std::string test_blob( | 260 std::string test_blob( |
| 492 "{" | 261 "{" |
| 493 " \"Certificates\": [" | 262 " \"Certificates\": [" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 "AQU1M+0WRDkoVGbGg1jj7q2fI67qHIECBzRYESpgt5iAgIIAA==\"" | 297 "AQU1M+0WRDkoVGbGg1jj7q2fI67qHIECBzRYESpgt5iAgIIAA==\"" |
| 529 " }" | 298 " }" |
| 530 " ]," | 299 " ]," |
| 531 "}"); | 300 "}"); |
| 532 OncNetworkParser parser(test_blob); | 301 OncNetworkParser parser(test_blob); |
| 533 | 302 |
| 534 EXPECT_EQ(1, parser.GetCertificatesSize()); | 303 EXPECT_EQ(1, parser.GetCertificatesSize()); |
| 535 EXPECT_TRUE(parser.ParseCertificate(0)); | 304 EXPECT_TRUE(parser.ParseCertificate(0)); |
| 536 } | 305 } |
| 537 | 306 |
| 538 TEST_F(OncNetworkParserTest, TestNetworkAndCertificate) { | |
| 539 std::string test_blob(std::string( | |
| 540 "{" | |
| 541 " \"NetworkConfigurations\": [") + | |
| 542 std::string(kNetworkConfigurationOpenVPN) + std::string( | |
| 543 " ]," | |
| 544 " \"Certificates\": [") + | |
| 545 std::string(kCertificateWebAuthority) + std::string( | |
| 546 " ]," | |
| 547 "}")); | |
| 548 OncNetworkParser parser(test_blob); | |
| 549 | |
| 550 EXPECT_EQ(1, parser.GetCertificatesSize()); | |
| 551 EXPECT_TRUE(parser.ParseCertificate(0)); | |
| 552 | |
| 553 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | |
| 554 scoped_ptr<Network> network(parser.ParseNetwork(0)); | |
| 555 ASSERT_TRUE(network.get() != NULL); | |
| 556 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); | |
| 557 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network.get()); | |
| 558 EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type()); | |
| 559 } | |
| 560 | |
| 561 } // namespace chromeos | 307 } // namespace chromeos |
| OLD | NEW |