26
26
using Microsoft . Extensions . Logging . Testing ;
27
27
using NUnit . Framework ;
28
28
using Grpc . Net . Client . Internal ;
29
- using System . Net ;
29
+ using Grpc . Net . Client . Web ;
30
30
#if SUPPORT_LOAD_BALANCING
31
31
using Grpc . Net . Client . Balancer ;
32
32
using Grpc . Net . Client . Balancer . Internal ;
@@ -402,7 +402,7 @@ public async Task Dispose_CalledWhileActiveCalls_ActiveCallsDisposed()
402
402
Assert . AreEqual ( 0 , channel . ActiveCalls . Count ) ;
403
403
}
404
404
405
- [ TestCase ( null ) ]
405
+ [ TestCase ( true ) ]
406
406
[ TestCase ( false ) ]
407
407
public void HttpHandler_HttpClientHandlerOverNativeOnAndroid_ThrowError ( bool useDelegatingHandlers )
408
408
{
@@ -415,6 +415,8 @@ public void HttpHandler_HttpClientHandlerOverNativeOnAndroid_ThrowError(bool use
415
415
services . AddSingleton < IOperatingSystem > ( new TestOperatingSystem { IsAndroid = true } ) ;
416
416
417
417
HttpMessageHandler handler = new HttpClientHandler ( ) ;
418
+
419
+ // Add an extra handler to verify that test successfully recurses down custom handlers.
418
420
if ( useDelegatingHandlers )
419
421
{
420
422
handler = new TestDelegatingHandler ( handler ) ;
@@ -443,6 +445,43 @@ public void HttpHandler_HttpClientHandlerOverNativeOnAndroid_ThrowError(bool use
443
445
}
444
446
}
445
447
448
+ [ TestCase ( true ) ]
449
+ [ TestCase ( false ) ]
450
+ public void HttpHandler_HttpClientHandlerOverNativeOnAndroid_HasGrpcWebHandler_ThrowError ( bool useDelegatingHandlers )
451
+ {
452
+ // Arrange
453
+ AppContext . SetSwitch ( "System.Net.Http.UseNativeHttpHandler" , true ) ;
454
+
455
+ try
456
+ {
457
+ var services = new ServiceCollection ( ) ;
458
+ services . AddSingleton < IOperatingSystem > ( new TestOperatingSystem { IsAndroid = true } ) ;
459
+
460
+ HttpMessageHandler handler = new HttpClientHandler ( ) ;
461
+ handler = new GrpcWebHandler ( handler ) ;
462
+
463
+ // Add an extra handler to verify that test successfully recurses down custom handlers.
464
+ if ( useDelegatingHandlers )
465
+ {
466
+ handler = new TestDelegatingHandler ( handler ) ;
467
+ }
468
+
469
+ var channel = GrpcChannel . ForAddress ( "https://localhost" , new GrpcChannelOptions
470
+ {
471
+ HttpHandler = handler ,
472
+ ServiceProvider = services . BuildServiceProvider ( )
473
+ } ) ;
474
+
475
+ // Assert
476
+ Assert . IsTrue ( channel . OperatingSystem . IsAndroid ) ;
477
+ }
478
+ finally
479
+ {
480
+ // Reset switch for other tests.
481
+ AppContext . SetSwitch ( "System.Net.Http.UseNativeHttpHandler" , false ) ;
482
+ }
483
+ }
484
+
446
485
private class TestDelegatingHandler : DelegatingHandler
447
486
{
448
487
public TestDelegatingHandler ( HttpMessageHandler innerHandler ) : base ( innerHandler )
0 commit comments