Merge pull request #125509 from p0lyn0mial/upstream-improve-watchlist-reflector-e2e

e2e/apimachinery/watchlist: when comparing streamed data do not call the API directly instead use the added data.
This commit is contained in:
Kubernetes Prow Robot 2024-06-14 11:36:18 -07:00 committed by GitHub
commit c3689b9f8b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -64,9 +64,11 @@ var _ = SIGDescribe("API Streaming (aka. WatchList)", framework.WithSerial(), fe
)
ginkgo.By(fmt.Sprintf("Adding 5 secrets to %s namespace", f.Namespace.Name))
var expectedSecrets []v1.Secret
for i := 1; i <= 5; i++ {
_, err := f.ClientSet.CoreV1().Secrets(f.Namespace.Name).Create(ctx, newSecret(fmt.Sprintf("secret-%d", i)), metav1.CreateOptions{})
secret, err := f.ClientSet.CoreV1().Secrets(f.Namespace.Name).Create(ctx, newSecret(fmt.Sprintf("secret-%d", i)), metav1.CreateOptions{})
framework.ExpectNoError(err)
expectedSecrets = append(expectedSecrets, *secret)
}
ginkgo.By("Starting the secret informer")
@ -79,15 +81,17 @@ var _ = SIGDescribe("API Streaming (aka. WatchList)", framework.WithSerial(), fe
framework.ExpectNoError(err, "Failed waiting for the secret informer in %s namespace to be synced", f.Namespace.Namespace)
ginkgo.By("Verifying if the secret informer was properly synchronised")
verifyStore(ctx, f, secretInformer.GetStore())
verifyStore(ctx, expectedSecrets, secretInformer.GetStore())
ginkgo.By("Modifying a secret and checking if the update was picked up by the secret informer")
secret, err := f.ClientSet.CoreV1().Secrets(f.Namespace.Name).Get(ctx, "secret-1", metav1.GetOptions{})
framework.ExpectNoError(err)
secret.StringData = map[string]string{"foo": "bar"}
_, err = f.ClientSet.CoreV1().Secrets(f.Namespace.Name).Update(ctx, secret, metav1.UpdateOptions{})
secret, err = f.ClientSet.CoreV1().Secrets(f.Namespace.Name).Update(ctx, secret, metav1.UpdateOptions{})
framework.ExpectNoError(err)
verifyStore(ctx, f, secretInformer.GetStore())
expectedSecrets[0] = *secret
verifyStore(ctx, expectedSecrets, secretInformer.GetStore())
})
ginkgo.It("should be requested by client-go's List method when WatchListClient is enabled", func(ctx context.Context) {
featuregatetesting.SetFeatureGateDuringTest(ginkgo.GinkgoTB(), utilfeature.DefaultFeatureGate, featuregate.Feature(clientfeatures.WatchListClient), true)
@ -139,13 +143,8 @@ func (f roundTripFunc) RoundTrip(req *http.Request) (*http.Response, error) {
return f(req)
}
func verifyStore(ctx context.Context, f *framework.Framework, store cache.Store) {
ginkgo.By(fmt.Sprintf("Listing secrets directly from the server from %s namespace", f.Namespace.Name))
expectedSecretsList, err := f.ClientSet.CoreV1().Secrets(f.Namespace.Name).List(ctx, metav1.ListOptions{})
framework.ExpectNoError(err)
expectedSecrets := expectedSecretsList.Items
err = wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, 30*time.Second, true, func(ctx context.Context) (done bool, err error) {
func verifyStore(ctx context.Context, expectedSecrets []v1.Secret, store cache.Store) {
err := wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, 30*time.Second, true, func(ctx context.Context) (done bool, err error) {
ginkgo.By("Comparing secrets retrieved directly from the server with the ones that have been streamed to the secret informer")
rawStreamedSecrets := store.List()
streamedSecrets := make([]v1.Secret, 0, len(rawStreamedSecrets))