@@ -35,6 +35,7 @@ import (
35
35
36
36
corev1 "k8s.io/api/core/v1"
37
37
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
38
+ "k8s.io/client-go/kubernetes"
38
39
fake "k8s.io/client-go/kubernetes/fake"
39
40
azureprovider "sigs.k8s.io/cloud-provider-azure/pkg/provider"
40
41
azureconfig "sigs.k8s.io/cloud-provider-azure/pkg/provider/config"
@@ -116,169 +117,115 @@ func TestGetRuntimeClassForPod(t *testing.T) {
116
117
// To run this unit test successfully, need to ensure /etc/kubernetes/azure.json nonexistent.
117
118
func TestGetCloudProvider (t * testing.T ) {
118
119
var (
119
- fakeCredFile = testutil .GetWorkDirPath ("fake-cred-file.json" , t )
120
- fakeKubeConfig = testutil .GetWorkDirPath ("fake-kube-config" , t )
121
- emptyKubeConfig = testutil .GetWorkDirPath ("empty-kube-config" , t )
122
- notExistKubeConfig = testutil .GetWorkDirPath ("non-exist.json" , t )
120
+ fakeCredFile = testutil .GetWorkDirPath ("fake-cred-file.json" , t )
123
121
)
124
-
125
- fakeContent := `apiVersion: v1
126
- clusters:
127
- - cluster:
128
- server: https://localhost:8080
129
- name: foo-cluster
130
- contexts:
131
- - context:
132
- cluster: foo-cluster
133
- user: foo-user
134
- namespace: bar
135
- name: foo-context
136
- current-context: foo-context
137
- kind: Config
138
- users:
139
- - name: foo-user
140
- user:
141
- exec:
142
- apiVersion: client.authentication.k8s.io/v1beta1
143
- args:
144
- - arg-1
145
- - arg-2
146
- command: foo-command
147
- `
148
-
149
- if err := createTestFile (emptyKubeConfig ); err != nil {
150
- t .Error (err )
151
- }
152
- defer func () {
153
- if err := os .Remove (emptyKubeConfig ); err != nil {
154
- t .Error (err )
155
- }
156
- }()
157
-
158
122
tests := []struct {
159
123
desc string
160
124
createFakeCredFile bool
161
- createFakeKubeConfig bool
162
125
setFederatedWorkloadIdentityEnv bool
163
- kubeconfig string
126
+ kubeclient kubernetes. Interface
164
127
userAgent string
165
128
allowEmptyCloudConfig bool
166
129
aadFederatedTokenFile string
167
130
useFederatedWorkloadIdentityExtension bool
168
131
aadClientID string
169
132
tenantID string
170
- expectedErr testutil.TestError
133
+ expectedErr * testutil.TestError
171
134
}{
172
135
{
173
136
desc : "out of cluster, no kubeconfig, no credential file" ,
174
- kubeconfig : "" ,
137
+ kubeclient : nil ,
175
138
allowEmptyCloudConfig : true ,
176
- expectedErr : testutil. TestError {} ,
139
+ expectedErr : nil ,
177
140
},
178
141
{
179
142
desc : "[failure][disallowEmptyCloudConfig] out of cluster, no kubeconfig, no credential file" ,
180
- kubeconfig : "" ,
143
+ kubeclient : nil ,
181
144
allowEmptyCloudConfig : false ,
182
- expectedErr : testutil.TestError {
145
+ expectedErr : & testutil.TestError {
183
146
DefaultError : fmt .Errorf ("no cloud config provided, error" ),
184
147
},
185
148
},
186
149
{
187
150
desc : "[failure] out of cluster & in cluster, specify a non-exist kubeconfig, no credential file" ,
188
- kubeconfig : notExistKubeConfig ,
151
+ kubeclient : nil ,
189
152
allowEmptyCloudConfig : true ,
190
- expectedErr : testutil.TestError {},
191
- },
192
- {
193
- desc : "[failure] out of cluster & in cluster, specify a empty kubeconfig, no credential file" ,
194
- kubeconfig : emptyKubeConfig ,
195
- allowEmptyCloudConfig : true ,
196
- expectedErr : testutil.TestError {
197
- DefaultError : fmt .Errorf ("failed to get KubeClient: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable" ),
198
- },
153
+ expectedErr : nil ,
199
154
},
200
155
{
201
156
desc : "[failure] out of cluster & in cluster, specify a fake kubeconfig, no credential file" ,
202
- createFakeKubeConfig : true ,
203
- kubeconfig : fakeKubeConfig ,
157
+ kubeclient : fake .NewSimpleClientset (),
204
158
allowEmptyCloudConfig : true ,
205
- expectedErr : testutil. TestError {} ,
159
+ expectedErr : nil ,
206
160
},
207
161
{
208
162
desc : "[success] out of cluster & in cluster, no kubeconfig, a fake credential file" ,
209
163
createFakeCredFile : true ,
210
- kubeconfig : "" ,
164
+ kubeclient : nil ,
211
165
userAgent : "useragent" ,
212
166
allowEmptyCloudConfig : true ,
213
- expectedErr : testutil. TestError {} ,
167
+ expectedErr : nil ,
214
168
},
215
169
{
216
170
desc : "[success] get azure client with workload identity" ,
217
- createFakeKubeConfig : true ,
218
171
createFakeCredFile : true ,
219
172
setFederatedWorkloadIdentityEnv : true ,
220
- kubeconfig : fakeKubeConfig ,
173
+ kubeclient : fake . NewSimpleClientset () ,
221
174
userAgent : "useragent" ,
222
175
useFederatedWorkloadIdentityExtension : true ,
223
176
aadFederatedTokenFile : "fake-token-file" ,
224
177
aadClientID : "fake-client-id" ,
225
178
tenantID : "fake-tenant-id" ,
226
- expectedErr : testutil. TestError {} ,
179
+ expectedErr : nil ,
227
180
},
228
181
}
229
182
230
183
for _ , test := range tests {
231
- if test .createFakeKubeConfig {
232
- if err := createTestFile (fakeKubeConfig ); err != nil {
233
- t .Error (err )
234
- }
235
- defer func () {
236
- if err := os .Remove (fakeKubeConfig ); err != nil && ! os .IsNotExist (err ) {
184
+ test := test
185
+ t .Run (test .desc , func (t * testing.T ) {
186
+ if test .createFakeCredFile {
187
+ if err := createTestFile (fakeCredFile ); err != nil {
237
188
t .Error (err )
238
189
}
239
- }()
240
-
241
- if err := os .WriteFile (fakeKubeConfig , []byte (fakeContent ), 0666 ); err != nil {
242
- t .Error (err )
190
+ defer func () {
191
+ if err := os .Remove (fakeCredFile ); err != nil && ! os .IsNotExist (err ) {
192
+ t .Error (err )
193
+ }
194
+ }()
195
+
196
+ originalCredFile , ok := os .LookupEnv (DefaultAzureCredentialFileEnv )
197
+ if ok {
198
+ defer os .Setenv (DefaultAzureCredentialFileEnv , originalCredFile )
199
+ } else {
200
+ defer os .Unsetenv (DefaultAzureCredentialFileEnv )
201
+ }
202
+ os .Setenv (DefaultAzureCredentialFileEnv , fakeCredFile )
243
203
}
244
- }
245
- if test .createFakeCredFile {
246
- if err := createTestFile ( fakeCredFile ); err != nil {
247
- t .Error ( err )
204
+ if test . setFederatedWorkloadIdentityEnv {
205
+ t . Setenv ( "AZURE_TENANT_ID" , test .tenantID )
206
+ t . Setenv ( "AZURE_CLIENT_ID" , test . aadClientID )
207
+ t .Setenv ( "AZURE_FEDERATED_TOKEN_FILE" , test . aadFederatedTokenFile )
248
208
}
249
- defer func () {
250
- if err := os .Remove (fakeCredFile ); err != nil && ! os .IsNotExist (err ) {
251
- t .Error (err )
252
- }
253
- }()
254
209
255
- originalCredFile , ok := os .LookupEnv (DefaultAzureCredentialFileEnv )
256
- if ok {
257
- defer os .Setenv (DefaultAzureCredentialFileEnv , originalCredFile )
210
+ cloud , err := getCloudProvider (context .Background (), test .kubeclient , "" , "" , "" , test .userAgent , test .allowEmptyCloudConfig )
211
+ if test .expectedErr != nil {
212
+ if err == nil {
213
+ t .Errorf ("desc: %s,\n input: %q, getCloudProvider err: %v, expectedErr: %v" , test .desc , test .kubeclient , err , test .expectedErr )
214
+ }
215
+ if ! testutil .AssertError (err , test .expectedErr ) && ! strings .Contains (err .Error (), test .expectedErr .DefaultError .Error ()) {
216
+ t .Errorf ("desc: %s,\n input: %q, getCloudProvider err: %v, expectedErr: %v" , test .desc , test .kubeclient , err , test .expectedErr )
217
+ }
218
+ }
219
+ if cloud == nil {
220
+ t .Errorf ("return value of getCloudProvider should not be nil even there is error" )
258
221
} else {
259
- defer os .Unsetenv (DefaultAzureCredentialFileEnv )
222
+ assert .Equal (t , test .userAgent , cloud .UserAgent )
223
+ assert .Equal (t , cloud .AADFederatedTokenFile , test .aadFederatedTokenFile )
224
+ assert .Equal (t , cloud .UseFederatedWorkloadIdentityExtension , test .useFederatedWorkloadIdentityExtension )
225
+ assert .Equal (t , cloud .AADClientID , test .aadClientID )
226
+ assert .Equal (t , cloud .TenantID , test .tenantID )
260
227
}
261
- os .Setenv (DefaultAzureCredentialFileEnv , fakeCredFile )
262
- }
263
- if test .setFederatedWorkloadIdentityEnv {
264
- t .Setenv ("AZURE_TENANT_ID" , test .tenantID )
265
- t .Setenv ("AZURE_CLIENT_ID" , test .aadClientID )
266
- t .Setenv ("AZURE_FEDERATED_TOKEN_FILE" , test .aadFederatedTokenFile )
267
- }
268
-
269
- cloud , err := getCloudProvider (context .Background (), test .kubeconfig , "" , "" , "" , test .userAgent , test .allowEmptyCloudConfig , false , 5 , 10 )
270
- if ! testutil .AssertError (err , & test .expectedErr ) && ! strings .Contains (err .Error (), test .expectedErr .DefaultError .Error ()) {
271
- t .Errorf ("desc: %s,\n input: %q, getCloudProvider err: %v, expectedErr: %v" , test .desc , test .kubeconfig , err , test .expectedErr )
272
- }
273
- if cloud == nil {
274
- t .Errorf ("return value of getCloudProvider should not be nil even there is error" )
275
- } else {
276
- assert .Equal (t , test .userAgent , cloud .UserAgent )
277
- assert .Equal (t , cloud .AADFederatedTokenFile , test .aadFederatedTokenFile )
278
- assert .Equal (t , cloud .UseFederatedWorkloadIdentityExtension , test .useFederatedWorkloadIdentityExtension )
279
- assert .Equal (t , cloud .AADClientID , test .aadClientID )
280
- assert .Equal (t , cloud .TenantID , test .tenantID )
281
- }
228
+ })
282
229
}
283
230
}
284
231
0 commit comments