1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/http/http_auth_challenge_tokenizer.h"
6 #include "net/http/http_auth_multi_round_parse.h"
7 #include "testing/gtest/include/gtest/gtest.h"
11 TEST(HttpAuthHandlerNegotiateParseTest
, ParseFirstRoundChallenge
) {
12 // The first round should just consist of an unadorned header with the scheme
14 std::string challenge_text
= "DummyScheme";
15 HttpAuthChallengeTokenizer
challenge(challenge_text
.begin(),
16 challenge_text
.end());
17 EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT
,
18 ParseFirstRoundChallenge("dummyscheme", &challenge
));
21 TEST(HttpAuthHandlerNegotiateParseTest
,
22 ParseFirstNegotiateChallenge_UnexpectedToken
) {
23 // If the first round challenge has an additional authentication token, it
24 // should be treated as an invalid challenge from the server.
25 std::string challenge_text
= "Negotiate Zm9vYmFy";
26 HttpAuthChallengeTokenizer
challenge(challenge_text
.begin(),
27 challenge_text
.end());
28 EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_INVALID
,
29 ParseFirstRoundChallenge("negotiate", &challenge
));
32 TEST(HttpAuthHandlerNegotiateParseTest
,
33 ParseFirstNegotiateChallenge_BadScheme
) {
34 std::string challenge_text
= "DummyScheme";
35 HttpAuthChallengeTokenizer
challenge(challenge_text
.begin(),
36 challenge_text
.end());
37 EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_INVALID
,
38 ParseFirstRoundChallenge("negotiate", &challenge
));
41 TEST(HttpAuthHandlerNegotiateParseTest
, ParseLaterRoundChallenge
) {
42 // Later rounds should always have a Base64 encoded token.
43 std::string challenge_text
= "Negotiate Zm9vYmFy";
44 HttpAuthChallengeTokenizer
challenge(challenge_text
.begin(),
45 challenge_text
.end());
46 std::string encoded_token
;
47 std::string decoded_token
;
48 EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_ACCEPT
,
49 ParseLaterRoundChallenge("negotiate", &challenge
, &encoded_token
,
51 EXPECT_EQ("Zm9vYmFy", encoded_token
);
52 EXPECT_EQ("foobar", decoded_token
);
55 TEST(HttpAuthHandlerNegotiateParseTest
,
56 ParseAnotherNegotiateChallenge_MissingToken
) {
57 std::string challenge_text
= "Negotiate";
58 HttpAuthChallengeTokenizer
challenge(challenge_text
.begin(),
59 challenge_text
.end());
60 std::string encoded_token
;
61 std::string decoded_token
;
62 EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_REJECT
,
63 ParseLaterRoundChallenge("negotiate", &challenge
, &encoded_token
,
67 TEST(HttpAuthHandlerNegotiateParseTest
,
68 ParseAnotherNegotiateChallenge_InvalidToken
) {
69 std::string challenge_text
= "Negotiate ***";
70 HttpAuthChallengeTokenizer
challenge(challenge_text
.begin(),
71 challenge_text
.end());
72 std::string encoded_token
;
73 std::string decoded_token
;
74 EXPECT_EQ(HttpAuth::AUTHORIZATION_RESULT_INVALID
,
75 ParseLaterRoundChallenge("negotiate", &challenge
, &encoded_token
,