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" |
19 | 20 |
20 namespace chromeos { | 21 namespace chromeos { |
21 | 22 |
| 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 |
22 class OncNetworkParserTest : public testing::Test { | 106 class OncNetworkParserTest : public testing::Test { |
23 public: | 107 public: |
24 static void SetUpTestCase() { | 108 static void SetUpTestCase() { |
25 ASSERT_TRUE(temp_db_dir_.Get().CreateUniqueTempDir()); | 109 ASSERT_TRUE(temp_db_dir_.Get().CreateUniqueTempDir()); |
26 // Ideally, we'd open a test DB for each test case, and close it | 110 // Ideally, we'd open a test DB for each test case, and close it |
27 // again, removing the temp dir, but unfortunately, there's a | 111 // again, removing the temp dir, but unfortunately, there's a |
28 // bug in NSS that prevents this from working, so we just open | 112 // bug in NSS that prevents this from working, so we just open |
29 // it once, and empty it for each test case. Here's the bug: | 113 // it once, and empty it for each test case. Here's the bug: |
30 // https://bugzilla.mozilla.org/show_bug.cgi?id=588269 | 114 // https://bugzilla.mozilla.org/show_bug.cgi?id=588269 |
31 ASSERT_TRUE( | 115 ASSERT_TRUE( |
(...skipping 13 matching lines...) Expand all Loading... |
45 | 129 |
46 // Test db should be empty at start of test. | 130 // Test db should be empty at start of test. |
47 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 131 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
48 } | 132 } |
49 | 133 |
50 virtual void TearDown() { | 134 virtual void TearDown() { |
51 EXPECT_TRUE(CleanupSlotContents(slot_->os_module_handle())); | 135 EXPECT_TRUE(CleanupSlotContents(slot_->os_module_handle())); |
52 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 136 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
53 } | 137 } |
54 | 138 |
| 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 |
55 protected: | 149 protected: |
56 scoped_refptr<net::CryptoModule> slot_; | 150 scoped_refptr<net::CryptoModule> slot_; |
57 net::CertDatabase cert_db_; | 151 net::CertDatabase cert_db_; |
58 | 152 |
59 private: | 153 private: |
60 net::CertificateList ListCertsInSlot(PK11SlotInfo* slot) { | 154 net::CertificateList ListCertsInSlot(PK11SlotInfo* slot) { |
61 net::CertificateList result; | 155 net::CertificateList result; |
62 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); | 156 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); |
63 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); | 157 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); |
64 !CERT_LIST_END(node, cert_list); | 158 !CERT_LIST_END(node, cert_list); |
(...skipping 14 matching lines...) Expand all Loading... |
79 for (size_t i = 0; i < certs.size(); ++i) { | 173 for (size_t i = 0; i < certs.size(); ++i) { |
80 if (!cert_db_.DeleteCertAndKey(certs[i])) | 174 if (!cert_db_.DeleteCertAndKey(certs[i])) |
81 ok = false; | 175 ok = false; |
82 } | 176 } |
83 return ok; | 177 return ok; |
84 } | 178 } |
85 | 179 |
86 static base::LazyInstance<ScopedTempDir> temp_db_dir_; | 180 static base::LazyInstance<ScopedTempDir> temp_db_dir_; |
87 }; | 181 }; |
88 | 182 |
| 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 |
89 // static | 225 // static |
90 base::LazyInstance<ScopedTempDir> OncNetworkParserTest::temp_db_dir_ = | 226 base::LazyInstance<ScopedTempDir> OncNetworkParserTest::temp_db_dir_ = |
91 LAZY_INSTANCE_INITIALIZER; | 227 LAZY_INSTANCE_INITIALIZER; |
92 | 228 |
93 TEST_F(OncNetworkParserTest, TestCreateNetworkWifi1) { | 229 TEST_F(OncNetworkParserTest, TestCreateNetworkWifi1) { |
94 std::string test_blob( | 230 std::string test_blob( |
95 "{" | 231 "{" |
96 " \"NetworkConfigurations\": [{" | 232 " \"NetworkConfigurations\": [{" |
97 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," | 233 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," |
98 " \"Type\": \"WiFi\"," | 234 " \"Type\": \"WiFi\"," |
99 " \"WiFi\": {" | 235 " \"WiFi\": {" |
100 " \"Security\": \"WEP\"," | 236 " \"Security\": \"WEP-PSK\"," |
101 " \"SSID\": \"ssid\"," | 237 " \"SSID\": \"ssid\"," |
102 " \"Passphrase\": \"pass\"," | 238 " \"Passphrase\": \"pass\"," |
103 " }" | 239 " }" |
104 " }]" | 240 " }]" |
105 "}"); | 241 "}"); |
106 OncNetworkParser parser(test_blob); | 242 OncNetworkParser parser(test_blob); |
107 | 243 |
108 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 244 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
109 EXPECT_EQ(0, parser.GetCertificatesSize()); | 245 EXPECT_EQ(0, parser.GetCertificatesSize()); |
110 EXPECT_FALSE(parser.ParseNetwork(1)); | 246 EXPECT_FALSE(parser.ParseNetwork(1)); |
111 Network* network = parser.ParseNetwork(0); | 247 Network* network = parser.ParseNetwork(0); |
112 ASSERT_TRUE(network); | 248 ASSERT_TRUE(network); |
113 | 249 |
114 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); | 250 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); |
115 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); | 251 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
116 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_WEP); | 252 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_WEP); |
| 253 CheckStringProperty(wifi, PROPERTY_INDEX_SECURITY, flimflam::kSecurityWep); |
117 EXPECT_EQ(wifi->name(), "ssid"); | 254 EXPECT_EQ(wifi->name(), "ssid"); |
| 255 CheckStringProperty(wifi, PROPERTY_INDEX_SSID, "ssid"); |
118 EXPECT_EQ(wifi->auto_connect(), false); | 256 EXPECT_EQ(wifi->auto_connect(), false); |
119 EXPECT_EQ(wifi->passphrase(), "pass"); | 257 EXPECT_EQ(wifi->passphrase(), "pass"); |
| 258 CheckStringProperty(wifi, PROPERTY_INDEX_PASSPHRASE, "pass"); |
120 } | 259 } |
121 | 260 |
122 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP1) { | 261 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP1) { |
123 std::string test_blob( | 262 std::string test_blob( |
124 "{" | 263 "{" |
125 " \"NetworkConfigurations\": [{" | 264 " \"NetworkConfigurations\": [{" |
126 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," | 265 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," |
127 " \"Type\": \"WiFi\"," | 266 " \"Type\": \"WiFi\"," |
128 " \"WiFi\": {" | 267 " \"WiFi\": {" |
129 " \"Security\": \"WPA2\"," | 268 " \"Security\": \"WPA-EAP\"," |
130 " \"SSID\": \"ssid\"," | 269 " \"SSID\": \"ssid\"," |
131 " \"AutoConnect\": true," | 270 " \"AutoConnect\": true," |
132 " \"EAP\": {" | 271 " \"EAP\": {" |
133 " \"Outer\": \"PEAP\"," | 272 " \"Outer\": \"PEAP\"," |
134 " \"UseSystemCAs\": false," | 273 " \"UseSystemCAs\": false," |
135 " }" | 274 " }" |
136 " }" | 275 " }" |
137 " }]" | 276 " }]" |
138 "}"); | 277 "}"); |
139 OncNetworkParser parser(test_blob); | 278 OncNetworkParser parser(test_blob); |
140 | 279 |
141 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 280 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
142 EXPECT_EQ(0, parser.GetCertificatesSize()); | 281 EXPECT_EQ(0, parser.GetCertificatesSize()); |
143 EXPECT_FALSE(parser.ParseNetwork(1)); | 282 EXPECT_FALSE(parser.ParseNetwork(1)); |
144 Network* network = parser.ParseNetwork(0); | 283 Network* network = parser.ParseNetwork(0); |
145 ASSERT_TRUE(network); | 284 ASSERT_TRUE(network); |
146 | 285 |
147 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); | 286 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); |
148 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); | 287 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
149 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); | 288 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); |
| 289 CheckStringProperty(wifi, PROPERTY_INDEX_SECURITY, flimflam::kSecurity8021x); |
150 EXPECT_EQ(wifi->name(), "ssid"); | 290 EXPECT_EQ(wifi->name(), "ssid"); |
151 EXPECT_EQ(wifi->auto_connect(), true); | 291 EXPECT_EQ(wifi->auto_connect(), true); |
| 292 CheckBooleanProperty(wifi, PROPERTY_INDEX_AUTO_CONNECT, true); |
152 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_PEAP); | 293 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_PEAP); |
| 294 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_METHOD, |
| 295 flimflam::kEapMethodPEAP); |
153 EXPECT_EQ(wifi->eap_use_system_cas(), false); | 296 EXPECT_EQ(wifi->eap_use_system_cas(), false); |
154 } | 297 } |
155 | 298 |
156 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP2) { | 299 TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP2) { |
157 std::string test_blob( | 300 std::string test_blob( |
158 "{" | 301 "{" |
159 " \"NetworkConfigurations\": [{" | 302 " \"NetworkConfigurations\": [{" |
160 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," | 303 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," |
161 " \"Type\": \"WiFi\"," | 304 " \"Type\": \"WiFi\"," |
162 " \"WiFi\": {" | 305 " \"WiFi\": {" |
163 " \"Security\": \"WPA2\"," | 306 " \"Security\": \"WPA-EAP\"," |
164 " \"SSID\": \"ssid\"," | 307 " \"SSID\": \"ssid\"," |
165 " \"AutoConnect\": false," | 308 " \"AutoConnect\": false," |
166 " \"EAP\": {" | 309 " \"EAP\": {" |
167 " \"Outer\": \"LEAP\"," | 310 " \"Outer\": \"LEAP\"," |
168 " \"Identity\": \"user\"," | 311 " \"Identity\": \"user\"," |
169 " \"Password\": \"pass\"," | 312 " \"Password\": \"pass\"," |
170 " \"AnonymousIdentity\": \"anon\"," | 313 " \"AnonymousIdentity\": \"anon\"," |
171 " }" | 314 " }" |
172 " }" | 315 " }" |
173 " }]" | 316 " }]" |
174 "}"); | 317 "}"); |
175 OncNetworkParser parser(test_blob); | 318 OncNetworkParser parser(test_blob); |
176 | 319 |
177 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); | 320 EXPECT_EQ(1, parser.GetNetworkConfigsSize()); |
178 EXPECT_EQ(0, parser.GetCertificatesSize()); | 321 EXPECT_EQ(0, parser.GetCertificatesSize()); |
179 EXPECT_FALSE(parser.ParseNetwork(1)); | 322 EXPECT_FALSE(parser.ParseNetwork(1)); |
180 Network* network = parser.ParseNetwork(0); | 323 Network* network = parser.ParseNetwork(0); |
181 ASSERT_TRUE(network); | 324 ASSERT_TRUE(network); |
182 | 325 |
183 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); | 326 EXPECT_EQ(network->type(), chromeos::TYPE_WIFI); |
184 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); | 327 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
185 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); | 328 EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X); |
186 EXPECT_EQ(wifi->name(), "ssid"); | 329 EXPECT_EQ(wifi->name(), "ssid"); |
187 EXPECT_EQ(wifi->auto_connect(), false); | 330 EXPECT_EQ(wifi->auto_connect(), false); |
188 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_LEAP); | 331 EXPECT_EQ(wifi->eap_method(), EAP_METHOD_LEAP); |
189 EXPECT_EQ(wifi->eap_use_system_cas(), true); | 332 EXPECT_EQ(wifi->eap_use_system_cas(), true); |
190 EXPECT_EQ(wifi->eap_identity(), "user"); | 333 EXPECT_EQ(wifi->eap_identity(), "user"); |
| 334 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_IDENTITY, "user"); |
191 EXPECT_EQ(wifi->eap_passphrase(), "pass"); | 335 EXPECT_EQ(wifi->eap_passphrase(), "pass"); |
| 336 CheckStringProperty(wifi, PROPERTY_INDEX_EAP_PASSWORD, "pass"); |
192 EXPECT_EQ(wifi->eap_anonymous_identity(), "anon"); | 337 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 Network* network = parser.ParseNetwork(0); |
| 352 ASSERT_TRUE(network != NULL); |
| 353 |
| 354 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); |
| 355 CheckStringProperty(network, PROPERTY_INDEX_TYPE, flimflam::kTypeVPN); |
| 356 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network); |
| 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 Network* network = parser.ParseNetwork(0); |
| 431 ASSERT_TRUE(network != NULL); |
| 432 |
| 433 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); |
| 434 CheckStringProperty(network, PROPERTY_INDEX_TYPE, flimflam::kTypeVPN); |
| 435 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network); |
| 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()); |
193 } | 447 } |
194 | 448 |
195 TEST_F(OncNetworkParserTest, TestAddServerCertificate) { | 449 TEST_F(OncNetworkParserTest, TestAddServerCertificate) { |
196 std::string test_blob( | 450 std::string test_blob( |
197 "{" | 451 "{" |
198 " \"Certificates\": [" | 452 " \"Certificates\": [" |
199 " {" | 453 " {" |
200 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," | 454 " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697aa}\"," |
201 " \"Type\": \"Server\"," | 455 " \"Type\": \"Server\"," |
202 " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" | 456 " \"X509\": \"MIICWDCCAcECAxAAATANBgkqhkiG9w0BAQQFADCBkzEVM" |
(...skipping 12 matching lines...) Expand all Loading... |
215 " }" | 469 " }" |
216 " ]," | 470 " ]," |
217 "}"); | 471 "}"); |
218 OncNetworkParser parser(test_blob); | 472 OncNetworkParser parser(test_blob); |
219 | 473 |
220 EXPECT_EQ(1, parser.GetCertificatesSize()); | 474 EXPECT_EQ(1, parser.GetCertificatesSize()); |
221 EXPECT_TRUE(parser.ParseCertificate(0)); | 475 EXPECT_TRUE(parser.ParseCertificate(0)); |
222 } | 476 } |
223 | 477 |
224 TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { | 478 TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) { |
225 const std::string test_blob("{" | 479 const std::string test_blob(std::string("{" |
226 " \"Certificates\": [" | 480 " \"Certificates\": [") + |
227 " {" | 481 std::string(kCertificateWebAuthority) + std::string( |
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 " }" | |
251 " ]," | 482 " ]," |
252 "}"); | 483 "}")); |
253 OncNetworkParser parser(test_blob); | 484 OncNetworkParser parser(test_blob); |
254 | 485 |
255 EXPECT_EQ(1, parser.GetCertificatesSize()); | 486 EXPECT_EQ(1, parser.GetCertificatesSize()); |
256 EXPECT_TRUE(parser.ParseCertificate(0)); | 487 EXPECT_TRUE(parser.ParseCertificate(0)); |
257 } | 488 } |
258 | 489 |
259 TEST_F(OncNetworkParserTest, TestAddClientCertificate) { | 490 TEST_F(OncNetworkParserTest, TestAddClientCertificate) { |
260 std::string test_blob( | 491 std::string test_blob( |
261 "{" | 492 "{" |
262 " \"Certificates\": [" | 493 " \"Certificates\": [" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 "AQU1M+0WRDkoVGbGg1jj7q2fI67qHIECBzRYESpgt5iAgIIAA==\"" | 528 "AQU1M+0WRDkoVGbGg1jj7q2fI67qHIECBzRYESpgt5iAgIIAA==\"" |
298 " }" | 529 " }" |
299 " ]," | 530 " ]," |
300 "}"); | 531 "}"); |
301 OncNetworkParser parser(test_blob); | 532 OncNetworkParser parser(test_blob); |
302 | 533 |
303 EXPECT_EQ(1, parser.GetCertificatesSize()); | 534 EXPECT_EQ(1, parser.GetCertificatesSize()); |
304 EXPECT_TRUE(parser.ParseCertificate(0)); | 535 EXPECT_TRUE(parser.ParseCertificate(0)); |
305 } | 536 } |
306 | 537 |
| 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 Network* network = parser.ParseNetwork(0); |
| 555 ASSERT_TRUE(network != NULL); |
| 556 EXPECT_EQ(network->type(), chromeos::TYPE_VPN); |
| 557 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network); |
| 558 EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type()); |
| 559 } |
| 560 |
307 } // namespace chromeos | 561 } // namespace chromeos |
OLD | NEW |