Skip to content

Commit 7757474

Browse files
committed
Review: Read mock objects via a YAML declaration
1 parent eda9364 commit 7757474

File tree

2 files changed

+93
-38
lines changed

2 files changed

+93
-38
lines changed

pkg/mock/mock_data_collector.go

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package mock
22

33
import (
4+
"bytes"
45
"embed"
56
"io"
67
"log"
@@ -12,64 +13,63 @@ import (
1213
"go.uber.org/mock/gomock"
1314
"helm.sh/helm/v3/pkg/cli"
1415
"helm.sh/helm/v3/pkg/release"
15-
appsv1 "k8s.io/api/apps/v1"
16-
corev1 "k8s.io/api/core/v1"
17-
rbacv1 "k8s.io/api/rbac/v1"
1816
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1917
apiextensionsfake "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake"
20-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2118
"k8s.io/apimachinery/pkg/runtime"
2219
"k8s.io/client-go/kubernetes/fake"
20+
"k8s.io/client-go/kubernetes/scheme"
2321
"k8s.io/client-go/rest"
2422
metricsfake "k8s.io/metrics/pkg/client/clientset/versioned/fake"
25-
"k8s.io/utils/ptr"
2623
"sigs.k8s.io/yaml"
2724
)
2825

2926
//go:embed testdata/crds.yaml
27+
//go:embed testdata/objects.yaml
3028
var testDataFS embed.FS
3129

30+
func loadObjectsFromYAML(filename string) ([]runtime.Object, error) {
31+
data, err := testDataFS.ReadFile(filename)
32+
if err != nil {
33+
return nil, err
34+
}
35+
36+
var objects []runtime.Object
37+
38+
// Split YAML documents by "---"
39+
docs := bytes.Split(data, []byte("---"))
40+
41+
for _, doc := range docs {
42+
doc = bytes.TrimSpace(doc)
43+
if len(doc) == 0 {
44+
continue
45+
}
46+
47+
// Use the universal deserializer directly
48+
obj, _, err := scheme.Codecs.UniversalDeserializer().Decode(doc, nil, nil)
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
if obj != nil {
54+
objects = append(objects, obj)
55+
}
56+
}
57+
return objects, nil
58+
}
59+
3260
func SetupMockDataCollector(t *testing.T) *data_collector.DataCollector {
3361
t.Helper()
3462

3563
tmpDir := t.TempDir()
3664

37-
// Seed fake objects (namespace default implied by metadata)
38-
objs := []runtime.Object{
39-
&corev1.Pod{
40-
ObjectMeta: metav1.ObjectMeta{Name: "pod-1", Namespace: "default"},
41-
Spec: corev1.PodSpec{
42-
Containers: []corev1.Container{{Name: "c1", Image: "nginx:latest"}},
43-
},
44-
},
45-
&corev1.Service{
46-
ObjectMeta: metav1.ObjectMeta{Name: "svc-1", Namespace: "default"},
47-
Spec: corev1.ServiceSpec{Selector: map[string]string{"app": "demo"}},
48-
},
49-
&appsv1.Deployment{
50-
ObjectMeta: metav1.ObjectMeta{Name: "dep-1", Namespace: "default"},
51-
Spec: appsv1.DeploymentSpec{
52-
Replicas: ptr.To(int32(1)),
53-
Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"app": "demo"}},
54-
Template: corev1.PodTemplateSpec{
55-
ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"app": "demo"}},
56-
Spec: corev1.PodSpec{
57-
Containers: []corev1.Container{{Name: "dep-c1", Image: "nginx:latest"}},
58-
},
59-
},
60-
},
61-
},
62-
&rbacv1.Role{
63-
ObjectMeta: metav1.ObjectMeta{Name: "role-1", Namespace: "default"},
64-
Rules: []rbacv1.PolicyRule{{APIGroups: []string{""}, Resources: []string{"pods"}, Verbs: []string{"get"}}},
65-
},
66-
&corev1.ConfigMap{
67-
ObjectMeta: metav1.ObjectMeta{Name: "cm-1", Namespace: "default"},
68-
Data: map[string]string{"k": "v"},
69-
},
65+
// Load objects from YAML instead of hardcoding
66+
objs, err := loadObjectsFromYAML("testdata/objects.yaml")
67+
if err != nil {
68+
t.Fatalf("Failed to load test objects: %v", err)
7069
}
7170

7271
client := fake.NewSimpleClientset(objs...)
72+
7373
// Mock rest.Config
7474
restConfig := &rest.Config{
7575
Host: "https://mock-k8s-server",

pkg/mock/testdata/objects.yaml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: pod-1
5+
namespace: default
6+
spec:
7+
containers:
8+
- name: c1
9+
image: nginx:latest
10+
---
11+
apiVersion: v1
12+
kind: Service
13+
metadata:
14+
name: svc-1
15+
namespace: default
16+
spec:
17+
selector:
18+
app: demo
19+
---
20+
apiVersion: apps/v1
21+
kind: Deployment
22+
metadata:
23+
name: dep-1
24+
namespace: default
25+
spec:
26+
replicas: 1
27+
selector:
28+
matchLabels:
29+
app: demo
30+
template:
31+
metadata:
32+
labels:
33+
app: demo
34+
spec:
35+
containers:
36+
- name: dep-c1
37+
image: nginx:latest
38+
---
39+
apiVersion: rbac.authorization.k8s.io/v1
40+
kind: Role
41+
metadata:
42+
name: role-1
43+
namespace: default
44+
rules:
45+
- apiGroups: [""]
46+
resources: ["pods"]
47+
verbs: ["get"]
48+
---
49+
apiVersion: v1
50+
kind: ConfigMap
51+
metadata:
52+
name: cm-1
53+
namespace: default
54+
data:
55+
k: v

0 commit comments

Comments
 (0)