@@ -31,12 +31,14 @@ import (
31
31
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32
32
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
33
33
"k8s.io/apimachinery/pkg/runtime"
34
+ "k8s.io/apimachinery/pkg/runtime/schema"
34
35
"k8s.io/apimachinery/pkg/util/wait"
35
36
"k8s.io/apimachinery/pkg/watch"
36
37
utilfeature "k8s.io/apiserver/pkg/util/feature"
37
38
"k8s.io/client-go/dynamic"
38
39
clientfeatures "k8s.io/client-go/features"
39
40
"k8s.io/client-go/kubernetes"
41
+ "k8s.io/client-go/metadata"
40
42
"k8s.io/client-go/rest"
41
43
"k8s.io/client-go/tools/cache"
42
44
"k8s.io/client-go/util/consistencydetector"
@@ -140,6 +142,35 @@ var _ = SIGDescribe("API Streaming (aka. WatchList)", framework.WithSerial(), fe
140
142
expectedRequestMadeByDynamicClient := getExpectedRequestMadeByClientFor (secretList .GetResourceVersion ())
141
143
gomega .Expect (rt .actualRequests ).To (gomega .Equal (expectedRequestMadeByDynamicClient ))
142
144
})
145
+ ginkgo .It ("should be requested by metadata client's List method when WatchListClient is enabled" , func (ctx context.Context ) {
146
+ featuregatetesting .SetFeatureGateDuringTest (ginkgo .GinkgoTB (), utilfeature .DefaultFeatureGate , featuregate .Feature (clientfeatures .WatchListClient ), true )
147
+
148
+ metaClient , err := metadata .NewForConfig (f .ClientConfig ())
149
+ framework .ExpectNoError (err )
150
+ expectedMetaSecrets := []metav1.PartialObjectMetadata {}
151
+ for _ , addedSecret := range addWellKnownSecrets (ctx , f ) {
152
+ addedSecretMeta , err := metaClient .Resource (v1 .SchemeGroupVersion .WithResource ("secrets" )).Namespace (f .Namespace .Name ).Get (ctx , addedSecret .Name , metav1.GetOptions {})
153
+ framework .ExpectNoError (err )
154
+ expectedMetaSecrets = append (expectedMetaSecrets , * addedSecretMeta )
155
+ }
156
+
157
+ rt , clientConfig := clientConfigWithRoundTripper (f )
158
+ wrappedMetaClient , err := metadata .NewForConfig (clientConfig )
159
+ framework .ExpectNoError (err )
160
+
161
+ ginkgo .By ("Streaming secrets metadata from the server" )
162
+ secretMetaList , err := wrappedMetaClient .Resource (v1 .SchemeGroupVersion .WithResource ("secrets" )).Namespace (f .Namespace .Name ).List (ctx , metav1.ListOptions {})
163
+ framework .ExpectNoError (err )
164
+
165
+ ginkgo .By ("Verifying if the secret meta list was properly streamed" )
166
+ streamedMetaSecrets := secretMetaList .Items
167
+ gomega .Expect (cmp .Equal (expectedMetaSecrets , streamedMetaSecrets )).To (gomega .BeTrueBecause ("data received via watchlist must match the added data" ))
168
+ gomega .Expect (secretMetaList .GetObjectKind ().GroupVersionKind ()).To (gomega .Equal (schema.GroupVersion {}.WithKind ("PartialObjectMetadataList" )))
169
+
170
+ ginkgo .By ("Verifying if expected requests were sent to the server" )
171
+ expectedRequestMadeByMetaClient := getExpectedRequestMadeByClientFor (secretMetaList .GetResourceVersion ())
172
+ gomega .Expect (rt .actualRequests ).To (gomega .Equal (expectedRequestMadeByMetaClient ))
173
+ })
143
174
})
144
175
145
176
type roundTripper struct {
0 commit comments