#include "net/http/http_auth_challenge_tokenizer.h"
#include <string_view>
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
TEST(HttpAuthChallengeTokenizerTest, Basic) {
HttpAuthChallengeTokenizer challenge("Basic realm=\"foobar\"");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("basic", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("foobar", parameters.value());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, NoQuotes) {
HttpAuthChallengeTokenizer challenge("Basic realm=foobar@baz.com");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("basic", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("foobar@baz.com", parameters.value());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotes) {
HttpAuthChallengeTokenizer challenge("Basic realm=\"foobar@baz.com");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("basic", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("foobar@baz.com", parameters.value());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesNoValue) {
HttpAuthChallengeTokenizer challenge("Basic realm=\"");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("basic", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("", parameters.value());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesSpaces) {
HttpAuthChallengeTokenizer challenge("Basic realm=\"foo bar");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("basic", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("foo bar", parameters.value());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, MismatchedQuotesMultiple) {
HttpAuthChallengeTokenizer challenge(
"Digest qop=auth-int, algorithm=md5, realm=\"foo");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("digest", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("qop", parameters.name());
EXPECT_EQ("auth-int", parameters.value());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("algorithm", parameters.name());
EXPECT_EQ("md5", parameters.value());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("foo", parameters.value());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, NoValue) {
HttpAuthChallengeTokenizer challenge("Digest qop=");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ(std::string("digest"), challenge.auth_scheme());
EXPECT_FALSE(parameters.GetNext());
EXPECT_FALSE(parameters.valid());
}
TEST(HttpAuthChallengeTokenizerTest, Multiple) {
HttpAuthChallengeTokenizer challenge(
"Digest algorithm=md5, realm=\"Oblivion\", qop=auth-int");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("digest", challenge.auth_scheme());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("algorithm", parameters.name());
EXPECT_EQ("md5", parameters.value());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("realm", parameters.name());
EXPECT_EQ("Oblivion", parameters.value());
EXPECT_TRUE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
EXPECT_EQ("qop", parameters.name());
EXPECT_EQ("auth-int", parameters.value());
EXPECT_FALSE(parameters.GetNext());
EXPECT_TRUE(parameters.valid());
}
TEST(HttpAuthChallengeTokenizerTest, NoProperty) {
HttpAuthChallengeTokenizer challenge("NTLM");
HttpUtil::NameValuePairsIterator parameters = challenge.param_pairs();
EXPECT_TRUE(parameters.valid());
EXPECT_EQ(std::string("ntlm"), challenge.auth_scheme());
EXPECT_FALSE(parameters.GetNext());
}
TEST(HttpAuthChallengeTokenizerTest, Base64) {
HttpAuthChallengeTokenizer challenge("NTLM SGVsbG8sIFdvcmxkCg===");
EXPECT_EQ(std::string("ntlm"), challenge.auth_scheme());
EXPECT_EQ(std::string("SGVsbG8sIFdvcmxkCg=="), challenge.base64_param());
}
}