@@ -10,14 +10,24 @@ import (
10
10
"time"
11
11
12
12
"github.com/nginxinc/nginx-k8s-supportpkg/pkg/data_collector"
13
+ "helm.sh/helm/v3/pkg/cli"
14
+ "helm.sh/helm/v3/pkg/release"
13
15
14
16
appsv1 "k8s.io/api/apps/v1"
15
17
corev1 "k8s.io/api/core/v1"
16
18
rbacv1 "k8s.io/api/rbac/v1"
17
19
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
20
"k8s.io/apimachinery/pkg/runtime"
19
21
22
+ helmclient "github.com/mittwald/go-helm-client"
23
+ mockHelmClient "github.com/mittwald/go-helm-client/mock"
24
+ "go.uber.org/mock/gomock"
25
+
26
+ apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
27
+ apiextensionsfake "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/fake"
20
28
"k8s.io/client-go/kubernetes/fake"
29
+ "k8s.io/client-go/rest"
30
+ metricsfake "k8s.io/metrics/pkg/client/clientset/versioned/fake"
21
31
)
22
32
23
33
// helper creates int32 ptr
@@ -64,34 +74,67 @@ func setupDataCollector(t *testing.T) *data_collector.DataCollector {
64
74
}
65
75
66
76
client := fake .NewSimpleClientset (objs ... )
77
+ // Mock rest.Config
78
+ restConfig := & rest.Config {
79
+ Host : "https://mock-k8s-server" ,
80
+ }
81
+
82
+ // Create a CRD clientset (using the real clientset, but not actually connecting)
83
+ crd := & apiextensionsv1.CustomResourceDefinition {
84
+ ObjectMeta : metav1.ObjectMeta {
85
+ Name : "testcrd.example.com" ,
86
+ },
87
+ Spec : apiextensionsv1.CustomResourceDefinitionSpec {
88
+ Group : "example.com" ,
89
+ Names : apiextensionsv1.CustomResourceDefinitionNames {
90
+ Kind : "TestCRD" ,
91
+ Plural : "testcrds" ,
92
+ Singular : "testcrd" ,
93
+ },
94
+ Scope : apiextensionsv1 .NamespaceScoped ,
95
+ Versions : []apiextensionsv1.CustomResourceDefinitionVersion {
96
+ {
97
+ Name : "v1" ,
98
+ Served : true ,
99
+ Storage : true ,
100
+ },
101
+ },
102
+ },
103
+ }
104
+ // crdClient := &apiextensionsclientset.Clientset{}
105
+ crdClient := apiextensionsfake .NewSimpleClientset (crd )
106
+ metricsClient := metricsfake .NewSimpleClientset ()
107
+ // helmClient := &FakeHelmClient{}
108
+
109
+ ctrl := gomock .NewController (t )
110
+ defer ctrl .Finish ()
111
+ helmClient := mockHelmClient .NewMockClient (ctrl )
112
+ if helmClient == nil {
113
+ t .Fail ()
114
+ }
115
+ helmClient .EXPECT ().GetSettings ().Return (& cli.EnvSettings {}).AnyTimes ()
116
+ var mockedRelease = release.Release {Name : "test" , Namespace : "test" , Manifest : "apiVersion: v1\n kind: ConfigMap\n metadata:\n name: example-config\n namespace: default\n data:\n key: value\n " }
117
+ helmClient .EXPECT ().ListDeployedReleases ().Return ([]* release.Release {& mockedRelease }, nil ).AnyTimes ()
67
118
68
119
return & data_collector.DataCollector {
69
- BaseDir : tmpDir ,
70
- Namespaces : []string {"default" },
71
- Logger : log .New (io .Discard , "" , 0 ),
72
- K8sCoreClientSet : client ,
120
+ BaseDir : tmpDir ,
121
+ Namespaces : []string {"default" },
122
+ Logger : log .New (io .Discard , "" , 0 ),
123
+ K8sCoreClientSet : client ,
124
+ K8sCrdClientSet : crdClient ,
125
+ K8sRestConfig : restConfig ,
126
+ K8sMetricsClientSet : metricsClient ,
127
+ K8sHelmClientSet : map [string ]helmclient.Client {"default" : helmClient },
128
+
73
129
// Leave other client sets nil; we will not execute jobs that depend on them in this focused test.
74
130
}
75
131
}
76
132
77
133
func TestCommonJobList_SelectedJobsProduceFiles (t * testing.T ) {
78
134
dc := setupDataCollector (t )
79
-
80
- // Jobs we explicitly validate (keep focused; others require additional fake clients)
81
- targetJobs := map [string ]struct {}{
82
- "pod-list" : {},
83
- "service-list" : {},
84
- "deployment-list" : {},
85
- "roles-list" : {},
86
- "configmap-list" : {},
87
- }
88
-
89
135
jobList := CommonJobList ()
90
136
91
137
for _ , job := range jobList {
92
- if _ , ok := targetJobs [job .Name ]; ! ok {
93
- continue
94
- }
95
138
96
139
ch := make (chan JobResult , 1 )
97
140
ctx , cancel := context .WithTimeout (context .Background (), 2 * time .Second )
0 commit comments