Index: net/http/http_auth_multi_round_parse_unittest.cc |
diff --git a/net/http/http_auth_multi_round_parse_unittest.cc b/net/http/http_auth_multi_round_parse_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1be5ad1f5dcfa84fe7dc0b5c851dd0e3e7d72337 |
--- /dev/null |
+++ b/net/http/http_auth_multi_round_parse_unittest.cc |
@@ -0,0 +1,78 @@ |
+// 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 "net/http/http_auth_challenge_tokenizer.h" |
+#include "net/http/http_auth_multi_round_parse.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace net { |
+ |
+TEST(HttpAuthHandlerNegotiateParseTest, ParseFirstRoundChallenge) { |
+ // The first round should just consist of an unadorned header with the scheme |
+ // name. |
+ std::string challenge_text = "DummyScheme"; |
+ HttpAuthChallengeTokenizer challenge(challenge_text.begin(), |
+ challenge_text.end()); |
+ EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT, |
+ ParseFirstRoundChallenge("dummyscheme", &challenge)); |
+} |
+ |
+TEST(HttpAuthHandlerNegotiateParseTest, |
+ ParseFirstNegotiateChallenge_UnexpectedToken) { |
+ // If the first round challenge has an additional authentication token, it |
+ // should be treated as an invalid challenge from the server. |
+ std::string challenge_text = "Negotiate Zm9vYmFy"; |
+ HttpAuthChallengeTokenizer challenge(challenge_text.begin(), |
+ challenge_text.end()); |
+ EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_INVALID, |
+ ParseFirstRoundChallenge("negotiate", &challenge)); |
+} |
+ |
+TEST(HttpAuthHandlerNegotiateParseTest, |
+ ParseFirstNegotiateChallenge_BadScheme) { |
+ std::string challenge_text = "DummyScheme"; |
+ HttpAuthChallengeTokenizer challenge(challenge_text.begin(), |
+ challenge_text.end()); |
+ EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_INVALID, |
+ ParseFirstRoundChallenge("negotiate", &challenge)); |
+} |
+ |
+TEST(HttpAuthHandlerNegotiateParseTest, ParseLaterRoundChallenge) { |
+ // Later rounds should always have a Base64 encoded token. |
+ std::string challenge_text = "Negotiate Zm9vYmFy"; |
+ HttpAuthChallengeTokenizer challenge(challenge_text.begin(), |
+ challenge_text.end()); |
+ std::string encoded_token; |
+ std::string decoded_token; |
+ EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT, |
+ ParseLaterRoundChallenge("negotiate", &challenge, &encoded_token, |
+ &decoded_token)); |
+ EXPECT_EQ("Zm9vYmFy", encoded_token); |
+ EXPECT_EQ("foobar", decoded_token); |
+} |
+ |
+TEST(HttpAuthHandlerNegotiateParseTest, |
+ ParseAnotherNegotiateChallenge_MissingToken) { |
+ std::string challenge_text = "Negotiate"; |
+ HttpAuthChallengeTokenizer challenge(challenge_text.begin(), |
+ challenge_text.end()); |
+ std::string encoded_token; |
+ std::string decoded_token; |
+ EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_REJECT, |
+ ParseLaterRoundChallenge("negotiate", &challenge, &encoded_token, |
+ &decoded_token)); |
+} |
+ |
+TEST(HttpAuthHandlerNegotiateParseTest, |
+ ParseAnotherNegotiateChallenge_InvalidToken) { |
+ std::string challenge_text = "Negotiate ***"; |
+ HttpAuthChallengeTokenizer challenge(challenge_text.begin(), |
+ challenge_text.end()); |
+ std::string encoded_token; |
+ std::string decoded_token; |
+ EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_INVALID, |
+ ParseLaterRoundChallenge("negotiate", &challenge, &encoded_token, |
+ &decoded_token)); |
+} |
+} |