diff --git a/staging/src/k8s.io/client-go/discovery/fake/discovery.go b/staging/src/k8s.io/client-go/discovery/fake/discovery.go index 02e77cfe71f..0b757ad4eef 100644 --- a/staging/src/k8s.io/client-go/discovery/fake/discovery.go +++ b/staging/src/k8s.io/client-go/discovery/fake/discovery.go @@ -31,8 +31,11 @@ import ( "k8s.io/client-go/testing" ) +// FakeDiscovery implements discovery.DiscoveryInterface and sometimes calls testing.Fake.Invoke with an action, +// but doesn't respect the return value if any. There is a way to fake static values like ServerVersion by using the Faked... fields on the struct. type FakeDiscovery struct { *testing.Fake + FakedServerVersion *version.Info } func (c *FakeDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { @@ -74,8 +77,12 @@ func (c *FakeDiscovery) ServerVersion() (*version.Info, error) { action := testing.ActionImpl{} action.Verb = "get" action.Resource = schema.GroupVersionResource{Resource: "version"} - c.Invokes(action, nil) + + if c.FakedServerVersion != nil { + return c.FakedServerVersion, nil + } + versionInfo := kubeversion.Get() return &versionInfo, nil } diff --git a/staging/src/k8s.io/client-go/discovery/fake/test/discovery_test.go b/staging/src/k8s.io/client-go/discovery/fake/test/discovery_test.go new file mode 100644 index 00000000000..816f6a7404a --- /dev/null +++ b/staging/src/k8s.io/client-go/discovery/fake/test/discovery_test.go @@ -0,0 +1,46 @@ +/* +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 fake + +import ( + "testing" + + "k8s.io/apimachinery/pkg/version" + fakediscovery "k8s.io/client-go/discovery/fake" + fakeclientset "k8s.io/client-go/kubernetes/fake" +) + +func TestFakingServerVersion(t *testing.T) { + client := fakeclientset.NewSimpleClientset() + fakeDiscovery, ok := client.Discovery().(*fakediscovery.FakeDiscovery) + if !ok { + t.Fatalf("couldn't convert Discovery() to *FakeDiscovery") + } + + testGitCommit := "v1.0.0" + fakeDiscovery.FakedServerVersion = &version.Info{ + GitCommit: testGitCommit, + } + + sv, err := client.Discovery().ServerVersion() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if sv.GitCommit != testGitCommit { + t.Fatalf("unexpected faked discovery return value: %q", sv.GitCommit) + } +} diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go index aa2d3b8dbe6..c28c1378c24 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_clientset.go @@ -117,10 +117,9 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { fakePtr := testing.Fake{} fakePtr.AddReactor("*", "*", testing.ObjectReaction(o)) - fakePtr.AddWatchReactor("*", testing.DefaultWatchReactor(watch.NewFake(), nil)) - return &Clientset{fakePtr} + return &Clientset{fakePtr, &fakediscovery.FakeDiscovery{Fake: &fakePtr}} } // Clientset implements clientset.Interface. Meant to be embedded into a @@ -128,10 +127,11 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { // you want to test easier. type Clientset struct { testing.Fake + discovery *fakediscovery.FakeDiscovery } func (c *Clientset) Discovery() discovery.DiscoveryInterface { - return &fakediscovery.FakeDiscovery{Fake: &c.Fake} + return c.discovery } `