Conditions | 3 |
Total Lines | 274 |
Code Lines | 208 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | package credentials |
||
233 | func TestProfileProvider(t *testing.T) { |
||
234 | var HOME string |
||
235 | if runtime.GOOS == "windows" { |
||
236 | HOME = "USERPROFILE" |
||
237 | } else { |
||
238 | HOME = "HOME" |
||
239 | } |
||
240 | path, ok := os.LookupEnv(HOME) |
||
241 | assert.True(t, ok) |
||
242 | os.Unsetenv(HOME) |
||
243 | |||
244 | // testcase 1, no HOME or USERPROFILE environment variable set |
||
245 | p := NewProfileProvider() |
||
246 | c, err := p.Resolve() |
||
247 | assert.Nil(t, c) |
||
248 | assert.EqualError(t, err, "The default credential file path is invalid") |
||
249 | |||
250 | originFilePath := os.Getenv(ENVCredentialFile) |
||
251 | os.Setenv(ENVCredentialFile, "") |
||
252 | defer func() { |
||
253 | os.Setenv(ENVCredentialFile, originFilePath) |
||
254 | }() |
||
255 | c, err = p.Resolve() |
||
256 | assert.Nil(t, c) |
||
257 | assert.EqualError(t, err, "ALIBABA_CLOUD_CREDENTIALS_FILE cannot be empty") |
||
258 | |||
259 | // testcase 2, default profile object |
||
260 | os.Unsetenv(ENVCredentialFile) |
||
261 | os.Setenv(HOME, path) |
||
262 | p = NewProfileProvider() |
||
263 | value, ok := p.(*ProfileProvider) |
||
264 | assert.True(t, ok) |
||
265 | assert.Equal(t, value.Profile, "default") |
||
266 | |||
267 | // testcase 3, credential file does not exist in the default path |
||
268 | // and section name does not exist |
||
269 | p = NewProfileProvider("first") |
||
270 | value, ok = p.(*ProfileProvider) |
||
271 | assert.True(t, ok) |
||
272 | assert.Equal(t, value.Profile, "first") |
||
273 | c, err = p.Resolve() |
||
274 | assert.Nil(t, c) |
||
275 | assert.Nil(t, err) |
||
276 | |||
277 | // testcase 4, credential file path is error |
||
278 | os.Setenv(ENVCredentialFile, "../../credentials_error") |
||
279 | p = NewProfileProvider() |
||
280 | c, err = p.Resolve() |
||
281 | assert.Nil(t, c) |
||
282 | assert.True(t, strings.Contains(err.Error(), "ERROR: Can not open file")) |
||
283 | |||
284 | // create profile |
||
285 | os.Setenv(ENVCredentialFile, "./credentials") |
||
286 | |||
287 | file, err := os.Create("./credentials") |
||
288 | assert.Nil(t, err) |
||
289 | file.WriteString(inistr) |
||
290 | file.Close() |
||
291 | defer os.Remove("./credentials") |
||
292 | |||
293 | // testcase 5, section does not exist |
||
294 | p = NewProfileProvider("NonExist") |
||
295 | c, err = p.Resolve() |
||
296 | assert.Nil(t, c) |
||
297 | assert.Equal(t, "ERROR: Can not load section section 'NonExist' does not exist", err.Error()) |
||
298 | |||
299 | // testcase 6, credential type does not set |
||
300 | p = NewProfileProvider("notype") |
||
301 | c, err = p.Resolve() |
||
302 | assert.Nil(t, c) |
||
303 | assert.Equal(t, "Missing required type option error when getting key of section 'notype': key 'type' not exists", err.Error()) |
||
304 | |||
305 | // testcase 7, normal AK |
||
306 | p = NewProfileProvider() |
||
307 | c, err = p.Resolve() |
||
308 | assert.Nil(t, err) |
||
309 | // testcase 8, access_key_id key does not exist |
||
310 | p = NewProfileProvider("noak") |
||
311 | c, err = p.Resolve() |
||
312 | assert.Nil(t, c) |
||
313 | assert.Equal(t, "Missing required access_key_id option in profile for access_key", err.Error()) |
||
314 | // testcase 9, access_key_id value is empty |
||
315 | p = NewProfileProvider("emptyak") |
||
316 | c, err = p.Resolve() |
||
317 | assert.Nil(t, c) |
||
318 | assert.Equal(t, "access_key_id cannot be empty", err.Error()) |
||
319 | // testcase 10, access_key_secret key does not exist |
||
320 | p = NewProfileProvider("noaksecret") |
||
321 | c, err = p.Resolve() |
||
322 | assert.Nil(t, c) |
||
323 | assert.Equal(t, "Missing required access_key_secret option in profile for access_key", err.Error()) |
||
324 | // testcase 11, access_key_secret value is empty |
||
325 | p = NewProfileProvider("emptyaksecret") |
||
326 | c, err = p.Resolve() |
||
327 | assert.Nil(t, c) |
||
328 | assert.Equal(t, "access_key_secret cannot be empty", err.Error()) |
||
329 | |||
330 | //testcase 12, normal EcsRamRole |
||
331 | p = NewProfileProvider("ecs") |
||
332 | c, err = p.Resolve() |
||
333 | assert.Nil(t, err) |
||
334 | //testcase 13, key does not exist |
||
335 | p = NewProfileProvider("noecs") |
||
336 | c, err = p.Resolve() |
||
337 | assert.Nil(t, c) |
||
338 | assert.Equal(t, "Missing required role_name option in profile for ecs_ram_role", err.Error()) |
||
339 | //testcase 14, value is empty |
||
340 | p = NewProfileProvider("emptyecs") |
||
341 | c, err = p.Resolve() |
||
342 | assert.Nil(t, c) |
||
343 | assert.Equal(t, "role_name cannot be empty", err.Error()) |
||
344 | //testcase 15, timeout is not int |
||
345 | p = NewProfileProvider("invalidRuntimeEcs") |
||
346 | c, err = p.Resolve() |
||
347 | assert.Nil(t, c) |
||
348 | assert.Equal(t, "Please set timeout with an int value", err.Error()) |
||
349 | |||
350 | //testcase 16, normal RamRoleArn |
||
351 | p = NewProfileProvider("ram") |
||
352 | c, err = p.Resolve() |
||
353 | assert.Nil(t, err) |
||
354 | //testcase 17, access_key_id key does not exist |
||
355 | p = NewProfileProvider("noramak") |
||
356 | c, err = p.Resolve() |
||
357 | assert.Nil(t, c) |
||
358 | assert.Equal(t, "Missing required access_key_id option in profile for ram_role_arn", err.Error()) |
||
359 | //testcase 18, access_key_id value is empty |
||
360 | p = NewProfileProvider("emptyramak") |
||
361 | c, err = p.Resolve() |
||
362 | assert.Nil(t, c) |
||
363 | assert.Equal(t, "access_key_id cannot be empty", err.Error()) |
||
364 | //testcase 19, access_key_secret key does not exist |
||
365 | p = NewProfileProvider("noramsecret") |
||
366 | c, err = p.Resolve() |
||
367 | assert.Nil(t, c) |
||
368 | assert.Equal(t, "Missing required access_key_secret option in profile for ram_role_arn", err.Error()) |
||
369 | //testcase 20, access_key_secret value is empty |
||
370 | p = NewProfileProvider("emptyramsecret") |
||
371 | c, err = p.Resolve() |
||
372 | assert.Nil(t, c) |
||
373 | assert.Equal(t, "access_key_secret cannot be empty", err.Error()) |
||
374 | //testcase 21, role_arn key does not exist |
||
375 | p = NewProfileProvider("noramarn") |
||
376 | c, err = p.Resolve() |
||
377 | assert.Nil(t, c) |
||
378 | assert.Equal(t, "Missing required role_arn option in profile for ram_role_arn", err.Error()) |
||
379 | //testcase 22, role_arn value is empty |
||
380 | p = NewProfileProvider("emptyramarn") |
||
381 | c, err = p.Resolve() |
||
382 | assert.Nil(t, c) |
||
383 | assert.Equal(t, "role_arn cannot be empty", err.Error()) |
||
384 | //testcase 23, role_session_name key does not exist |
||
385 | p = NewProfileProvider("noramsessionname") |
||
386 | c, err = p.Resolve() |
||
387 | assert.Nil(t, c) |
||
388 | assert.Equal(t, "Missing required role_session_name option in profile for ram_role_arn", err.Error()) |
||
389 | //testcase 24, role_session_name value is empty |
||
390 | p = NewProfileProvider("emptyramsessionname") |
||
391 | c, err = p.Resolve() |
||
392 | assert.Nil(t, c) |
||
393 | assert.Equal(t, "role_session_name cannot be empty", err.Error()) |
||
394 | //testcase 25, role_session_expiration is not int |
||
395 | p = NewProfileProvider("invalidexpirationram") |
||
396 | c, err = p.Resolve() |
||
397 | assert.Nil(t, c) |
||
398 | assert.Equal(t, "role_session_expiration must be an int", err.Error()) |
||
399 | //testcase 26, timeout is not int |
||
400 | p = NewProfileProvider("invalidRuntimeram") |
||
401 | c, err = p.Resolve() |
||
402 | assert.Nil(t, c) |
||
403 | assert.Equal(t, "Please set timeout with an int value", err.Error()) |
||
404 | |||
405 | //testase 27, normal RsaKeyPair |
||
406 | file, err = os.Create("./pk.pem") |
||
407 | assert.Nil(t, err) |
||
408 | _, err = file.WriteString(privatekey) |
||
409 | assert.Nil(t, err) |
||
410 | file.Close() |
||
411 | |||
412 | p = NewProfileProvider("rsa") |
||
413 | c, err = p.Resolve() |
||
414 | assert.Nil(t, err) |
||
415 | defer os.Remove(`./pk.pem`) |
||
416 | //testcase 28, private_key_file key does not exist |
||
417 | p = NewProfileProvider("norsaprivate") |
||
418 | c, err = p.Resolve() |
||
419 | assert.Nil(t, c) |
||
420 | assert.Equal(t, "Missing required private_key_file option in profile for rsa_key_pair", err.Error()) |
||
421 | //testcase 29, private_key_file value is empty |
||
422 | p = NewProfileProvider("emptyrsaprivate") |
||
423 | c, err = p.Resolve() |
||
424 | assert.Nil(t, c) |
||
425 | assert.Equal(t, "private_key_file cannot be empty", err.Error()) |
||
426 | //testcase 30, public_key_id key does not exist |
||
427 | p = NewProfileProvider("norsapublic") |
||
428 | c, err = p.Resolve() |
||
429 | assert.Nil(t, c) |
||
430 | assert.Equal(t, "Missing required public_key_id option in profile for rsa_key_pair", err.Error()) |
||
431 | //testcase 31, public_key_id value is empty |
||
432 | p = NewProfileProvider("emptyrsapublic") |
||
433 | c, err = p.Resolve() |
||
434 | assert.Nil(t, c) |
||
435 | assert.Equal(t, "public_key_id cannot be empty", err.Error()) |
||
436 | //testcase 32, session_expiration is not int |
||
437 | p = NewProfileProvider("invalidexpirationrsa") |
||
438 | c, err = p.Resolve() |
||
439 | assert.Nil(t, c) |
||
440 | assert.Equal(t, "session_expiration must be an int", err.Error()) |
||
441 | //testcase 33, timeout is not int |
||
442 | p = NewProfileProvider("invalidTimeoutrsa") |
||
443 | c, err = p.Resolve() |
||
444 | assert.Nil(t, c) |
||
445 | assert.Equal(t, "Please set timeout with an int value", err.Error()) |
||
446 | //testcase 34, connect_timeout is not int |
||
447 | p = NewProfileProvider("invalidConnectTimeoutrsa") |
||
448 | c, err = p.Resolve() |
||
449 | assert.Nil(t, c) |
||
450 | assert.Equal(t, "Please set connect_timeout with an int value", err.Error()) |
||
451 | |||
452 | //testcase 35, normal RamRoleArn |
||
453 | p = NewProfileProvider("sts") |
||
454 | c, err = p.Resolve() |
||
455 | assert.Nil(t, err) |
||
456 | //testcase 36, access_key_id key does not exist |
||
457 | p = NewProfileProvider("nostskey") |
||
458 | c, err = p.Resolve() |
||
459 | assert.Nil(t, c) |
||
460 | assert.Equal(t, "Missing required access_key_id option in profile for sts", err.Error()) |
||
461 | //testcase 37, access_key_id value is empty |
||
462 | p = NewProfileProvider("emptystskey") |
||
463 | c, err = p.Resolve() |
||
464 | assert.Nil(t, c) |
||
465 | assert.Equal(t, "access_key_id cannot be empty", err.Error()) |
||
466 | //testcase 38, access_key_secret key does not exist |
||
467 | p = NewProfileProvider("nostssecret") |
||
468 | c, err = p.Resolve() |
||
469 | assert.Nil(t, c) |
||
470 | assert.Equal(t, "Missing required access_key_secret option in profile for sts", err.Error()) |
||
471 | //testcase 39, access_key_secret value is empty |
||
472 | p = NewProfileProvider("emptystssecret") |
||
473 | c, err = p.Resolve() |
||
474 | assert.Nil(t, c) |
||
475 | assert.Equal(t, "access_key_secret cannot be empty", err.Error()) |
||
476 | //testcase 40, security_token access_key_secretkey does not exist |
||
477 | p = NewProfileProvider("noststoken") |
||
478 | c, err = p.Resolve() |
||
479 | assert.Nil(t, c) |
||
480 | assert.Equal(t, "Missing required security_token option in profile for sts", err.Error()) |
||
481 | //testcase 41, security_token value is empty |
||
482 | p = NewProfileProvider("emptyststoken") |
||
483 | c, err = p.Resolve() |
||
484 | assert.Nil(t, c) |
||
485 | assert.Equal(t, "security_token cannot be empty", err.Error()) |
||
486 | |||
487 | //testcase 42, normal RamRoleArn |
||
488 | p = NewProfileProvider("bearer") |
||
489 | c, err = p.Resolve() |
||
490 | assert.Nil(t, err) |
||
491 | //testcase 43, key does not exist |
||
492 | p = NewProfileProvider("nobearer") |
||
493 | c, err = p.Resolve() |
||
494 | assert.Nil(t, c) |
||
495 | assert.Equal(t, "Missing required bearer_token option in profile for bearer", err.Error()) |
||
496 | //testcase 44, value is empty |
||
497 | p = NewProfileProvider("emptybearer") |
||
498 | c, err = p.Resolve() |
||
499 | assert.Nil(t, c) |
||
500 | assert.Equal(t, "bearer_token cannot be empty", err.Error()) |
||
501 | |||
502 | //testcase 45, credential type is error |
||
503 | p = NewProfileProvider("error_type") |
||
504 | c, err = p.Resolve() |
||
505 | assert.Nil(t, c) |
||
506 | assert.Equal(t, "Invalid type option, support: access_key, sts, ecs_ram_role, ram_role_arn, rsa_key_pair", err.Error()) |
||
507 | } |
||
548 |