diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 13cecefb..57aa4a04 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -476,7 +476,7 @@ }, { "ImportPath": "k8s.io/api", - "Rev": "3a2d6b5bb7f8" + "Rev": "2824ee61d1ae" }, { "ImportPath": "k8s.io/apimachinery", diff --git a/examples/fake-client/main_test.go b/examples/fake-client/main_test.go index 456a4bbc..a2f0eeef 100644 --- a/examples/fake-client/main_test.go +++ b/examples/fake-client/main_test.go @@ -21,11 +21,13 @@ import ( "testing" "time" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" + clienttesting "k8s.io/client-go/testing" "k8s.io/client-go/tools/cache" ) @@ -34,8 +36,20 @@ func TestFakeClient(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + watcherStarted := make(chan struct{}) // Create the fake client. client := fake.NewSimpleClientset() + // A catch-all watch reactor that allows us to inject the watcherStarted channel. + client.PrependWatchReactor("*", func(action clienttesting.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := client.Tracker().Watch(gvr, ns) + if err != nil { + return false, nil, err + } + close(watcherStarted) + return true, watch, nil + }) // We will create an informer that writes added pods to a channel. pods := make(chan *v1.Pod, 1) @@ -57,6 +71,15 @@ func TestFakeClient(t *testing.T) { // we send any events to it. cache.WaitForCacheSync(ctx.Done(), podInformer.HasSynced) + // The fake client doesn't support resource version. Any writes to the client + // after the informer's initial LIST and before the informer establishing the + // watcher will be missed by the informer. Therefore we wait until the watcher + // starts. + // Note that the fake client isn't designed to work with informer. It + // doesn't support resource version. It's encouraged to use a real client + // in an integration/E2E test if you need to test complex behavior with + // informer/controllers. + <-watcherStarted // Inject an event into the fake client. p := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "my-pod"}} _, err := client.CoreV1().Pods("test-ns").Create(context.TODO(), p, metav1.CreateOptions{}) diff --git a/go.mod b/go.mod index c82cc653..164614fc 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba - k8s.io/api v0.0.0-20210323190948-3a2d6b5bb7f8 + k8s.io/api v0.0.0-20210408212643-2824ee61d1ae k8s.io/apimachinery v0.0.0-20210313025227-57f2a0733447 k8s.io/klog/v2 v2.8.0 k8s.io/utils v0.0.0-20201110183641-67b214c5f920 @@ -36,6 +36,6 @@ require ( ) replace ( - k8s.io/api => k8s.io/api v0.0.0-20210323190948-3a2d6b5bb7f8 + k8s.io/api => k8s.io/api v0.0.0-20210408212643-2824ee61d1ae k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20210313025227-57f2a0733447 ) diff --git a/go.sum b/go.sum index 1ebf7f55..e93c1f93 100644 --- a/go.sum +++ b/go.sum @@ -431,7 +431,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.0.0-20210323190948-3a2d6b5bb7f8/go.mod h1:7Byi1J8zhqxObDDyvyvJdvEZioXQZDTsNqSFMk4JMMM= +k8s.io/api v0.0.0-20210408212643-2824ee61d1ae/go.mod h1:7Byi1J8zhqxObDDyvyvJdvEZioXQZDTsNqSFMk4JMMM= k8s.io/apimachinery v0.0.0-20210313025227-57f2a0733447/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=