diff --git a/staging/src/k8s.io/apiserver/pkg/admission/BUILD b/staging/src/k8s.io/apiserver/pkg/admission/BUILD index 761a7b14957..3d8927eb3d9 100644 --- a/staging/src/k8s.io/apiserver/pkg/admission/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/admission/BUILD @@ -12,6 +12,7 @@ go_test( "chain_test.go", "config_test.go", "errors_test.go", + "handler_test.go", ], importpath = "k8s.io/apiserver/pkg/admission", library = ":go_default_library", diff --git a/staging/src/k8s.io/apiserver/pkg/admission/handler.go b/staging/src/k8s.io/apiserver/pkg/admission/handler.go index 5de066f0587..d2a9e7d4cf7 100644 --- a/staging/src/k8s.io/apiserver/pkg/admission/handler.go +++ b/staging/src/k8s.io/apiserver/pkg/admission/handler.go @@ -66,14 +66,8 @@ func (h *Handler) WaitForReady() bool { if h.readyFunc == nil { return true } - return h.waitForReadyInternal(time.After(timeToWaitForReady)) -} -func (h *Handler) waitForReadyInternal(timeout <-chan time.Time) bool { - // there is no configured ready func, so return immediately - if h.readyFunc == nil { - return true - } + timeout := time.After(timeToWaitForReady) for !h.readyFunc() { select { case <-time.After(100 * time.Millisecond): diff --git a/staging/src/k8s.io/apiserver/pkg/admission/handler_test.go b/staging/src/k8s.io/apiserver/pkg/admission/handler_test.go new file mode 100644 index 00000000000..79741302a91 --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/admission/handler_test.go @@ -0,0 +1,57 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package admission + +import ( + "testing" + "time" +) + +func TestWaitForReady(t *testing.T) { + handler := newFakeHandler() + + // 1. test no readyFunc + if !handler.WaitForReady() { + t.Errorf("Expect ready for no readyFunc provided.") + } + + // 2. readyFunc return ready immediately + readyFunc := func() bool { + return true + } + handler.SetReadyFunc(readyFunc) + if !handler.WaitForReady() { + t.Errorf("Expect ready for readyFunc returns ready immediately.") + } + + // 3. readyFunc always return not ready. WaitForReady timeout + readyFunc = func() bool { + return false + } + startTime := time.Now() + handler.SetReadyFunc(readyFunc) + if handler.WaitForReady() { + t.Errorf("Expect not ready for readyFunc returns not ready immediately.") + } + if time.Since(startTime) < timeToWaitForReady { + t.Errorf("Expect WaitForReady timeout.") + } +} + +func newFakeHandler() *Handler { + return NewHandler(Create, Update) +}