Skip to content

Commit a334277

Browse files
committed
Replace mock clients with mock kubeapiserver
The mock clients are hard to version with changes in controller-runtime, and we have better coverage with our mock kubeapiserver now.
1 parent 18dbaf5 commit a334277

File tree

7 files changed

+55
-439
lines changed

7 files changed

+55
-439
lines changed

examples/guestbook-operator/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ require (
103103
sigs.k8s.io/cli-utils v0.33.0 // indirect
104104
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
105105
sigs.k8s.io/kubebuilder-declarative-pattern/applylib v0.0.0-20221111030210-e034bc5469a5 // indirect
106+
sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver v0.0.0-20221111030210-e034bc5469a5 // indirect
106107
sigs.k8s.io/kustomize/api v0.12.1 // indirect
107108
sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect
108109
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect

examples/guestbook-operator/go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,7 @@ sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h6
712712
sigs.k8s.io/kubebuilder-declarative-pattern/applylib v0.0.0-20221111030210-e034bc5469a5 h1:o4Wltkyn3ddIHD6PDSNDc/H6Tvrnb8Po4J3nRepiUKI=
713713
sigs.k8s.io/kubebuilder-declarative-pattern/applylib v0.0.0-20221111030210-e034bc5469a5/go.mod h1:pVjrMOBKjOFQ/3hktlrseM3biE1lO0zACpfJuwYYNDc=
714714
sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver v0.0.0-20221111030210-e034bc5469a5 h1:jLa+teeZ5bmymaj82MN5I3Izjz/Ampdz0PlyL5+nafk=
715+
sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver v0.0.0-20221111030210-e034bc5469a5/go.mod h1:DXh2lUaKUJhMW9cGc7A72yssGyu+rTrZgVelYOupXRM=
715716
sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM=
716717
sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s=
717718
sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk=

pkg/test/golden/validator.go

Lines changed: 53 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@ import (
3232
"k8s.io/apimachinery/pkg/runtime/serializer/json"
3333
"k8s.io/apimachinery/pkg/types"
3434
"k8s.io/apimachinery/pkg/util/diff"
35+
"k8s.io/client-go/rest"
36+
"sigs.k8s.io/controller-runtime/pkg/client"
37+
"sigs.k8s.io/controller-runtime/pkg/manager"
3538
"sigs.k8s.io/controller-runtime/pkg/scheme"
39+
"sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver"
3640
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon"
3741
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/loaders"
3842
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative"
3943
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative/pkg/manifest"
40-
"sigs.k8s.io/kubebuilder-declarative-pattern/pkg/test/mocks"
4144
"sigs.k8s.io/kustomize/kyaml/filesys"
4245
)
4346

@@ -51,18 +54,47 @@ func NewValidator(t *testing.T, b *scheme.Builder) *validator {
5154
addon.Init()
5255
v.findChannelsPath()
5356

54-
v.client = mocks.NewClient(v.scheme)
55-
v.mgr = mocks.NewManager(v.client)
56-
v.mgr.Scheme = v.scheme
57+
k8s, err := mockkubeapiserver.NewMockKubeAPIServer(":0")
58+
if err != nil {
59+
t.Fatalf("error building mock kube-apiserver: %v", err)
60+
}
61+
62+
addr, err := k8s.StartServing()
63+
if err != nil {
64+
t.Errorf("error starting mock kube-apiserver: %v", err)
65+
}
66+
v.k8s = k8s
67+
68+
t.Cleanup(func() {
69+
if err := k8s.Stop(); err != nil {
70+
t.Errorf("error stopping mock kube-apiserver: %v", err)
71+
}
72+
})
73+
74+
restConfig := &rest.Config{
75+
Host: addr.String(),
76+
}
77+
78+
mgr, err := manager.New(restConfig, manager.Options{
79+
Scheme: v.scheme,
80+
})
81+
if err != nil {
82+
t.Fatalf("error building manager: %v", err)
83+
}
84+
v.client = mgr.GetClient()
85+
v.mgr = mgr
5786
return v
5887
}
5988

6089
type validator struct {
6190
T *testing.T
6291
scheme *runtime.Scheme
6392
TestDir string
64-
mgr mocks.Manager
65-
client *mocks.FakeClient
93+
94+
k8s *mockkubeapiserver.MockKubeAPIServer
95+
96+
mgr manager.Manager
97+
client client.Client
6698
}
6799

68100
// findChannelsPath will search for a channels directory, which is helpful when running under bazel
@@ -129,11 +161,11 @@ func (v *validator) findChannelsPath() {
129161
t.Logf("flagChannel = %s", loaders.FlagChannel)
130162
}
131163

132-
func (v *validator) Manager() *mocks.Manager {
133-
return &v.mgr
164+
func (v *validator) Manager() manager.Manager {
165+
return v.mgr
134166
}
135167

136-
func (v *validator) Client() *mocks.FakeClient {
168+
func (v *validator) Client() client.Client {
137169
return v.client
138170
}
139171

@@ -179,12 +211,14 @@ func (v *validator) Validate(r declarative.Reconciler) {
179211
continue
180212
}
181213

182-
objectsToCleanup := []runtime.Object{}
214+
objectsToCleanup := []client.Object{}
183215
// Check if there is a file containing side inputs for this test
184216
sideInputPath := strings.Replace(p, ".in.yaml", ".side_in.yaml", -1)
185217
sideInputRead, err := os.ReadFile(sideInputPath)
186218
if err != nil {
187-
t.Logf("Could not read side input file %s: %v, skipping", sideInputPath, err)
219+
if !os.IsNotExist(err) {
220+
t.Errorf("Could not read side input file %s: %v", sideInputPath, err)
221+
}
188222
} else {
189223
objs, err := manifest.ParseObjects(ctx, string(sideInputRead))
190224
if err != nil {
@@ -203,8 +237,11 @@ func (v *validator) Validate(r declarative.Reconciler) {
203237
t.Errorf("error parsing resource in %s: %v", p, err)
204238
continue
205239
}
206-
v.client.CreateRuntimeObject(ctx, decoded)
207-
objectsToCleanup = append(objectsToCleanup, decoded)
240+
obj := decoded.(client.Object)
241+
if err := v.client.Create(ctx, obj); err != nil {
242+
t.Errorf("error creating resource in %s: %v", p, err)
243+
}
244+
objectsToCleanup = append(objectsToCleanup, obj)
208245
}
209246
}
210247

@@ -307,7 +344,9 @@ func (v *validator) Validate(r declarative.Reconciler) {
307344
}
308345

309346
for _, objectToCleanup := range objectsToCleanup {
310-
v.client.DeleteRuntimeObject(ctx, objectToCleanup)
347+
if err := v.client.Delete(ctx, objectToCleanup); err != nil {
348+
t.Errorf("error deleting object: %v", err)
349+
}
311350
}
312351
}
313352
}

pkg/test/mocks/cache.go

Lines changed: 0 additions & 41 deletions
This file was deleted.

pkg/test/mocks/client.go

Lines changed: 0 additions & 168 deletions
This file was deleted.

0 commit comments

Comments
 (0)