Skip to content

Commit c8b16e3

Browse files
committed
smoke test
1 parent 09a5258 commit c8b16e3

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

pkg/client/watch_list_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package client_test
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"time"
7+
8+
. "github.com/onsi/ginkgo/v2"
9+
. "github.com/onsi/gomega"
10+
11+
"sigs.k8s.io/controller-runtime/pkg/envtest"
12+
13+
apierrors "k8s.io/apimachinery/pkg/api/errors"
14+
"k8s.io/apimachinery/pkg/api/meta"
15+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16+
"k8s.io/apimachinery/pkg/watch"
17+
"k8s.io/client-go/kubernetes"
18+
"k8s.io/utils/ptr"
19+
)
20+
21+
var _ = Describe("WatchList", func() {
22+
It("should work against the kube-apiserver", func() {
23+
testenv = &envtest.Environment{}
24+
25+
cfg, err := testenv.Start()
26+
Expect(err).NotTo(HaveOccurred())
27+
clientset, err = kubernetes.NewForConfig(cfg)
28+
Expect(err).NotTo(HaveOccurred())
29+
30+
ctx := context.Background()
31+
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
32+
defer cancel()
33+
opts := metav1.ListOptions{}
34+
opts.AllowWatchBookmarks = true
35+
opts.SendInitialEvents = ptr.To(true)
36+
opts.ResourceVersionMatch = metav1.ResourceVersionMatchNotOlderThan
37+
w, err := clientset.CoreV1().Secrets("kube-system").Watch(ctx, opts)
38+
Expect(err).NotTo(HaveOccurred())
39+
defer w.Stop()
40+
41+
receivedWatchListStreamFromTheServer := false
42+
func() {
43+
for {
44+
select {
45+
case <-ctx.Done():
46+
return
47+
case event, ok := <-w.ResultChan():
48+
if !ok {
49+
panic("unexpected watch close")
50+
51+
}
52+
if event.Type == watch.Error {
53+
panic(fmt.Sprintf("unexpected watch event: %v", apierrors.FromObject(event.Object)))
54+
}
55+
meta, err := meta.Accessor(event.Object)
56+
Expect(err).NotTo(HaveOccurred())
57+
58+
switch event.Type {
59+
case watch.Bookmark:
60+
if meta.GetAnnotations()[metav1.InitialEventsAnnotationKey] != "true" {
61+
continue
62+
}
63+
receivedWatchListStreamFromTheServer = true
64+
return
65+
case watch.Added, watch.Modified, watch.Deleted, watch.Error:
66+
default:
67+
panic(fmt.Sprintf("unexpected watch event: %v", event.Object))
68+
}
69+
}
70+
}
71+
}()
72+
73+
Expect(receivedWatchListStreamFromTheServer).To(BeTrue())
74+
})
75+
})

0 commit comments

Comments
 (0)