@@ -10,6 +10,7 @@ import (
10
10
"google.golang.org/grpc"
11
11
12
12
"github.com/stretchr/testify/assert"
13
+ "github.com/stretchr/testify/require"
13
14
14
15
discovery "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
15
16
"github.com/envoyproxy/go-control-plane/pkg/cache/types"
@@ -467,7 +468,7 @@ func TestDeltaWildcardSubscriptions(t *testing.T) {
467
468
},
468
469
}
469
470
470
- validateResponse := func (t * testing.T , replies <- chan * discovery.DeltaDiscoveryResponse , expectedResources []string , expectedRemovedResources []string ) {
471
+ validateResponse := func (t * testing.T , replies <- chan * discovery.DeltaDiscoveryResponse , expectedResources []string , expectedRemovedResources []string ) string {
471
472
t .Helper ()
472
473
select {
473
474
case response := <- replies :
@@ -480,8 +481,10 @@ func TestDeltaWildcardSubscriptions(t *testing.T) {
480
481
assert .ElementsMatch (t , names , expectedResources )
481
482
assert .ElementsMatch (t , response .RemovedResources , expectedRemovedResources )
482
483
}
484
+ return response .Nonce
483
485
case <- time .After (1 * time .Second ):
484
- t .Fatalf ("got no response" )
486
+ require .Fail (t , "got no response" )
487
+ return ""
485
488
}
486
489
}
487
490
@@ -530,6 +533,41 @@ func TestDeltaWildcardSubscriptions(t *testing.T) {
530
533
531
534
})
532
535
536
+ t .Run ("unsubscribed resources are sent again if re-subscribed later on and the version has not changed" , func (t * testing.T ) {
537
+ resp := makeMockDeltaStream (t )
538
+ defer close (resp .recv )
539
+ s := server .NewServer (context .Background (), config , server.CallbackFuncs {})
540
+ go func () {
541
+ err := s .DeltaAggregatedResources (resp )
542
+ assert .NoError (t , err )
543
+ }()
544
+
545
+ resp .recv <- & discovery.DeltaDiscoveryRequest {
546
+ Node : node ,
547
+ TypeUrl : rsrc .EndpointType ,
548
+ ResourceNamesSubscribe : []string {"endpoints0" , "endpoints1" },
549
+ }
550
+ nonce := validateResponse (t , resp .sent , []string {"endpoints0" , "endpoints1" }, nil )
551
+
552
+ // Unsubscribe from endpoints0
553
+ resp .recv <- & discovery.DeltaDiscoveryRequest {
554
+ Node : node ,
555
+ TypeUrl : rsrc .EndpointType ,
556
+ ResponseNonce : nonce ,
557
+ ResourceNamesUnsubscribe : []string {"endpoints0" },
558
+ }
559
+ // No reply is expected here
560
+
561
+ // Subscribe again to endpoints0
562
+ resp .recv <- & discovery.DeltaDiscoveryRequest {
563
+ Node : node ,
564
+ TypeUrl : rsrc .EndpointType ,
565
+ ResponseNonce : nonce ,
566
+ ResourceNamesSubscribe : []string {"endpoints0" },
567
+ }
568
+ validateResponse (t , resp .sent , []string {"endpoints0" }, nil )
569
+ })
570
+
533
571
t .Run ("* subscribtion/unsubscription support" , func (t * testing.T ) {
534
572
resp := makeMockDeltaStream (t )
535
573
defer close (resp .recv )
0 commit comments