Skip to content

Commit c426878

Browse files
authored
Merge pull request #36 from mengqiy/fakeclient
Fakeclient
2 parents 126d208 + a1ff5a8 commit c426878

File tree

284 files changed

+1613
-28059
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

284 files changed

+1613
-28059
lines changed

Gopkg.lock

Lines changed: 4 additions & 94 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/client/fake/client.go

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package fake
18+
19+
import (
20+
"context"
21+
"encoding/json"
22+
"log"
23+
24+
"k8s.io/apimachinery/pkg/api/meta"
25+
"k8s.io/apimachinery/pkg/runtime"
26+
"k8s.io/apimachinery/pkg/runtime/schema"
27+
"k8s.io/client-go/kubernetes/scheme"
28+
"k8s.io/client-go/testing"
29+
30+
"sigs.k8s.io/controller-runtime/pkg/client"
31+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
32+
)
33+
34+
type fakeClient struct {
35+
tracker testing.ObjectTracker
36+
}
37+
38+
var _ client.Client = &fakeClient{}
39+
40+
// NewFakeClient creates a new fake client for testing.
41+
// You can choose to initialize it with a slice of runtime.Object.
42+
func NewFakeClient(initObjs ...runtime.Object) client.Client {
43+
tracker := testing.NewObjectTracker(scheme.Scheme, scheme.Codecs.UniversalDecoder())
44+
for _, obj := range initObjs {
45+
err := tracker.Add(obj)
46+
if err != nil {
47+
log.Fatalf("failed to add object: %#v, error: %v", obj, err)
48+
return nil
49+
}
50+
}
51+
return &fakeClient{
52+
tracker: tracker,
53+
}
54+
}
55+
56+
func (c *fakeClient) Get(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
57+
gvr, err := getGVRFromObject(obj)
58+
if err != nil {
59+
return err
60+
}
61+
o, err := c.tracker.Get(gvr, key.Namespace, key.Name)
62+
if err != nil {
63+
return err
64+
}
65+
j, err := json.Marshal(o)
66+
if err != nil {
67+
return err
68+
}
69+
decoder := scheme.Codecs.UniversalDecoder()
70+
_, _, err = decoder.Decode(j, nil, obj)
71+
return err
72+
}
73+
74+
func (c *fakeClient) List(ctx context.Context, opts *client.ListOptions, list runtime.Object) error {
75+
gvk := opts.Raw.TypeMeta.GroupVersionKind()
76+
gvr, _ := meta.UnsafeGuessKindToResource(gvk)
77+
o, err := c.tracker.List(gvr, gvk, opts.Namespace)
78+
if err != nil {
79+
return err
80+
}
81+
j, err := json.Marshal(o)
82+
if err != nil {
83+
return err
84+
}
85+
decoder := scheme.Codecs.UniversalDecoder()
86+
_, _, err = decoder.Decode(j, nil, list)
87+
return err
88+
}
89+
90+
func (c *fakeClient) Create(ctx context.Context, obj runtime.Object) error {
91+
gvr, err := getGVRFromObject(obj)
92+
if err != nil {
93+
return err
94+
}
95+
accessor, err := meta.Accessor(obj)
96+
if err != nil {
97+
return err
98+
}
99+
return c.tracker.Create(gvr, obj, accessor.GetNamespace())
100+
}
101+
102+
func (c *fakeClient) Delete(ctx context.Context, obj runtime.Object) error {
103+
gvr, err := getGVRFromObject(obj)
104+
if err != nil {
105+
return err
106+
}
107+
accessor, err := meta.Accessor(obj)
108+
if err != nil {
109+
return err
110+
}
111+
return c.tracker.Delete(gvr, accessor.GetNamespace(), accessor.GetName())
112+
}
113+
114+
func (c *fakeClient) Update(ctx context.Context, obj runtime.Object) error {
115+
gvr, err := getGVRFromObject(obj)
116+
if err != nil {
117+
return err
118+
}
119+
accessor, err := meta.Accessor(obj)
120+
if err != nil {
121+
return err
122+
}
123+
return c.tracker.Update(gvr, obj, accessor.GetNamespace())
124+
}
125+
126+
func getGVRFromObject(obj runtime.Object) (schema.GroupVersionResource, error) {
127+
gvk, err := apiutil.GVKForObject(obj, scheme.Scheme)
128+
if err != nil {
129+
return schema.GroupVersionResource{}, err
130+
}
131+
gvr, _ := meta.UnsafeGuessKindToResource(gvk)
132+
return gvr, nil
133+
}
Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,24 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
// Code generated by lister-gen. DO NOT EDIT.
17+
package fake
1818

19-
package v1
19+
import (
20+
"testing"
2021

21-
// HorizontalPodAutoscalerListerExpansion allows custom methods to be added to
22-
// HorizontalPodAutoscalerLister.
23-
type HorizontalPodAutoscalerListerExpansion interface{}
22+
. "github.com/onsi/ginkgo"
23+
. "github.com/onsi/gomega"
24+
"sigs.k8s.io/controller-runtime/pkg/test"
2425

25-
// HorizontalPodAutoscalerNamespaceListerExpansion allows custom methods to be added to
26-
// HorizontalPodAutoscalerNamespaceLister.
27-
type HorizontalPodAutoscalerNamespaceListerExpansion interface{}
26+
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
27+
)
28+
29+
func TestSource(t *testing.T) {
30+
RegisterFailHandler(Fail)
31+
RunSpecsWithDefaultAndCustomReporters(t, "Controller Integration Suite", []Reporter{test.NewlineReporter{}})
32+
}
33+
34+
var _ = BeforeSuite(func(done Done) {
35+
logf.SetLogger(logf.ZapLogger(false))
36+
close(done)
37+
}, 60)

0 commit comments

Comments
 (0)