5
5
import static org .assertj .core .api .Assertions .assertThat ;
6
6
7
7
import com .google .common .collect .ImmutableList ;
8
+ import com .google .common .collect .ImmutableSet ;
8
9
import com .google .common .collect .Sets ;
9
10
import com .google .protobuf .Message ;
11
+ import io .envoyproxy .controlplane .cache .DeltaResponse ;
12
+ import io .envoyproxy .controlplane .cache .DeltaWatch ;
13
+ import io .envoyproxy .controlplane .cache .DeltaXdsRequest ;
10
14
import io .envoyproxy .controlplane .cache .NodeGroup ;
11
15
import io .envoyproxy .controlplane .cache .Resources ;
12
16
import io .envoyproxy .controlplane .cache .Response ;
20
24
import io .envoyproxy .envoy .config .listener .v3 .Listener ;
21
25
import io .envoyproxy .envoy .config .route .v3 .RouteConfiguration ;
22
26
import io .envoyproxy .envoy .extensions .transport_sockets .tls .v3 .Secret ;
27
+ import io .envoyproxy .envoy .service .discovery .v3 .DeltaDiscoveryRequest ;
23
28
import io .envoyproxy .envoy .service .discovery .v3 .DiscoveryRequest ;
24
29
import java .util .Collections ;
25
30
import java .util .HashMap ;
@@ -543,6 +548,35 @@ public void groups() {
543
548
assertThat (cache .groups ()).containsExactly (SingleNodeGroup .GROUP );
544
549
}
545
550
551
+
552
+ @ Test
553
+ public void respondRemovedResourcesWhenPendingResourceButNotTracked () {
554
+ SimpleCache <String > cache = new SimpleCache <>(new SingleNodeGroup ());
555
+
556
+ cache .setSnapshot (SingleNodeGroup .GROUP , SNAPSHOT1 );
557
+
558
+ DeltaResponseTracker responseTracker = new DeltaResponseTracker ();
559
+
560
+ DeltaWatch watch = cache .createDeltaWatch (
561
+ DeltaXdsRequest .create (DeltaDiscoveryRequest .newBuilder ()
562
+ .setNode (Node .getDefaultInstance ())
563
+ .setTypeUrl (CLUSTER_TYPE_URL )
564
+ .addResourceNamesSubscribe ("non_existant" )
565
+ .addResourceNamesSubscribe ("cluster0" )
566
+ .build ()),
567
+ "" ,
568
+ Collections .emptyMap (),
569
+ ImmutableSet .of ("non_existant" ),
570
+ true ,
571
+ responseTracker , false );
572
+
573
+ assertThat (watch .isCancelled ()).isFalse ();
574
+ Assertions .assertThat (responseTracker .responses ).isNotEmpty ();
575
+
576
+ Assertions .assertThat (responseTracker .responses .get (0 ).removedResources ()).isNotEmpty ();
577
+ Assertions .assertThat (responseTracker .responses .get (0 ).removedResources ()).containsOnly ("non_existant" );
578
+ }
579
+
546
580
private static class ResponseTracker implements Consumer <Response > {
547
581
548
582
private final LinkedList <Response > responses = new LinkedList <>();
@@ -564,6 +598,17 @@ public void accept(Response response) {
564
598
}
565
599
}
566
600
601
+ private static class DeltaResponseTracker implements Consumer <DeltaResponse > {
602
+
603
+ private final LinkedList <DeltaResponse > responses = new LinkedList <>();
604
+
605
+ @ Override
606
+ public void accept (DeltaResponse response ) {
607
+ responses .add (response );
608
+ }
609
+
610
+ }
611
+
567
612
private static class SingleNodeGroup implements NodeGroup <String > {
568
613
569
614
private static final String GROUP = "node" ;
0 commit comments