@@ -478,6 +478,70 @@ public void testSNI() throws Exception {
478
478
testSearchAsync ();
479
479
}
480
480
481
+ @ Test
482
+ public void testKeepAlive () throws Exception {
483
+ final int nbTimes = 10 ;
484
+
485
+ // Given all hosts being the same one
486
+ String appId = (String ) Whitebox .getInternalState (client , "applicationID" );
487
+ List <String > hostsArray = (List <String >) Whitebox .getInternalState (client , "readHosts" );
488
+ hostsArray .set (0 , appId + "-1.algolianet.com" );
489
+ hostsArray .set (1 , appId + "-1.algolianet.com" );
490
+ hostsArray .set (2 , appId + "-1.algolianet.com" );
491
+ hostsArray .set (3 , appId + "-1.algolianet.com" );
492
+ Whitebox .setInternalState (client , "readHosts" , hostsArray );
493
+
494
+ //And an index that does not cache search queries
495
+ index .disableSearchCache ();
496
+
497
+
498
+ // Expect first successful search
499
+ final long [] startEndTimeArray = new long [2 ];
500
+ startEndTimeArray [0 ] = System .nanoTime ();
501
+ final CountDownLatch signal = new CountDownLatch (1 );
502
+ index .searchAsync (new Query ("Francisco" ), new CompletionHandler () {
503
+ @ Override
504
+ public void requestCompleted (JSONObject content , AlgoliaException error ) {
505
+ if (error == null ) {
506
+ assertEquals (1 , content .optInt ("nbHits" ));
507
+ startEndTimeArray [1 ] = System .nanoTime ();
508
+ } else {
509
+ fail (error .getMessage ());
510
+ }
511
+ signal .countDown ();
512
+ }
513
+ });
514
+ assertTrue ("No callback was called" , signal .await (Helpers .wait , TimeUnit .SECONDS ));
515
+
516
+ final long firstDurationNanos = startEndTimeArray [1 ] - startEndTimeArray [0 ];
517
+ System .out .println ("First query duration: " + firstDurationNanos );
518
+
519
+ final CountDownLatch signal2 = new CountDownLatch (nbTimes );
520
+ for (int i = 0 ; i < nbTimes ; i ++) {
521
+ startEndTimeArray [0 ] = System .nanoTime ();
522
+ final int finalIter = i ;
523
+ index .searchAsync (new Query ("Francisco" ), new CompletionHandler () {
524
+ @ Override
525
+ public void requestCompleted (JSONObject content , AlgoliaException error ) {
526
+ if (error == null ) {
527
+ startEndTimeArray [1 ] = System .nanoTime ();
528
+ final long iterDiff = startEndTimeArray [1 ] - startEndTimeArray [0 ];
529
+ final String iterString = String .format ("iteration %d: %d < %d" , finalIter , iterDiff , firstDurationNanos );
530
+
531
+ // And successful fastest subsequent calls
532
+ assertEquals (1 , content .optInt ("nbHits" ));
533
+ assertTrue ("Subsequent calls should be fastest than first (" + iterString + ")" , startEndTimeArray [1 ] - startEndTimeArray [0 ] < firstDurationNanos );
534
+ } else {
535
+ fail (error .getMessage ());
536
+ }
537
+ signal2 .countDown ();
538
+ }
539
+ });
540
+ }
541
+ assertTrue ("No callback was called" , signal2 .await (Helpers .wait , TimeUnit .SECONDS ));
542
+ }
543
+
544
+
481
545
private void addDummyObjects (int objectCount ) throws Exception {
482
546
// Construct an array of dummy objects.
483
547
objects = new ArrayList <JSONObject >();
0 commit comments