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

Unified Diff: chrome/browser/chromeos/cros/onc_network_parser_unittest.cc

Issue 8759014: Add ONC VPN support for OpenVPN and L2TP/IPsec VPNs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/cros/onc_network_parser_unittest.cc
===================================================================
--- chrome/browser/chromeos/cros/onc_network_parser_unittest.cc (revision 112277)
+++ chrome/browser/chromeos/cros/onc_network_parser_unittest.cc (working copy)
@@ -16,9 +16,93 @@
#include "net/base/crypto_module.h"
#include "net/base/x509_certificate.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
namespace chromeos {
+const char kNetworkConfigurationOpenVPN[] =
+ " {"
+ " \"GUID\": \"{408290ea-9299-4757-ab04-8957d55f0f13}\","
+ " \"Type\": \"VPN\","
+ " \"Name\": \"MyVPN\","
+ " \"VPN\": {"
+ " \"Host\": \"vpn.acme.org\","
+ " \"Type\": \"OpenVPN\","
+ " \"OpenVPN\": {"
+ " \"AuthRetry\": \"interact\","
+ " \"CompLZO\": \"true\","
+ " \"KeyDirection\": \"1\","
+ " \"Port\": 443,"
+ " \"Proto\": \"udp\","
+ " \"PushPeerInfo\": true,"
+ " \"RemoteCertEKU\": \"TLS Web Server Authentication\","
+ " \"RemoteCertKU\": ["
+ " \"eo\""
+ " ],"
+ " \"RemoteCertTLS\": \"server\","
+ " \"RenegSec\": 0,"
+ " \"ServerPollTimeout\": 10,"
+ " \"StaticChallenge\": \"My static challenge\","
+ " \"TLSAuthContents\": \""
+ "-----BEGIN OpenVPN Static key V1-----\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+ "END OpenVPN Static key V1-----\n\","
+ " \"TLSRemote\": \"MyOpenVPNServer\","
+ " \"SaveCredentials\": false,"
+ " \"ServerCARef\": \"{55ca78f6-0842-4e1b-96a3-09a9e1a26ef5}\","
+ " \"ClientCertType\": \"Pattern\","
+ " \"ClientCertPattern\": {"
+ " \"IssuerRef\": \"{68a2ed90-13a1-4120-a1fe-282508320e18}\","
+ " \"EnrollmentURI\": ["
+ " \"chrome-extension://abc/keygen-cert.html\""
+ " ]"
+ " },"
+ " }"
+ " }"
+ " }";
+
+const char kCertificateWebAuthority[] =
+ " {"
+ " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ab}\","
+ " \"Type\": \"Authority\","
+ " \"Trust\": [\"Web\"],"
+ " \"X509\": \"MIIDojCCAwugAwIBAgIJAKGvi5ZgEWDVMA0GCSqGSIb3D"
+ "QEBBAUAMIGTMRUwEwYDVQQKEwxHb29nbGUsIEluYy4xETAPBgNVBAsTCENocm9tZU9TMS"
+ "IwIAYJKoZIhvcNAQkBFhNnc3BlbmNlckBnb29nbGUuY29tMRowGAYDVQQHExFNb3VudGF"
+ "pbiBWaWV3LCBDQTELMAkGA1UECBMCQ0ExCzAJBgNVBAYTAlVTMQ0wCwYDVQQDEwRsbWFv"
+ "MB4XDTExMDMxNjIzNDcxMFoXDTEyMDMxNTIzNDcxMFowgZMxFTATBgNVBAoTDEdvb2dsZ"
+ "SwgSW5jLjERMA8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQG"
+ "dvb2dsZS5jb20xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTE"
+ "LMAkGA1UEBhMCVVMxDTALBgNVBAMTBGxtYW8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ"
+ "AoGBAMDX6BQz2JUzIAVjetiXxDznd2wdqVqVHfNkbSRW+xBywgqUaIXmFEGUol7VzPfme"
+ "FV8o8ok/eFlQB0h6ycqgwwMd0KjtJs2ys/k0F5GuN0G7fsgr+NRnhVgxj21yF6gYTN/8a"
+ "9kscla/svdmp8ekexbALFnghbLBx3CgcqUxT+tAgMBAAGjgfswgfgwDAYDVR0TBAUwAwE"
+ "B/zAdBgNVHQ4EFgQUbYygbSkl4kpjCNuxoezFGupA97UwgcgGA1UdIwSBwDCBvYAUbYyg"
+ "bSkl4kpjCNuxoezFGupA97WhgZmkgZYwgZMxFTATBgNVBAoTDEdvb2dsZSwgSW5jLjERM"
+ "A8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQGdvb2dsZS5jb2"
+ "0xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTELMAkGA1UEBhM"
+ "CVVMxDTALBgNVBAMTBGxtYW+CCQChr4uWYBFg1TANBgkqhkiG9w0BAQQFAAOBgQCDq9wi"
+ "Q4uVuf1CQU3sXfXCy1yqi5m8AsO9FxHvah5/SVFNwKllqTfedpCaWEswJ55YAojW9e+pY"
+ "2Fh3Fo/Y9YkF88KCtLuBjjqDKCRLxF4LycjHODKyQQ7mN/t5AtP9yKOsNvWF+M4IfReg5"
+ "1kohau6FauQx87by5NIRPdkNPvkQ==\""
+ " }";
+
+
class OncNetworkParserTest : public testing::Test {
public:
static void SetUpTestCase() {
@@ -52,6 +136,16 @@
EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size());
}
+ const base::Value* GetExpectedProperty(const Network* network,
+ PropertyIndex index,
+ base::Value::Type expected_type);
+ void CheckStringProperty(const Network* network,
+ PropertyIndex index,
+ const char* expected);
+ void CheckBooleanProperty(const Network* network,
+ PropertyIndex index,
+ bool expected);
+
protected:
scoped_refptr<net::CryptoModule> slot_;
net::CertDatabase cert_db_;
@@ -86,6 +180,48 @@
static base::LazyInstance<ScopedTempDir> temp_db_dir_;
};
+const base::Value* OncNetworkParserTest::GetExpectedProperty(
+ const Network* network,
+ PropertyIndex index,
+ base::Value::Type expected_type) {
+ const base::Value* value;
+ if (!network->GetProperty(index, &value)) {
+ ADD_FAILURE() << "Property " << index << " does not exist";
+ return NULL;
+ }
+ if (!value->IsType(expected_type)) {
+ ADD_FAILURE() << "Property " << index << " expected type "
+ << expected_type << " actual type "
+ << value->GetType();
+ return NULL;
+ }
+ return value;
+}
+
+void OncNetworkParserTest::CheckStringProperty(const Network* network,
+ PropertyIndex index,
+ const char* expected) {
+ const base::Value* value =
+ GetExpectedProperty(network, index, base::Value::TYPE_STRING);
+ if (!value)
+ return;
+ std::string string_value;
+ value->GetAsString(&string_value);
+ EXPECT_EQ(expected, string_value);
+}
+
+void OncNetworkParserTest::CheckBooleanProperty(const Network* network,
+ PropertyIndex index,
+ bool expected) {
+ const base::Value* value =
+ GetExpectedProperty(network, index, base::Value::TYPE_BOOLEAN);
+ if (!value)
+ return;
+ bool bool_value = false;
+ value->GetAsBoolean(&bool_value);
+ EXPECT_EQ(expected, bool_value);
+}
+
// static
base::LazyInstance<ScopedTempDir> OncNetworkParserTest::temp_db_dir_ =
LAZY_INSTANCE_INITIALIZER;
@@ -97,7 +233,7 @@
" \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
" \"Type\": \"WiFi\","
" \"WiFi\": {"
- " \"Security\": \"WEP\","
+ " \"Security\": \"WEP-PSK\","
" \"SSID\": \"ssid\","
" \"Passphrase\": \"pass\","
" }"
@@ -114,9 +250,12 @@
EXPECT_EQ(network->type(), chromeos::TYPE_WIFI);
WifiNetwork* wifi = static_cast<WifiNetwork*>(network);
EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_WEP);
+ CheckStringProperty(wifi, PROPERTY_INDEX_SECURITY, flimflam::kSecurityWep);
EXPECT_EQ(wifi->name(), "ssid");
+ CheckStringProperty(wifi, PROPERTY_INDEX_SSID, "ssid");
EXPECT_EQ(wifi->auto_connect(), false);
EXPECT_EQ(wifi->passphrase(), "pass");
+ CheckStringProperty(wifi, PROPERTY_INDEX_PASSPHRASE, "pass");
}
TEST_F(OncNetworkParserTest, TestCreateNetworkWifiEAP1) {
@@ -126,7 +265,7 @@
" \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
" \"Type\": \"WiFi\","
" \"WiFi\": {"
- " \"Security\": \"WPA2\","
+ " \"Security\": \"WPA-EAP\","
" \"SSID\": \"ssid\","
" \"AutoConnect\": true,"
" \"EAP\": {"
@@ -147,9 +286,13 @@
EXPECT_EQ(network->type(), chromeos::TYPE_WIFI);
WifiNetwork* wifi = static_cast<WifiNetwork*>(network);
EXPECT_EQ(wifi->encryption(), chromeos::SECURITY_8021X);
+ CheckStringProperty(wifi, PROPERTY_INDEX_SECURITY, flimflam::kSecurity8021x);
EXPECT_EQ(wifi->name(), "ssid");
EXPECT_EQ(wifi->auto_connect(), true);
+ CheckBooleanProperty(wifi, PROPERTY_INDEX_AUTO_CONNECT, true);
EXPECT_EQ(wifi->eap_method(), EAP_METHOD_PEAP);
+ CheckStringProperty(wifi, PROPERTY_INDEX_EAP_METHOD,
+ flimflam::kEapMethodPEAP);
EXPECT_EQ(wifi->eap_use_system_cas(), false);
}
@@ -160,7 +303,7 @@
" \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\","
" \"Type\": \"WiFi\","
" \"WiFi\": {"
- " \"Security\": \"WPA2\","
+ " \"Security\": \"WPA-EAP\","
" \"SSID\": \"ssid\","
" \"AutoConnect\": false,"
" \"EAP\": {"
@@ -188,10 +331,118 @@
EXPECT_EQ(wifi->eap_method(), EAP_METHOD_LEAP);
EXPECT_EQ(wifi->eap_use_system_cas(), true);
EXPECT_EQ(wifi->eap_identity(), "user");
+ CheckStringProperty(wifi, PROPERTY_INDEX_EAP_IDENTITY, "user");
EXPECT_EQ(wifi->eap_passphrase(), "pass");
+ CheckStringProperty(wifi, PROPERTY_INDEX_EAP_PASSWORD, "pass");
EXPECT_EQ(wifi->eap_anonymous_identity(), "anon");
+ CheckStringProperty(wifi, PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY, "anon");
}
+TEST_F(OncNetworkParserTest, TestCreateNetworkOpenVPN) {
+ std::string test_blob(std::string(
+ "{"
+ " \"NetworkConfigurations\": [") +
+ std::string(kNetworkConfigurationOpenVPN) + std::string(
+ " ]}"));
+ OncNetworkParser parser(test_blob);
+
+ EXPECT_EQ(1, parser.GetNetworkConfigsSize());
+ EXPECT_EQ(0, parser.GetCertificatesSize());
+ Network* network = parser.ParseNetwork(0);
+ ASSERT_TRUE(network != NULL);
+
+ EXPECT_EQ(network->type(), chromeos::TYPE_VPN);
+ CheckStringProperty(network, PROPERTY_INDEX_TYPE, flimflam::kTypeVPN);
+ VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network);
+ EXPECT_EQ("MyVPN", vpn->name());
+ EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type());
+ CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_TYPE,
+ flimflam::kProviderOpenVpn);
+ EXPECT_EQ("vpn.acme.org", vpn->server_hostname());
+ CheckStringProperty(vpn, PROPERTY_INDEX_HOST, "vpn.acme.org");
+ CheckStringProperty(vpn, PROPERTY_INDEX_VPN_DOMAIN, "");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_AUTHRETRY, "interact");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_CACERT,
+ "{55ca78f6-0842-4e1b-96a3-09a9e1a26ef5}");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_COMPLZO, "true");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_KEYDIRECTION, "1");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_PORT, "443");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_PROTO, "udp");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_PUSHPEERINFO, "true");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_REMOTECERTEKU,
+ "TLS Web Server Authentication");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_REMOTECERTKU, "eo");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_REMOTECERTTLS, "server");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_RENEGSEC, "0");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_SERVERPOLLTIMEOUT, "10");
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_STATICCHALLENGE,
+ "My static challenge");
+
+ std::string tls_auth_contents;
+ const Value* tls_auth_value =
+ GetExpectedProperty(vpn, PROPERTY_INDEX_OPEN_VPN_TLSAUTHCONTENTS,
+ base::Value::TYPE_STRING);
+ if (tls_auth_value != NULL) {
+ tls_auth_value->GetAsString(&tls_auth_contents);
+ EXPECT_NE(std::string::npos,
+ tls_auth_contents.find("END OpenVPN Static key V1-----\n"));
+ EXPECT_NE(std::string::npos,
+ tls_auth_contents.find(
+ "-----BEGIN OpenVPN Static key V1-----\n"));
+ }
+ CheckStringProperty(vpn, PROPERTY_INDEX_OPEN_VPN_TLSREMOTE,
+ "MyOpenVPNServer");
+ EXPECT_FALSE(vpn->save_credentials());
+ EXPECT_EQ("{55ca78f6-0842-4e1b-96a3-09a9e1a26ef5}", vpn->ca_cert_nss());
+}
+
+TEST_F(OncNetworkParserTest, TestCreateNetworkL2TPIPsec) {
+ std::string test_blob(
+ "{"
+ " \"NetworkConfigurations\": ["
+ " {"
+ " \"GUID\": \"{926b84e4-f2c5-0972-b9bbb8f44c4316f5}\","
+ " \"Name\": \"MyL2TPVPN\","
+ " \"Type\": \"VPN\","
+ " \"VPN\": {"
+ " \"Host\": \"l2tp.acme.org\","
+ " \"Type\": \"L2TP-IPsec\","
+ " \"IPsec\": {"
+ " \"IKEVersion\": 1,"
+ " \"AuthenticationType\": \"PSK\","
+ " \"PSK\": \"passphrase\""
+ " },"
+ " \"L2TP\": {"
+ " \"SaveCredentials\": false"
+ " }"
+ " }"
+ " }"
+ " ],"
+ " \"Certificates\": []"
+ "}");
+ OncNetworkParser parser(test_blob);
+
+ EXPECT_EQ(1, parser.GetNetworkConfigsSize());
+ EXPECT_EQ(0, parser.GetCertificatesSize());
+ Network* network = parser.ParseNetwork(0);
+ ASSERT_TRUE(network != NULL);
+
+ EXPECT_EQ(network->type(), chromeos::TYPE_VPN);
+ CheckStringProperty(network, PROPERTY_INDEX_TYPE, flimflam::kTypeVPN);
+ VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network);
+ EXPECT_EQ("MyL2TPVPN", vpn->name());
+ EXPECT_EQ(PROVIDER_TYPE_L2TP_IPSEC_PSK, vpn->provider_type());
+ CheckStringProperty(vpn, PROPERTY_INDEX_PROVIDER_TYPE,
+ flimflam::kProviderL2tpIpsec);
+ EXPECT_EQ("l2tp.acme.org", vpn->server_hostname());
+ CheckStringProperty(vpn, PROPERTY_INDEX_HOST, "l2tp.acme.org");
+ CheckStringProperty(vpn, PROPERTY_INDEX_VPN_DOMAIN, "");
+ EXPECT_EQ("passphrase", vpn->psk_passphrase());
+ CheckStringProperty(vpn, PROPERTY_INDEX_L2TPIPSEC_PSK, "passphrase");
+ CheckStringProperty(vpn, PROPERTY_INDEX_IPSEC_IKEVERSION, "1");
+ EXPECT_FALSE(vpn->save_credentials());
+}
+
TEST_F(OncNetworkParserTest, TestAddServerCertificate) {
std::string test_blob(
"{"
@@ -222,34 +473,11 @@
}
TEST_F(OncNetworkParserTest, TestAddAuthorityCertificate) {
- const std::string test_blob("{"
- " \"Certificates\": ["
- " {"
- " \"GUID\": \"{f998f760-272b-6939-4c2beffe428697ab}\","
- " \"Type\": \"Authority\","
- " \"Trust\": [\"Web\"],"
- " \"X509\": \"MIIDojCCAwugAwIBAgIJAKGvi5ZgEWDVMA0GCSqGSIb3D"
- "QEBBAUAMIGTMRUwEwYDVQQKEwxHb29nbGUsIEluYy4xETAPBgNVBAsTCENocm9tZU9TMS"
- "IwIAYJKoZIhvcNAQkBFhNnc3BlbmNlckBnb29nbGUuY29tMRowGAYDVQQHExFNb3VudGF"
- "pbiBWaWV3LCBDQTELMAkGA1UECBMCQ0ExCzAJBgNVBAYTAlVTMQ0wCwYDVQQDEwRsbWFv"
- "MB4XDTExMDMxNjIzNDcxMFoXDTEyMDMxNTIzNDcxMFowgZMxFTATBgNVBAoTDEdvb2dsZ"
- "SwgSW5jLjERMA8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQG"
- "dvb2dsZS5jb20xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTE"
- "LMAkGA1UEBhMCVVMxDTALBgNVBAMTBGxtYW8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ"
- "AoGBAMDX6BQz2JUzIAVjetiXxDznd2wdqVqVHfNkbSRW+xBywgqUaIXmFEGUol7VzPfme"
- "FV8o8ok/eFlQB0h6ycqgwwMd0KjtJs2ys/k0F5GuN0G7fsgr+NRnhVgxj21yF6gYTN/8a"
- "9kscla/svdmp8ekexbALFnghbLBx3CgcqUxT+tAgMBAAGjgfswgfgwDAYDVR0TBAUwAwE"
- "B/zAdBgNVHQ4EFgQUbYygbSkl4kpjCNuxoezFGupA97UwgcgGA1UdIwSBwDCBvYAUbYyg"
- "bSkl4kpjCNuxoezFGupA97WhgZmkgZYwgZMxFTATBgNVBAoTDEdvb2dsZSwgSW5jLjERM"
- "A8GA1UECxMIQ2hyb21lT1MxIjAgBgkqhkiG9w0BCQEWE2dzcGVuY2VyQGdvb2dsZS5jb2"
- "0xGjAYBgNVBAcTEU1vdW50YWluIFZpZXcsIENBMQswCQYDVQQIEwJDQTELMAkGA1UEBhM"
- "CVVMxDTALBgNVBAMTBGxtYW+CCQChr4uWYBFg1TANBgkqhkiG9w0BAQQFAAOBgQCDq9wi"
- "Q4uVuf1CQU3sXfXCy1yqi5m8AsO9FxHvah5/SVFNwKllqTfedpCaWEswJ55YAojW9e+pY"
- "2Fh3Fo/Y9YkF88KCtLuBjjqDKCRLxF4LycjHODKyQQ7mN/t5AtP9yKOsNvWF+M4IfReg5"
- "1kohau6FauQx87by5NIRPdkNPvkQ==\""
- " }"
+ const std::string test_blob(std::string("{"
+ " \"Certificates\": [") +
+ std::string(kCertificateWebAuthority) + std::string(
" ],"
- "}");
+ "}"));
OncNetworkParser parser(test_blob);
EXPECT_EQ(1, parser.GetCertificatesSize());
@@ -304,4 +532,27 @@
EXPECT_TRUE(parser.ParseCertificate(0));
}
+TEST_F(OncNetworkParserTest, TestNetworkAndCertificate) {
+ std::string test_blob(std::string(
+ "{"
+ " \"NetworkConfigurations\": [") +
+ std::string(kNetworkConfigurationOpenVPN) + std::string(
+ " ],"
+ " \"Certificates\": [") +
+ std::string(kCertificateWebAuthority) + std::string(
+ " ],"
+ "}"));
+ OncNetworkParser parser(test_blob);
+
+ EXPECT_EQ(1, parser.GetCertificatesSize());
+ EXPECT_TRUE(parser.ParseCertificate(0));
+
+ EXPECT_EQ(1, parser.GetNetworkConfigsSize());
+ Network* network = parser.ParseNetwork(0);
+ ASSERT_TRUE(network != NULL);
+ EXPECT_EQ(network->type(), chromeos::TYPE_VPN);
+ VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network);
+ EXPECT_EQ(PROVIDER_TYPE_OPEN_VPN, vpn->provider_type());
+}
+
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698