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 |