@@ -476,6 +476,64 @@ public void watchIsLeftOpenIfNotRespondedImmediately() {
476
476
assertThatWatchIsOpenWithNoResponses (new WatchAndTracker (watch , responseTracker ));
477
477
}
478
478
479
+ @ Test
480
+ public void watchIsLeftOpenIfNotRespondedImmediatelyAndThroughSubsequentSetEmptySnapshots () {
481
+ SimpleCache <String > cache = new SimpleCache <>(new SingleNodeGroup ());
482
+ cache .setSnapshot (SingleNodeGroup .GROUP , Snapshot .create (
483
+ ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), VERSION1 ));
484
+
485
+ ResponseTracker responseTracker = new ResponseTracker ();
486
+ Watch watch = cache .createWatch (
487
+ true ,
488
+ XdsRequest .create (DiscoveryRequest .newBuilder ()
489
+ .setNode (Node .getDefaultInstance ())
490
+ .setTypeUrl (ROUTE_TYPE_URL )
491
+ .addAllResourceNames (Collections .singleton (ROUTE_NAME ))
492
+ .build ()),
493
+ Collections .singleton (ROUTE_NAME ),
494
+ responseTracker );
495
+
496
+ assertThatWatchIsOpenWithNoResponses (new WatchAndTracker (watch , responseTracker ));
497
+ assertThat (cache .statusInfo (SingleNodeGroup .GROUP ).numWatches ()).isEqualTo (1 );
498
+
499
+ cache .setSnapshot (SingleNodeGroup .GROUP , Snapshot .create (
500
+ ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), VERSION2 ));
501
+
502
+ assertThatWatchIsOpenWithNoResponses (new WatchAndTracker (watch , responseTracker ));
503
+ assertThat (cache .statusInfo (SingleNodeGroup .GROUP ).numWatches ()).isEqualTo (1 );
504
+ }
505
+
506
+ @ Test
507
+ public void watchIsLeftOpenIfNotRespondedImmediatelyAndLaterSetSnapshotSendsUpdate () {
508
+ SimpleCache <String > cache = new SimpleCache <>(new SingleNodeGroup ());
509
+ cache .setSnapshot (SingleNodeGroup .GROUP , Snapshot .create (
510
+ ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), VERSION1 ));
511
+
512
+ ResponseTracker responseTracker = new ResponseTracker ();
513
+ Watch watch = cache .createWatch (
514
+ true ,
515
+ XdsRequest .create (DiscoveryRequest .newBuilder ()
516
+ .setNode (Node .getDefaultInstance ())
517
+ .setTypeUrl (ROUTE_TYPE_URL )
518
+ .addAllResourceNames (SNAPSHOT1 .resources (ROUTE_TYPE_URL ).keySet ())
519
+ .build ()),
520
+ Collections .emptySet (),
521
+ responseTracker );
522
+
523
+ assertThatWatchIsOpenWithNoResponses (new WatchAndTracker (watch , responseTracker ));
524
+ assertThat (cache .statusInfo (SingleNodeGroup .GROUP ).numWatches ()).isEqualTo (1 );
525
+
526
+ cache .setSnapshot (SingleNodeGroup .GROUP , Snapshot .create (
527
+ ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), ImmutableList .of (), VERSION2 ));
528
+
529
+ assertThatWatchIsOpenWithNoResponses (new WatchAndTracker (watch , responseTracker ));
530
+ assertThat (cache .statusInfo (SingleNodeGroup .GROUP ).numWatches ()).isEqualTo (1 );
531
+
532
+ cache .setSnapshot (SingleNodeGroup .GROUP , SNAPSHOT1 );
533
+
534
+ assertThatWatchReceivesSnapshot (new WatchAndTracker (watch , responseTracker ), SNAPSHOT1 );
535
+ }
536
+
479
537
@ Test
480
538
public void getSnapshot () {
481
539
SimpleCache <String > cache = new SimpleCache <>(new SingleNodeGroup ());
0 commit comments