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

Side by Side Diff: net/http/http_auth_challenge_tokenizer_unittest.cc

Issue 1157333005: [net/http auth] Use strings to identify authentication schemes. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « net/http/http_auth_challenge_tokenizer.cc ('k') | net/http/http_auth_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "net/http/http_auth_challenge_tokenizer.h" 5 #include "net/http/http_auth_challenge_tokenizer.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 7
8 namespace net { 8 namespace net {
9 9
10 TEST(HttpAuthChallengeTokenizerTest, Basic) { 10 TEST(HttpAuthChallengeTokenizerTest, Basic) {
11 std::string challenge_str = "Basic realm=\"foobar\""; 11 std::string challenge_str = "Basic realm=\"foobar\"";
12 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 12 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
13 challenge_str.end()); 13 challenge_str.end());
14 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 14 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
15 15
16 EXPECT_TRUE(parameters.valid()); 16 EXPECT_TRUE(parameters.valid());
17 EXPECT_EQ(std::string("Basic"), challenge.scheme()); 17 EXPECT_EQ(std::string("basic"), challenge.NormalizedScheme());
18 EXPECT_TRUE(parameters.GetNext()); 18 EXPECT_TRUE(parameters.GetNext());
19 EXPECT_TRUE(parameters.valid()); 19 EXPECT_TRUE(parameters.valid());
20 EXPECT_EQ(std::string("realm"), parameters.name()); 20 EXPECT_EQ(std::string("realm"), parameters.name());
21 EXPECT_EQ(std::string("foobar"), parameters.value()); 21 EXPECT_EQ(std::string("foobar"), parameters.value());
22 EXPECT_FALSE(parameters.GetNext()); 22 EXPECT_FALSE(parameters.GetNext());
23 } 23 }
24 24
25 // Use a name=value property with no quote marks. 25 // Use a name=value property with no quote marks.
26 TEST(HttpAuthChallengeTokenizerTest, NoQuotes) { 26 TEST(HttpAuthChallengeTokenizerTest, NoQuotes) {
27 std::string challenge_str = "Basic realm=foobar@baz.com"; 27 std::string challenge_str = "Basic realm=foobar@baz.com";
28 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 28 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
29 challenge_str.end()); 29 challenge_str.end());
30 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 30 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
31 31
32 EXPECT_TRUE(parameters.valid()); 32 EXPECT_TRUE(parameters.valid());
33 EXPECT_EQ(std::string("Basic"), challenge.scheme()); 33 EXPECT_EQ(std::string("basic"), challenge.NormalizedScheme());
34 EXPECT_TRUE(parameters.GetNext()); 34 EXPECT_TRUE(parameters.GetNext());
35 EXPECT_TRUE(parameters.valid()); 35 EXPECT_TRUE(parameters.valid());
36 EXPECT_EQ(std::string("realm"), parameters.name()); 36 EXPECT_EQ(std::string("realm"), parameters.name());
37 EXPECT_EQ(std::string("foobar@baz.com"), parameters.value()); 37 EXPECT_EQ(std::string("foobar@baz.com"), parameters.value());
38 EXPECT_FALSE(parameters.GetNext()); 38 EXPECT_FALSE(parameters.GetNext());
39 } 39 }
40 40
41 // Use a name=value property with mismatching quote marks. 41 // Use a name=value property with mismatching quote marks.
42 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotes) { 42 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotes) {
43 std::string challenge_str = "Basic realm=\"foobar@baz.com"; 43 std::string challenge_str = "Basic realm=\"foobar@baz.com";
44 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 44 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
45 challenge_str.end()); 45 challenge_str.end());
46 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 46 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
47 47
48 EXPECT_TRUE(parameters.valid()); 48 EXPECT_TRUE(parameters.valid());
49 EXPECT_EQ(std::string("Basic"), challenge.scheme()); 49 EXPECT_EQ(std::string("basic"), challenge.NormalizedScheme());
50 EXPECT_TRUE(parameters.GetNext()); 50 EXPECT_TRUE(parameters.GetNext());
51 EXPECT_TRUE(parameters.valid()); 51 EXPECT_TRUE(parameters.valid());
52 EXPECT_EQ(std::string("realm"), parameters.name()); 52 EXPECT_EQ(std::string("realm"), parameters.name());
53 EXPECT_EQ(std::string("foobar@baz.com"), parameters.value()); 53 EXPECT_EQ(std::string("foobar@baz.com"), parameters.value());
54 EXPECT_FALSE(parameters.GetNext()); 54 EXPECT_FALSE(parameters.GetNext());
55 } 55 }
56 56
57 // Use a name= property without a value and with mismatching quote marks. 57 // Use a name= property without a value and with mismatching quote marks.
58 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesNoValue) { 58 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesNoValue) {
59 std::string challenge_str = "Basic realm=\""; 59 std::string challenge_str = "Basic realm=\"";
60 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 60 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
61 challenge_str.end()); 61 challenge_str.end());
62 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 62 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
63 63
64 EXPECT_TRUE(parameters.valid()); 64 EXPECT_TRUE(parameters.valid());
65 EXPECT_EQ(std::string("Basic"), challenge.scheme()); 65 EXPECT_EQ(std::string("basic"), challenge.NormalizedScheme());
66 EXPECT_TRUE(parameters.GetNext()); 66 EXPECT_TRUE(parameters.GetNext());
67 EXPECT_TRUE(parameters.valid()); 67 EXPECT_TRUE(parameters.valid());
68 EXPECT_EQ(std::string("realm"), parameters.name()); 68 EXPECT_EQ(std::string("realm"), parameters.name());
69 EXPECT_EQ(std::string(), parameters.value()); 69 EXPECT_EQ(std::string(), parameters.value());
70 EXPECT_FALSE(parameters.GetNext()); 70 EXPECT_FALSE(parameters.GetNext());
71 } 71 }
72 72
73 // Use a name=value property with mismatching quote marks and spaces in the 73 // Use a name=value property with mismatching quote marks and spaces in the
74 // value. 74 // value.
75 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesSpaces) { 75 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesSpaces) {
76 std::string challenge_str = "Basic realm=\"foo bar"; 76 std::string challenge_str = "Basic realm=\"foo bar";
77 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 77 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
78 challenge_str.end()); 78 challenge_str.end());
79 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 79 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
80 80
81 EXPECT_TRUE(parameters.valid()); 81 EXPECT_TRUE(parameters.valid());
82 EXPECT_EQ(std::string("Basic"), challenge.scheme()); 82 EXPECT_EQ(std::string("basic"), challenge.NormalizedScheme());
83 EXPECT_TRUE(parameters.GetNext()); 83 EXPECT_TRUE(parameters.GetNext());
84 EXPECT_TRUE(parameters.valid()); 84 EXPECT_TRUE(parameters.valid());
85 EXPECT_EQ(std::string("realm"), parameters.name()); 85 EXPECT_EQ(std::string("realm"), parameters.name());
86 EXPECT_EQ(std::string("foo bar"), parameters.value()); 86 EXPECT_EQ(std::string("foo bar"), parameters.value());
87 EXPECT_FALSE(parameters.GetNext()); 87 EXPECT_FALSE(parameters.GetNext());
88 } 88 }
89 89
90 // Use multiple name=value properties with mismatching quote marks in the last 90 // Use multiple name=value properties with mismatching quote marks in the last
91 // value. 91 // value.
92 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesMultiple) { 92 TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesMultiple) {
93 std::string challenge_str = "Digest qop=auth-int, algorithm=md5, realm=\"foo"; 93 std::string challenge_str = "Digest qop=auth-int, algorithm=md5, realm=\"foo";
94 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 94 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
95 challenge_str.end()); 95 challenge_str.end());
96 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 96 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
97 97
98 EXPECT_TRUE(parameters.valid()); 98 EXPECT_TRUE(parameters.valid());
99 EXPECT_EQ(std::string("Digest"), challenge.scheme()); 99 EXPECT_EQ(std::string("digest"), challenge.NormalizedScheme());
100 EXPECT_TRUE(parameters.GetNext()); 100 EXPECT_TRUE(parameters.GetNext());
101 EXPECT_TRUE(parameters.valid()); 101 EXPECT_TRUE(parameters.valid());
102 EXPECT_EQ(std::string("qop"), parameters.name()); 102 EXPECT_EQ(std::string("qop"), parameters.name());
103 EXPECT_EQ(std::string("auth-int"), parameters.value()); 103 EXPECT_EQ(std::string("auth-int"), parameters.value());
104 EXPECT_TRUE(parameters.GetNext()); 104 EXPECT_TRUE(parameters.GetNext());
105 EXPECT_TRUE(parameters.valid()); 105 EXPECT_TRUE(parameters.valid());
106 EXPECT_EQ(std::string("algorithm"), parameters.name()); 106 EXPECT_EQ(std::string("algorithm"), parameters.name());
107 EXPECT_EQ(std::string("md5"), parameters.value()); 107 EXPECT_EQ(std::string("md5"), parameters.value());
108 EXPECT_TRUE(parameters.GetNext()); 108 EXPECT_TRUE(parameters.GetNext());
109 EXPECT_TRUE(parameters.valid()); 109 EXPECT_TRUE(parameters.valid());
110 EXPECT_EQ(std::string("realm"), parameters.name()); 110 EXPECT_EQ(std::string("realm"), parameters.name());
111 EXPECT_EQ(std::string("foo"), parameters.value()); 111 EXPECT_EQ(std::string("foo"), parameters.value());
112 EXPECT_FALSE(parameters.GetNext()); 112 EXPECT_FALSE(parameters.GetNext());
113 } 113 }
114 114
115 // Use a name= property which has no value. 115 // Use a name= property which has no value.
116 TEST(HttpAuthChallengeTokenizerTest, NoValue) { 116 TEST(HttpAuthChallengeTokenizerTest, NoValue) {
117 std::string challenge_str = "Digest qop="; 117 std::string challenge_str = "Digest qop=";
118 HttpAuthChallengeTokenizer challenge( 118 HttpAuthChallengeTokenizer challenge(
119 challenge_str.begin(), challenge_str.end()); 119 challenge_str.begin(), challenge_str.end());
120 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 120 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
121 121
122 EXPECT_TRUE(parameters.valid()); 122 EXPECT_TRUE(parameters.valid());
123 EXPECT_EQ(std::string("Digest"), challenge.scheme()); 123 EXPECT_EQ(std::string("digest"), challenge.NormalizedScheme());
124 EXPECT_FALSE(parameters.GetNext()); 124 EXPECT_FALSE(parameters.GetNext());
125 EXPECT_FALSE(parameters.valid()); 125 EXPECT_FALSE(parameters.valid());
126 } 126 }
127 127
128 // Specify multiple properties, comma separated. 128 // Specify multiple properties, comma separated.
129 TEST(HttpAuthChallengeTokenizerTest, Multiple) { 129 TEST(HttpAuthChallengeTokenizerTest, Multiple) {
130 std::string challenge_str = 130 std::string challenge_str =
131 "Digest algorithm=md5, realm=\"Oblivion\", qop=auth-int"; 131 "Digest algorithm=md5, realm=\"Oblivion\", qop=auth-int";
132 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 132 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
133 challenge_str.end()); 133 challenge_str.end());
134 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 134 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
135 135
136 EXPECT_TRUE(parameters.valid()); 136 EXPECT_TRUE(parameters.valid());
137 EXPECT_EQ(std::string("Digest"), challenge.scheme()); 137 EXPECT_EQ(std::string("digest"), challenge.NormalizedScheme());
138 EXPECT_TRUE(parameters.GetNext()); 138 EXPECT_TRUE(parameters.GetNext());
139 EXPECT_TRUE(parameters.valid()); 139 EXPECT_TRUE(parameters.valid());
140 EXPECT_EQ(std::string("algorithm"), parameters.name()); 140 EXPECT_EQ(std::string("algorithm"), parameters.name());
141 EXPECT_EQ(std::string("md5"), parameters.value()); 141 EXPECT_EQ(std::string("md5"), parameters.value());
142 EXPECT_TRUE(parameters.GetNext()); 142 EXPECT_TRUE(parameters.GetNext());
143 EXPECT_TRUE(parameters.valid()); 143 EXPECT_TRUE(parameters.valid());
144 EXPECT_EQ(std::string("realm"), parameters.name()); 144 EXPECT_EQ(std::string("realm"), parameters.name());
145 EXPECT_EQ(std::string("Oblivion"), parameters.value()); 145 EXPECT_EQ(std::string("Oblivion"), parameters.value());
146 EXPECT_TRUE(parameters.GetNext()); 146 EXPECT_TRUE(parameters.GetNext());
147 EXPECT_TRUE(parameters.valid()); 147 EXPECT_TRUE(parameters.valid());
148 EXPECT_EQ(std::string("qop"), parameters.name()); 148 EXPECT_EQ(std::string("qop"), parameters.name());
149 EXPECT_EQ(std::string("auth-int"), parameters.value()); 149 EXPECT_EQ(std::string("auth-int"), parameters.value());
150 EXPECT_FALSE(parameters.GetNext()); 150 EXPECT_FALSE(parameters.GetNext());
151 EXPECT_TRUE(parameters.valid()); 151 EXPECT_TRUE(parameters.valid());
152 } 152 }
153 153
154 // Use a challenge which has no property. 154 // Use a challenge which has no property.
155 TEST(HttpAuthChallengeTokenizerTest, NoProperty) { 155 TEST(HttpAuthChallengeTokenizerTest, NoProperty) {
156 std::string challenge_str = "NTLM"; 156 std::string challenge_str = "NTLM";
157 HttpAuthChallengeTokenizer challenge( 157 HttpAuthChallengeTokenizer challenge(
158 challenge_str.begin(), challenge_str.end()); 158 challenge_str.begin(), challenge_str.end());
159 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs(); 159 HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
160 160
161 EXPECT_TRUE(parameters.valid()); 161 EXPECT_TRUE(parameters.valid());
162 EXPECT_EQ(std::string("NTLM"), challenge.scheme()); 162 EXPECT_EQ(std::string("ntlm"), challenge.NormalizedScheme());
163 EXPECT_FALSE(parameters.GetNext()); 163 EXPECT_FALSE(parameters.GetNext());
164 } 164 }
165 165
166 // Use a challenge with Base64 encoded token. 166 // Use a challenge with Base64 encoded token.
167 TEST(HttpAuthChallengeTokenizerTest, Base64) { 167 TEST(HttpAuthChallengeTokenizerTest, Base64) {
168 std::string challenge_str = "NTLM SGVsbG8sIFdvcmxkCg==="; 168 std::string challenge_str = "NTLM SGVsbG8sIFdvcmxkCg===";
169 HttpAuthChallengeTokenizer challenge(challenge_str.begin(), 169 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
170 challenge_str.end()); 170 challenge_str.end());
171 171
172 EXPECT_EQ(std::string("NTLM"), challenge.scheme()); 172 EXPECT_EQ(std::string("ntlm"), challenge.NormalizedScheme());
173 // Notice the two equal statements below due to padding removal. 173 // Notice the two equal statements below due to padding removal.
174 EXPECT_EQ(std::string("SGVsbG8sIFdvcmxkCg=="), challenge.base64_param()); 174 EXPECT_EQ(std::string("SGVsbG8sIFdvcmxkCg=="), challenge.base64_param());
175 } 175 }
176 176
177 // An invalid scheme should be visible through scheme_begin(), scheme_end() but
178 // not through NormalizedScheme().
179 TEST(HttpAuthChallengeTokenizerTest, InvalidScheme) {
180 std::string challenge_str = "Blah? abcd";
181 HttpAuthChallengeTokenizer challenge(challenge_str.begin(),
182 challenge_str.end());
183 EXPECT_EQ(std::string(), challenge.NormalizedScheme());
184 EXPECT_EQ(
185 base::StringPiece("Blah?"),
186 base::StringPiece(challenge.scheme_begin(), challenge.scheme_end()));
187 }
188
177 } // namespace net 189 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_auth_challenge_tokenizer.cc ('k') | net/http/http_auth_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698