11package mock
22
33import (
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
3028var 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+
3260func 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" ,
0 commit comments