Skip to content

Commit 7d6ec5d

Browse files
committed
smoke test
1 parent 09a5258 commit 7d6ec5d

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

pkg/client/watch_list_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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+
w, err := clientset.CoreV1().Secrets("kube-system").Watch(ctx, opts)
37+
Expect(err).NotTo(HaveOccurred())
38+
defer w.Stop()
39+
40+
receivedWatchListStreamFromTheServer := false
41+
func() {
42+
for {
43+
select {
44+
case <-ctx.Done():
45+
return
46+
case event, ok := <-w.ResultChan():
47+
if !ok {
48+
panic("unexpected watch close")
49+
50+
}
51+
if event.Type == watch.Error {
52+
panic(fmt.Sprintf("unexpected watch event: %v", apierrors.FromObject(event.Object)))
53+
}
54+
meta, err := meta.Accessor(event.Object)
55+
Expect(err).NotTo(HaveOccurred())
56+
57+
switch event.Type {
58+
case watch.Bookmark:
59+
if meta.GetAnnotations()[metav1.InitialEventsAnnotationKey] != "true" {
60+
continue
61+
}
62+
receivedWatchListStreamFromTheServer = true
63+
return
64+
case watch.Added, watch.Modified, watch.Deleted, watch.Error:
65+
default:
66+
panic(fmt.Sprintf("unexpected watch event: %v", event.Object))
67+
}
68+
}
69+
}
70+
}()
71+
72+
Expect(receivedWatchListStreamFromTheServer).To(BeTrue())
73+
})
74+
})

0 commit comments

Comments
 (0)