@@ -80,6 +80,90 @@ TEST_F(AuthManagerTest, UnknownAuthTypeReturnsInvalidArgument) {
8080 EXPECT_THAT (result, HasErrorMessage (" Unknown authentication type" ));
8181}
8282
83+ // Verifies loading BasicAuthManager with valid credentials
84+ TEST_F (AuthManagerTest, LoadBasicAuthManager) {
85+ std::unordered_map<std::string, std::string> properties = {
86+ {AuthProperties::kAuthType , " basic" },
87+ {AuthProperties::kBasicUsername , " admin" },
88+ {AuthProperties::kBasicPassword , " secret" }};
89+
90+ auto manager_result = AuthManagers::Load (" test-catalog" , properties);
91+ ASSERT_THAT (manager_result, IsOk ());
92+
93+ auto session_result = manager_result.value ()->CatalogSession (client_, properties);
94+ ASSERT_THAT (session_result, IsOk ());
95+
96+ std::unordered_map<std::string, std::string> headers;
97+ EXPECT_THAT (session_result.value ()->Authenticate (headers), IsOk ());
98+ // base64("admin:secret") == "YWRtaW46c2VjcmV0"
99+ EXPECT_EQ (headers[" Authorization" ], " Basic YWRtaW46c2VjcmV0" );
100+ }
101+
102+ // Verifies BasicAuthManager is case-insensitive for auth type
103+ TEST_F (AuthManagerTest, BasicAuthTypeCaseInsensitive) {
104+ for (const auto & auth_type : {" BASIC" , " Basic" , " bAsIc" }) {
105+ std::unordered_map<std::string, std::string> properties = {
106+ {AuthProperties::kAuthType , auth_type},
107+ {AuthProperties::kBasicUsername , " user" },
108+ {AuthProperties::kBasicPassword , " pass" }};
109+ auto manager_result = AuthManagers::Load (" test-catalog" , properties);
110+ ASSERT_THAT (manager_result, IsOk ()) << " Failed for auth type: " << auth_type;
111+
112+ auto session_result = manager_result.value ()->CatalogSession (client_, properties);
113+ ASSERT_THAT (session_result, IsOk ()) << " Failed for auth type: " << auth_type;
114+
115+ std::unordered_map<std::string, std::string> headers;
116+ EXPECT_THAT (session_result.value ()->Authenticate (headers), IsOk ());
117+ // base64("user:pass") == "dXNlcjpwYXNz"
118+ EXPECT_EQ (headers[" Authorization" ], " Basic dXNlcjpwYXNz" );
119+ }
120+ }
121+
122+ // Verifies BasicAuthManager fails when username is missing
123+ TEST_F (AuthManagerTest, BasicAuthMissingUsername) {
124+ std::unordered_map<std::string, std::string> properties = {
125+ {AuthProperties::kAuthType , " basic" }, {AuthProperties::kBasicPassword , " secret" }};
126+
127+ auto manager_result = AuthManagers::Load (" test-catalog" , properties);
128+ ASSERT_THAT (manager_result, IsOk ());
129+
130+ auto session_result = manager_result.value ()->CatalogSession (client_, properties);
131+ EXPECT_THAT (session_result, IsError (ErrorKind::kInvalidArgument ));
132+ EXPECT_THAT (session_result, HasErrorMessage (" Missing required property" ));
133+ }
134+
135+ // Verifies BasicAuthManager fails when password is missing
136+ TEST_F (AuthManagerTest, BasicAuthMissingPassword) {
137+ std::unordered_map<std::string, std::string> properties = {
138+ {AuthProperties::kAuthType , " basic" }, {AuthProperties::kBasicUsername , " admin" }};
139+
140+ auto manager_result = AuthManagers::Load (" test-catalog" , properties);
141+ ASSERT_THAT (manager_result, IsOk ());
142+
143+ auto session_result = manager_result.value ()->CatalogSession (client_, properties);
144+ EXPECT_THAT (session_result, IsError (ErrorKind::kInvalidArgument ));
145+ EXPECT_THAT (session_result, HasErrorMessage (" Missing required property" ));
146+ }
147+
148+ // Verifies BasicAuthManager handles special characters in credentials
149+ TEST_F (AuthManagerTest, BasicAuthSpecialCharacters) {
150+ std::unordered_map<std::string, std::string> properties = {
151+ {AuthProperties::kAuthType , " basic" },
152+ {AuthProperties::kBasicUsername , " user@domain.com" },
153+ {AuthProperties::kBasicPassword , " p@ss:w0rd!" }};
154+
155+ auto manager_result = AuthManagers::Load (" test-catalog" , properties);
156+ ASSERT_THAT (manager_result, IsOk ());
157+
158+ auto session_result = manager_result.value ()->CatalogSession (client_, properties);
159+ ASSERT_THAT (session_result, IsOk ());
160+
161+ std::unordered_map<std::string, std::string> headers;
162+ EXPECT_THAT (session_result.value ()->Authenticate (headers), IsOk ());
163+ // base64("user@domain.com:p@ss:w0rd!") == "dXNlckBkb21haW4uY29tOnBAc3M6dzByZCE="
164+ EXPECT_EQ (headers[" Authorization" ], " Basic dXNlckBkb21haW4uY29tOnBAc3M6dzByZCE=" );
165+ }
166+
83167// Verifies custom auth manager registration
84168TEST_F (AuthManagerTest, RegisterCustomAuthManager) {
85169 AuthManagers::Register (
0 commit comments