1 // Copyright (c) 2012 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.
4
5 #include "components/auto_login_parser/auto_login_parser.h"
6
7 #include <string>
8
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace auto_login_parser {
12
13 class AutoLoginParserTest : public testing::Test {
14 protected:
IsHeaderDataEmpty(const HeaderData & header)15 static bool IsHeaderDataEmpty(const HeaderData& header) {
16 return header.realm.empty() && header.account.empty() &&
17 header.args.empty();
18 }
19 };
20
TEST_F(AutoLoginParserTest,ParseHeader)21 TEST_F(AutoLoginParserTest, ParseHeader) {
22 std::string header =
23 "realm=com.google&"
24 "account=fred.example%40gmail.com&"
25 "args=kfdshfwoeriudslkfsdjfhdskjfhsdkr";
26
27 HeaderData header_data;
28 EXPECT_TRUE(ParseHeader(header, ONLY_GOOGLE_COM, &header_data));
29
30 ASSERT_EQ("com.google", header_data.realm);
31 ASSERT_EQ("fred.example@gmail.com", header_data.account);
32 ASSERT_EQ("kfdshfwoeriudslkfsdjfhdskjfhsdkr", header_data.args);
33 }
34
TEST_F(AutoLoginParserTest,ParseHeaderOnlySupportsComGoogle)35 TEST_F(AutoLoginParserTest, ParseHeaderOnlySupportsComGoogle) {
36 std::string header =
37 "realm=com.microsoft&"
38 "account=fred.example%40gmail.com&"
39 "args=kfdshfwoeriudslkfsdjfhdskjfhsdkr";
40
41 HeaderData header_data;
42 EXPECT_FALSE(ParseHeader(header, ONLY_GOOGLE_COM, &header_data));
43 // |header| should not be touched when parsing fails.
44 EXPECT_TRUE(IsHeaderDataEmpty(header_data));
45 }
46
TEST_F(AutoLoginParserTest,ParseHeaderWithMissingRealm)47 TEST_F(AutoLoginParserTest, ParseHeaderWithMissingRealm) {
48 std::string header =
49 "account=fred.example%40gmail.com&"
50 "args=kfdshfwoeriudslkfsdjfhdskjfhsdkr";
51
52 HeaderData header_data;
53 EXPECT_FALSE(ParseHeader(header, ONLY_GOOGLE_COM, &header_data));
54 EXPECT_TRUE(IsHeaderDataEmpty(header_data));
55 }
56
TEST_F(AutoLoginParserTest,ParseHeaderWithMissingArgs)57 TEST_F(AutoLoginParserTest, ParseHeaderWithMissingArgs) {
58 std::string header =
59 "realm=com.google&"
60 "account=fred.example%40gmail.com&";
61
62 HeaderData header_data;
63 EXPECT_FALSE(ParseHeader(header, ONLY_GOOGLE_COM, &header_data));
64 EXPECT_TRUE(IsHeaderDataEmpty(header_data));
65 }
66
TEST_F(AutoLoginParserTest,ParseHeaderWithoutOptionalAccount)67 TEST_F(AutoLoginParserTest, ParseHeaderWithoutOptionalAccount) {
68 std::string header =
69 "realm=com.google&"
70 "args=kfdshfwoeriudslkfsdjfhdskjfhsdkr";
71
72 HeaderData header_data;
73 EXPECT_TRUE(ParseHeader(header, ONLY_GOOGLE_COM, &header_data));
74 ASSERT_EQ("com.google", header_data.realm);
75 ASSERT_EQ("kfdshfwoeriudslkfsdjfhdskjfhsdkr", header_data.args);
76 }
77
TEST_F(AutoLoginParserTest,ParseHeaderAllowsAnyRealmWithOption)78 TEST_F(AutoLoginParserTest, ParseHeaderAllowsAnyRealmWithOption) {
79 std::string header =
80 "realm=com.microsoft&"
81 "account=fred.example%40gmail.com&"
82 "args=kfdshfwoeriudslkfsdjfhdskjfhsdkr";
83
84 HeaderData header_data;
85 EXPECT_TRUE(ParseHeader(header, ALLOW_ANY_REALM, &header_data));
86
87 ASSERT_EQ("com.microsoft", header_data.realm);
88 ASSERT_EQ("fred.example@gmail.com", header_data.account);
89 ASSERT_EQ("kfdshfwoeriudslkfsdjfhdskjfhsdkr", header_data.args);
90 }
91
92 } // namespace auto_login_parser
93