@@ -20,8 +20,10 @@ import (
2020 "k8s.io/apimachinery/pkg/api/errors"
2121 condmeta "k8s.io/apimachinery/pkg/api/meta"
2222 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23+ "k8s.io/apimachinery/pkg/watch"
2324 "k8s.io/client-go/informers"
2425 "k8s.io/client-go/kubernetes/fake"
26+ clientgotesting "k8s.io/client-go/testing"
2527 "k8s.io/client-go/tools/cache"
2628 utilnode "k8s.io/cloud-provider-gcp/pkg/util/node"
2729 "k8s.io/cloud-provider-gcp/providers/gce"
@@ -54,6 +56,9 @@ const (
5456
5557func setupGKENetworkParamSetController (ctx context.Context ) * testGKENetworkParamSetController {
5658 fakeNetworking := networkfake .NewSimpleClientset ()
59+ // Temporary workaround to disable watch list. It should be fixed properly by updating gke-networking-api
60+ // Pending PR: https://github.com/GoogleCloudPlatform/gke-networking-api/pull/75
61+ disableWatchListForFakeNetworkingClient (fakeNetworking )
5762 nwInfFactory := networkinformers .NewSharedInformerFactory (fakeNetworking , 0 * time .Second )
5863 nwInformer := nwInfFactory .Networking ().V1 ().Networks ()
5964 gnpInformer := nwInfFactory .Networking ().V1 ().GKENetworkParamSets ()
@@ -104,6 +109,26 @@ func setupGKENetworkParamSetController(ctx context.Context) *testGKENetworkParam
104109 }
105110}
106111
112+ // disableWatchListForFakeNetworkingClient rejects watch-list requests for this
113+ // fake client so reflector falls back to classic list+watch.
114+ func disableWatchListForFakeNetworkingClient (client * networkfake.Clientset ) {
115+ client .PrependWatchReactor ("*" , func (action clientgotesting.Action ) (bool , watch.Interface , error ) {
116+ watchAction , ok := action .(interface {
117+ GetListOptions () metav1.ListOptions
118+ })
119+ if ! ok {
120+ return false , nil , nil
121+ }
122+
123+ opts := watchAction .GetListOptions ()
124+ if opts .SendInitialEvents != nil && * opts .SendInitialEvents {
125+ // Force reflector fallback to classic list+watch for this fake client only.
126+ return true , nil , errors .NewBadRequest ("watch-list unsupported by gke-networking-api fake client" )
127+ }
128+ return false , nil , nil
129+ })
130+ }
131+
107132func (testVals * testGKENetworkParamSetController ) runGKENetworkParamSetController (ctx context.Context ) {
108133 go testVals .controller .Run (1 , ctx .Done (), testVals .metrics )
109134}
0 commit comments