1616
1717using System ;
1818using System . Collections . Generic ;
19- using System . Net . Http ;
2019using System . Reflection ;
2120using AdbcDrivers . Databricks . StatementExecution ;
2221using Apache . Arrow . Adbc ;
2322using Apache . Arrow . Adbc . Drivers . Apache . Spark ;
24- using Moq ;
2523using Xunit ;
2624
2725namespace AdbcDrivers . Databricks . Tests . Unit . StatementExecution
2826{
2927 /// <summary>
3028 /// Unit tests for StatementExecutionConnection OAuth and token authentication.
3129 /// </summary>
32- public class StatementExecutionConnectionAuthTests : IDisposable
30+ public class StatementExecutionConnectionAuthTests
3331 {
34- private readonly Mock < HttpMessageHandler > _mockHttpHandler ;
35-
36- public StatementExecutionConnectionAuthTests ( )
37- {
38- _mockHttpHandler = new Mock < HttpMessageHandler > ( ) ;
39- }
4032
4133 /// <summary>
4234 /// Creates a basic set of properties required for StatementExecutionConnection.
@@ -78,15 +70,8 @@ public void Constructor_WithOAuthClientCredentials_CreatesConnectionWithOAuthHan
7870 using var connection = new StatementExecutionConnection ( properties ) ;
7971
8072 // Assert - verify connection was created successfully with OAuth
73+ // The auth HTTP client is now managed internally by HttpHandlerFactory
8174 Assert . NotNull ( connection ) ;
82-
83- // Verify _authHttpClient was created
84- var authHttpClientField = typeof ( StatementExecutionConnection ) . GetField (
85- "_authHttpClient" ,
86- BindingFlags . NonPublic | BindingFlags . Instance ) ;
87- Assert . NotNull ( authHttpClientField ) ;
88- var authHttpClient = authHttpClientField ! . GetValue ( connection ) ;
89- Assert . NotNull ( authHttpClient ) ;
9075 }
9176
9277 [ Fact ]
@@ -111,15 +96,8 @@ public void Constructor_WithOAuthTokenRefresh_CreatesConnectionWithTokenRefreshH
11196 using var connection = new StatementExecutionConnection ( properties ) ;
11297
11398 // Assert - verify connection was created successfully
99+ // The auth HTTP client is now managed internally by HttpHandlerFactory
114100 Assert . NotNull ( connection ) ;
115-
116- // Verify _authHttpClient was created for token operations
117- var authHttpClientField = typeof ( StatementExecutionConnection ) . GetField (
118- "_authHttpClient" ,
119- BindingFlags . NonPublic | BindingFlags . Instance ) ;
120- Assert . NotNull ( authHttpClientField ) ;
121- var authHttpClient = authHttpClientField ! . GetValue ( connection ) ;
122- Assert . NotNull ( authHttpClient ) ;
123101 }
124102
125103 [ Fact ]
@@ -135,15 +113,8 @@ public void Constructor_WithOAuthAccessToken_CreatesConnectionWithStaticBearerTo
135113 using var connection = new StatementExecutionConnection ( properties ) ;
136114
137115 // Assert - verify connection was created successfully with OAuth handlers
116+ // The auth HTTP client is now managed internally by HttpHandlerFactory
138117 Assert . NotNull ( connection ) ;
139-
140- // Verify _authHttpClient was created for OAuth (needed for MandatoryTokenExchangeDelegatingHandler)
141- var authHttpClientField = typeof ( StatementExecutionConnection ) . GetField (
142- "_authHttpClient" ,
143- BindingFlags . NonPublic | BindingFlags . Instance ) ;
144- Assert . NotNull ( authHttpClientField ) ;
145- var authHttpClient = authHttpClientField ! . GetValue ( connection ) ;
146- Assert . NotNull ( authHttpClient ) ;
147118 }
148119
149120 [ Fact ]
@@ -159,15 +130,8 @@ public void Constructor_WithOAuthAccessTokenExplicitGrantType_CreatesConnectionC
159130 using var connection = new StatementExecutionConnection ( properties ) ;
160131
161132 // Assert - verify connection was created successfully
133+ // The auth HTTP client is now managed internally by HttpHandlerFactory
162134 Assert . NotNull ( connection ) ;
163-
164- // Verify _authHttpClient was created for OAuth operations
165- var authHttpClientField = typeof ( StatementExecutionConnection ) . GetField (
166- "_authHttpClient" ,
167- BindingFlags . NonPublic | BindingFlags . Instance ) ;
168- Assert . NotNull ( authHttpClientField ) ;
169- var authHttpClient = authHttpClientField ! . GetValue ( connection ) ;
170- Assert . NotNull ( authHttpClient ) ;
171135 }
172136
173137 [ Fact ]
@@ -194,7 +158,7 @@ public void Constructor_WithIdentityFederationClientId_StoresConfigCorrectly()
194158 }
195159
196160 [ Fact ]
197- public void Constructor_WithoutOAuth_DoesNotCreateAuthHttpClient ( )
161+ public void Constructor_WithoutOAuth_CreatesConnectionWithStaticBearerToken ( )
198162 {
199163 // Arrange
200164 var properties = CreateBaseProperties ( ) ;
@@ -204,13 +168,9 @@ public void Constructor_WithoutOAuth_DoesNotCreateAuthHttpClient()
204168 // Act
205169 using var connection = new StatementExecutionConnection ( properties ) ;
206170
207- // Assert
208- var authHttpClientField = typeof ( StatementExecutionConnection ) . GetField (
209- "_authHttpClient" ,
210- BindingFlags . NonPublic | BindingFlags . Instance ) ;
211- Assert . NotNull ( authHttpClientField ) ;
212- var authHttpClient = authHttpClientField ! . GetValue ( connection ) ;
213- Assert . Null ( authHttpClient ) ; // Should be null when OAuth is not used
171+ // Assert - verify connection was created successfully
172+ // Without OAuth, a static bearer token handler is used (no separate auth HTTP client needed)
173+ Assert . NotNull ( connection ) ;
214174 }
215175
216176 [ Fact ]
@@ -249,7 +209,7 @@ public void Constructor_WithUriInsteadOfHostName_ExtractsHostCorrectly()
249209 }
250210
251211 [ Fact ]
252- public void Dispose_WithOAuthEnabled_DisposesAuthHttpClient ( )
212+ public void Dispose_WithOAuthEnabled_DisposesCleanly ( )
253213 {
254214 // Arrange
255215 var properties = CreateBaseProperties ( ) ;
@@ -260,18 +220,10 @@ public void Dispose_WithOAuthEnabled_DisposesAuthHttpClient()
260220
261221 var connection = new StatementExecutionConnection ( properties ) ;
262222
263- // Get reference to auth HTTP client before disposal
264- var authHttpClientField = typeof ( StatementExecutionConnection ) . GetField (
265- "_authHttpClient" ,
266- BindingFlags . NonPublic | BindingFlags . Instance ) ;
267- var authHttpClient = authHttpClientField ! . GetValue ( connection ) as HttpClient ;
268- Assert . NotNull ( authHttpClient ) ;
269-
270223 // Act
271224 connection . Dispose ( ) ;
272225
273- // Assert - after disposal, attempting to use the client should fail
274- // We can't directly test disposal, but we verify no exceptions during dispose
226+ // Assert - verify no exceptions during dispose
275227 // Multiple dispose calls should be safe
276228 connection . Dispose ( ) ;
277229 }
@@ -303,10 +255,5 @@ public void Constructor_MissingWarehouseId_ThrowsArgumentException()
303255 // Act & Assert
304256 Assert . Throws < ArgumentException > ( ( ) => new StatementExecutionConnection ( properties ) ) ;
305257 }
306-
307- public void Dispose ( )
308- {
309- _mockHttpHandler ? . Object ? . Dispose ( ) ;
310- }
311258 }
312259}
0 commit comments