Index: remoting/host/third_party_auth_config_unittest.cc |
diff --git a/remoting/host/third_party_auth_config_unittest.cc b/remoting/host/third_party_auth_config_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..431bf6b87e540f4b04273945dae353e4a3cbf148 |
--- /dev/null |
+++ b/remoting/host/third_party_auth_config_unittest.cc |
@@ -0,0 +1,170 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "remoting/host/third_party_auth_config.h" |
+ |
+#include <sstream> |
+ |
+#include "base/values.h" |
+#include "policy/policy_constants.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace remoting { |
+ |
+namespace key = ::policy::key; |
+ |
+TEST(ThirdPartyAuthConfig, ParseEmpty) { |
+ ThirdPartyAuthConfig third_party_auth_config; |
+ |
+ EXPECT_TRUE( |
+ ThirdPartyAuthConfig::Parse("", "", "", &third_party_auth_config)); |
+ EXPECT_TRUE(third_party_auth_config.is_null()); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, ParseValidAll) { |
+ ThirdPartyAuthConfig third_party_auth_config; |
+ |
+ EXPECT_TRUE(ThirdPartyAuthConfig::Parse( |
+ "https://token.com/", "https://validation.com/", "certificate subject", |
+ &third_party_auth_config)); |
+ EXPECT_FALSE(third_party_auth_config.is_null()); |
+ EXPECT_EQ("https://token.com/", third_party_auth_config.token_url.spec()); |
+ EXPECT_EQ("https://validation.com/", |
+ third_party_auth_config.token_validation_url.spec()); |
+ EXPECT_EQ("certificate subject", |
+ third_party_auth_config.token_validation_cert_issuer); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, ParseValidNoCert) { |
+ ThirdPartyAuthConfig third_party_auth_config; |
+ |
+ EXPECT_TRUE(ThirdPartyAuthConfig::Parse("https://token.com/", |
+ "https://validation.com/", "", |
+ &third_party_auth_config)); |
+ EXPECT_FALSE(third_party_auth_config.is_null()); |
+ EXPECT_EQ("https://token.com/", third_party_auth_config.token_url.spec()); |
+ EXPECT_EQ("https://validation.com/", |
+ third_party_auth_config.token_validation_url.spec()); |
+ EXPECT_EQ("", third_party_auth_config.token_validation_cert_issuer); |
+} |
+ |
+namespace { |
+ |
+const std::string valid_url("https://valid.com"); |
+const std::string valid_cert("certificate subject"); |
+ |
+} // namespace |
+ |
+class InvalidUrlTest : public ::testing::TestWithParam<const char*> {}; |
+ |
+TEST_P(InvalidUrlTest, ParseInvalidUrl) { |
+ const std::string& invalid_url(GetParam()); |
+ |
+ // Populate |config| with some known data - we will use this for validating |
+ // that |config| doesn't get modified by Parse during subsequent parsing |
+ // failure tests. |
+ ThirdPartyAuthConfig config; |
+ EXPECT_TRUE(ThirdPartyAuthConfig::Parse("https://token.com/", |
+ "https://validation.com/", |
+ "certificate subject", &config)); |
+ |
+ // Test for parsing failure. |
+ EXPECT_FALSE( |
+ ThirdPartyAuthConfig::Parse(invalid_url, valid_url, valid_cert, &config)); |
+ EXPECT_FALSE( |
+ ThirdPartyAuthConfig::Parse(valid_url, invalid_url, valid_cert, &config)); |
+ EXPECT_FALSE(ThirdPartyAuthConfig::Parse(invalid_url, "", "", &config)); |
+ EXPECT_FALSE(ThirdPartyAuthConfig::Parse("", invalid_url, "", &config)); |
+ |
+ // Validate that Parse doesn't modify its output upon parsing failure. |
+ EXPECT_EQ("https://token.com/", config.token_url.spec()); |
+ EXPECT_EQ("https://validation.com/", config.token_validation_url.spec()); |
+ EXPECT_EQ("certificate subject", config.token_validation_cert_issuer); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(ThirdPartyAuthConfig, |
+ InvalidUrlTest, |
+ ::testing::Values("http://insecure.com", |
+ "I am not a URL")); |
+ |
+TEST(ThirdPartyAuthConfig, ParseInvalidCombination) { |
+ // Populate |config| with some known data - we will use this for validating |
+ // that |config| doesn't get modified by Parse during subsequent parsing |
+ // failure tests. |
+ ThirdPartyAuthConfig config; |
+ EXPECT_TRUE(ThirdPartyAuthConfig::Parse("https://token.com/", |
+ "https://validation.com/", |
+ "certificate subject", &config)); |
+ |
+ // Only one of TokenUrl and TokenValidationUrl |
+ EXPECT_FALSE(ThirdPartyAuthConfig::Parse("", valid_url, valid_cert, &config)); |
+ EXPECT_FALSE(ThirdPartyAuthConfig::Parse(valid_url, "", valid_cert, &config)); |
+ |
+ // CertSubject when no TokenUrl and TokenValidationUrl |
+ EXPECT_FALSE(ThirdPartyAuthConfig::Parse("", "", valid_cert, &config)); |
+ |
+ // Validate that Parse doesn't modify its output upon parsing failure. |
+ EXPECT_EQ("https://token.com/", config.token_url.spec()); |
+ EXPECT_EQ("https://validation.com/", config.token_validation_url.spec()); |
+ EXPECT_EQ("certificate subject", config.token_validation_cert_issuer); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, ExtractEmpty) { |
+ base::DictionaryValue dict; |
+ std::string url1, url2, cert; |
+ EXPECT_FALSE( |
+ ThirdPartyAuthConfig::ExtractPolicyValues(dict, &url1, &url2, &cert)); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, ExtractUnknown) { |
+ base::DictionaryValue dict; |
+ dict.SetString("unknownName", "someValue"); |
+ |
+ std::string url1, url2, cert; |
+ EXPECT_FALSE( |
+ ThirdPartyAuthConfig::ExtractPolicyValues(dict, &url1, &url2, &cert)); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, ExtractAll) { |
+ base::DictionaryValue dict; |
+ dict.SetString(key::kRemoteAccessHostTokenUrl, "test1"); |
+ dict.SetString(key::kRemoteAccessHostTokenValidationUrl, "test2"); |
+ dict.SetString(key::kRemoteAccessHostTokenValidationCertificateIssuer, "t3"); |
+ |
+ std::string url1, url2, cert; |
+ EXPECT_TRUE( |
+ ThirdPartyAuthConfig::ExtractPolicyValues(dict, &url1, &url2, &cert)); |
+ EXPECT_EQ("test1", url1); |
+ EXPECT_EQ("test2", url2); |
+ EXPECT_EQ("t3", cert); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, ExtractPartial) { |
+ base::DictionaryValue dict; |
+ dict.SetString(key::kRemoteAccessHostTokenValidationUrl, "test2"); |
+ |
+ std::string url1, url2, cert; |
+ EXPECT_TRUE( |
+ ThirdPartyAuthConfig::ExtractPolicyValues(dict, &url1, &url2, &cert)); |
+ EXPECT_EQ("", url1); |
+ EXPECT_EQ("test2", url2); |
+ EXPECT_EQ("", cert); |
+} |
+ |
+TEST(ThirdPartyAuthConfig, Output) { |
+ ThirdPartyAuthConfig third_party_auth_config; |
+ third_party_auth_config.token_url = GURL("https://token.com"); |
+ third_party_auth_config.token_validation_url = GURL("https://validation.com"); |
+ third_party_auth_config.token_validation_cert_issuer = "certificate subject"; |
+ |
+ std::ostringstream str; |
+ str << third_party_auth_config; |
+ |
+ EXPECT_THAT(str.str(), testing::HasSubstr("token")); |
+ EXPECT_THAT(str.str(), testing::HasSubstr("validation")); |
+ EXPECT_THAT(str.str(), testing::HasSubstr("certificate subject")); |
+} |
+ |
+} // namespace remoting |