diff --git a/discovery/fake/discovery.go b/discovery/fake/discovery.go index 02e77cfe..0b757ad4 100644 --- a/discovery/fake/discovery.go +++ b/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/discovery/fake/test/discovery_test.go b/discovery/fake/test/discovery_test.go new file mode 100644 index 00000000..816f6a74 --- /dev/null +++ b/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) + } +}