@@ -443,6 +443,78 @@ public void ShouldRetryOnSniffConnectionException_Async()
443
443
}
444
444
}
445
445
446
+ [ Test ]
447
+ public async Task ShouldRetryOnSniffConnectionException_Async_NoSugar ( )
448
+ {
449
+ using ( var fake = new AutoFake ( callsDoNothing : true ) )
450
+ {
451
+ var uris = new [ ]
452
+ {
453
+ new Uri ( "http://localhost:9200" ) ,
454
+ new Uri ( "http://localhost:9201" ) ,
455
+ new Uri ( "http://localhost:9202" )
456
+ } ;
457
+ var connectionPool = new SniffingConnectionPool ( uris , randomizeOnStartup : false ) ;
458
+ var config = new ConnectionConfiguration ( connectionPool )
459
+ . SniffOnConnectionFault ( ) ;
460
+
461
+ fake . Provide < IConnectionConfigurationValues > ( config ) ;
462
+
463
+ var pingAsyncCall = FakeCalls . PingAtConnectionLevelAsync ( fake ) ;
464
+ pingAsyncCall . Returns ( FakeResponse . OkAsync ( config ) ) ;
465
+
466
+ //sniffing is always synchronous and in turn will issue synchronous pings
467
+ var pingCall = FakeCalls . PingAtConnectionLevel ( fake ) ;
468
+ pingCall . Returns ( FakeResponse . Ok ( config ) ) ;
469
+
470
+ var sniffCall = FakeCalls . Sniff ( fake ) ;
471
+ var seenPorts = new List < int > ( ) ;
472
+ sniffCall . ReturnsLazily ( ( Uri u , IRequestConfiguration c ) =>
473
+ {
474
+ seenPorts . Add ( u . Port ) ;
475
+ throw new Exception ( "Something bad happened" ) ;
476
+ } ) ;
477
+
478
+ var getCall = FakeCalls . GetCall ( fake ) ;
479
+ getCall . Returns ( FakeResponse . BadAsync ( config ) ) ;
480
+
481
+ FakeCalls . ProvideDefaultTransport ( fake ) ;
482
+
483
+ var client = fake . Resolve < ElasticsearchClient > ( ) ;
484
+
485
+ MaxRetryException exception = null ;
486
+ try
487
+ {
488
+ await client . NodesHotThreadsAsync ( "nodex" ) ;
489
+ }
490
+ catch ( MaxRetryException e )
491
+ {
492
+ exception = e ;
493
+ }
494
+
495
+ //all nodes must be tried to sniff for more information
496
+ sniffCall . MustHaveHappened ( Repeated . Exactly . Times ( uris . Count ( ) ) ) ;
497
+ //make sure we only saw one call to hot threads (the one that failed initially)
498
+ getCall . MustHaveHappened ( Repeated . Exactly . Once ) ;
499
+
500
+ //make sure the sniffs actually happened on all the individual nodes
501
+ seenPorts . ShouldAllBeEquivalentTo ( uris . Select ( u=> u . Port ) ) ;
502
+ exception . Should ( ) . NotBeNull ( ) ;
503
+ exception . InnerException . Message . Should ( ) . Contain ( "Sniffing known nodes" ) ;
504
+
505
+ ArgumentException ae = null ;
506
+ try
507
+ {
508
+ await client . NodesHotThreadsAsync ( null ) ;
509
+ }
510
+ catch ( ArgumentException e )
511
+ {
512
+ ae = e ;
513
+ }
514
+ ae . Should ( ) . NotBeNull ( ) ;
515
+ }
516
+ }
517
+
446
518
[ Test ]
447
519
public void ShouldRetryOnSniffConnectionException ( )
448
520
{
0 commit comments