@@ -32,6 +32,37 @@ gIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW
32
32
G6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI
33
33
7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA==
34
34
-----END RSA PRIVATE KEY-----`
35
+ testEncryptedPrivateKeyConf = `-----BEGIN RSA PRIVATE KEY-----
36
+ Proc-Type: 4,ENCRYPTED
37
+ DEK-Info: DES-EDE3-CBC,05B7ACED45203763
38
+
39
+ bKbv8X2oyfxwp55w3MVKj1bfWnhvQgyqJ/1dER53STao3qRS26epRoBc0BoLtrNj
40
+ L+Wfa3NeuEinetDYKRwWGHZqvbs/3PD5OKIXW1y/EAlg1vr6JWX8KxhQ0PzGJOdQ
41
+ KPcB2duDtlNJ4awoGEsSp/qYyJLKOKpcz893OWTe3Oi9aQpzuL+kgH6VboCUdwdl
42
+ Ub7YyTMFBkGzzjOXV/iSJDaxvVUIZt7CQS/DkBq4IHXX8iFUDzh6L297/BuRp3Q8
43
+ hDL4yQacl2F2yCWpUoNNkbPpe6oOmL8JHrxXxo+u0pSJELXx0sjWMn7bSRfgFFIE
44
+ k08y4wXZeoxHiQDhHmQI+YTikgqnxEWtDYhHYvWudVQY6Wcf1Fdypa1v4I3gv4S9
45
+ QwjDRbRcrnPxMkxWmQEM6xGCwWBj8wmFyIQoEA5MJuQZxWdyptEKVtwwI1TB9etn
46
+ SlXPUl125dYYBu2ynmR96nBVEZd6BWl+iFeeZnqxDHABOB0AvpI61vt/6c7tIimC
47
+ YciZs74XZH/ERs55p0Ng/G23XNu+UGQQptrr2kyRR5JrS0UGKVjivydIK5Lus4c4
48
+ NTaKyEJNMbvSUGY5SLfxyp6HZnlbr4aCDAk62+2ZUotr+sVXplCpuxoSc2Qlw0en
49
+ y+plCvd2RdQ/EzIFkpi9V/snIvbMvH3Sp/HqFDG8GehFTRvwpCIVqWC+BZYeaERX
50
+ n2P4jODz2M8Ns7txv1nB4CyxWgu19398Zit0K0QmG24kCJtLg9spEOmKtoIuVTnU
51
+ 9ydxmHQjNNtyH+RceZFn07IkWvPveo2BXpK4K9DXE39Z/g1nQzwTqgN8diXxwRuN
52
+ Ge97lBWup4vP1TV8nyHW2AppgFVuPynO+XWfZUuCUzxNseB+XOyeqitoM4uvSNax
53
+ DQmokjIf4qXC/46EnJ/fd9Ydz4GVQ4TYyxwNCBJK39RdUOcUtyI+A3IbZ+vt2HIV
54
+ eiIN2BhdnwbvNTbPs9nc9McM2NtACqDGQsIzRdXcQ8SFDP2DnTVjGu5E8H9dnVrd
55
+ FcuUnA9TIbfBkRHOS7yoDHOo4j28g6xePDV5tK0L5C2yyDh+bwWnO5AIg/gdpnuH
56
+ wxIZUxFwkD4GvOVtj5Y4W5L+Uy3c94stMPbHE+zGN75DdQRy5aVbDjWqXRB9AEQN
57
+ +NSb526oqhv0JyYlZmCqz2ydBxkT4FsShZv/34pkRr3qL5FSTAQTXQAZdiQQbMTe
58
+ H3zKyu4GbEUV9WsyriqSq27ptMwFfIqN1NdsWeVWN1mXf2KZDn61EgleeQXmdSZu
59
+ XM4Z1n98xjYDwdCkF738j+oRAlSUThBeU/hYbH6Ysff6ON9MPBAAKy3ZxM5tF86e
60
+ l0x20lpND2QLLDZbsg/LrCrE6ZzpWkXn4w4PG4lWMAqph0BebSkFqXvUvuds3c39
61
+ yptNH3FsyqeyM9kDwbDpBQAvpsDIQJfwAbQPLAiQJhpbixZyG9lqhkKOhYTZhU3l
62
+ ufFtnLEj/5G9a8A//MFrXsXePUeBDEzjtEcjPGNxe0ZkuOgYx11Zc0R4oLI7LoHO
63
+ 07vtw4qCH4hztCJ5+JOUac6sGcILFRc4vSQQ15Cg5QEdBiSbQ/yo1P0hbNtSvnwO
64
+ -----END RSA PRIVATE KEY-----`
65
+ testKeyPassphrase = "goisfun"
35
66
)
36
67
37
68
func removeFileFn (filename string ) func () {
@@ -443,3 +474,180 @@ func TestComposingConfigurationProvider_MultipleFilesNoConf(t *testing.T) {
443
474
assert .Error (t , e )
444
475
}
445
476
}
477
+
478
+ func TestComposingConfigurationProvider_FirstConfigWrong (t * testing.T ) {
479
+ dataTpl0 := ``
480
+ dataTpl := `[DEFAULT]
481
+ user=someuser
482
+ fingerprint=somefingerprint
483
+ key_file=%s
484
+ tenancy=sometenancy
485
+ compartment = somecompartment
486
+ region=someregion
487
+ `
488
+
489
+ keyFile := writeTempFile (testPrivateKeyConf )
490
+ data := fmt .Sprintf (dataTpl , keyFile )
491
+ tmpConfFile0 := writeTempFile (dataTpl0 )
492
+ tmpConfFile := writeTempFile (data )
493
+
494
+ defer removeFileFn (tmpConfFile )
495
+ defer removeFileFn (tmpConfFile0 )
496
+ defer removeFileFn (keyFile )
497
+
498
+ c0 , _ := ConfigurationProviderFromFile (tmpConfFile0 , "" )
499
+ c1 , _ := ConfigurationProviderFromFile ("/dev/nowhere" , "" )
500
+ p0 := ConfigurationProviderEnvironmentVariables ("OCI" , os .Getenv ("BLAH" ))
501
+ c , _ := ConfigurationProviderFromFile (tmpConfFile , "" )
502
+
503
+ provider , ec := ComposingConfigurationProvider ([]ConfigurationProvider {p0 , c0 , c1 , c })
504
+ assert .NoError (t , ec )
505
+ ok , err := IsConfigurationProviderValid (provider )
506
+ assert .NoError (t , err )
507
+ assert .True (t , ok )
508
+
509
+ fns := []func () (string , error ){provider .TenancyOCID , provider .UserOCID , provider .KeyFingerprint }
510
+
511
+ for _ , fn := range fns {
512
+ val , e := fn ()
513
+ assert .NoError (t , e )
514
+ assert .NotEmpty (t , val )
515
+ }
516
+ key , _ := provider .PrivateRSAKey ()
517
+ assert .NotNil (t , key )
518
+ }
519
+
520
+ func TestComposingConfigurationProvider_NilConfiguration (t * testing.T ) {
521
+ dataTpl := `[DEFAULT]
522
+ user=someuser
523
+ fingerprint=somefingerprint
524
+ key_file=%s
525
+ tenancy=sometenancy
526
+ compartment = somecompartment
527
+ region=someregion
528
+ `
529
+
530
+ keyFile := writeTempFile (testPrivateKeyConf )
531
+ data := fmt .Sprintf (dataTpl , keyFile )
532
+ tmpConfFile := writeTempFile (data )
533
+
534
+ defer removeFileFn (tmpConfFile )
535
+ defer removeFileFn (keyFile )
536
+
537
+ c1 , _ := ConfigurationProviderFromFile ("/dev/nowhere" , "" )
538
+ p0 := ConfigurationProviderEnvironmentVariables ("OCI" , os .Getenv ("BLAH" ))
539
+ c , _ := ConfigurationProviderFromFile (tmpConfFile , "" )
540
+
541
+ _ , ec := ComposingConfigurationProvider ([]ConfigurationProvider {p0 , nil , c1 , c })
542
+ assert .Error (t , ec )
543
+ }
544
+
545
+ func TestComposingConfigurationProvider_WithEncryptedKeyPassphraseInConfig (t * testing.T ) {
546
+ dataTpl := `[DEFAULT]
547
+ user=someuser
548
+ fingerprint=somefingerprint
549
+ key_file=%s
550
+ tenancy=sometenancy
551
+ compartment = somecompartment
552
+ region=someregion
553
+ passphrase=%s
554
+ `
555
+
556
+ keyFile := writeTempFile (testEncryptedPrivateKeyConf )
557
+ data := fmt .Sprintf (dataTpl , keyFile , testKeyPassphrase )
558
+ tmpConfFile := writeTempFile (data )
559
+
560
+ defer removeFileFn (tmpConfFile )
561
+ defer removeFileFn (keyFile )
562
+
563
+ provider , err := ConfigurationProviderFromFile (tmpConfFile , "" )
564
+ assert .NoError (t , err )
565
+ ok , err := IsConfigurationProviderValid (provider )
566
+ assert .NoError (t , err )
567
+ assert .True (t , ok )
568
+
569
+ fns := []func () (string , error ){provider .TenancyOCID , provider .UserOCID , provider .KeyFingerprint }
570
+
571
+ for _ , fn := range fns {
572
+ val , e := fn ()
573
+ assert .NoError (t , e )
574
+ assert .NotEmpty (t , val )
575
+ }
576
+
577
+ key , err := provider .PrivateRSAKey ()
578
+ assert .NoError (t , err )
579
+ assert .NotNil (t , key )
580
+ }
581
+
582
+ func TestComposingConfigurationProvider_WithEncryptedKeyOverridePassphrase (t * testing.T ) {
583
+ dataTpl := `[DEFAULT]
584
+ user=someuser
585
+ fingerprint=somefingerprint
586
+ key_file=%s
587
+ tenancy=sometenancy
588
+ compartment = somecompartment
589
+ region=someregion
590
+ passphrase=%s
591
+ `
592
+
593
+ keyFile := writeTempFile (testEncryptedPrivateKeyConf )
594
+ data := fmt .Sprintf (dataTpl , keyFile , "thewrongpassphrase" )
595
+ tmpConfFile := writeTempFile (data )
596
+
597
+ defer removeFileFn (tmpConfFile )
598
+ defer removeFileFn (keyFile )
599
+
600
+ provider , err := ConfigurationProviderFromFile (tmpConfFile , testKeyPassphrase )
601
+ assert .NoError (t , err )
602
+ ok , err := IsConfigurationProviderValid (provider )
603
+ assert .NoError (t , err )
604
+ assert .True (t , ok )
605
+
606
+ fns := []func () (string , error ){provider .TenancyOCID , provider .UserOCID , provider .KeyFingerprint }
607
+
608
+ for _ , fn := range fns {
609
+ val , e := fn ()
610
+ assert .NoError (t , e )
611
+ assert .NotEmpty (t , val )
612
+ }
613
+
614
+ key , err := provider .PrivateRSAKey ()
615
+ assert .NoError (t , err )
616
+ assert .NotNil (t , key )
617
+ }
618
+
619
+ func TestComposingConfigurationProvider_WithEncryptedKeyNoConfig (t * testing.T ) {
620
+ dataTpl := `[DEFAULT]
621
+ user=someuser
622
+ fingerprint=somefingerprint
623
+ key_file=%s
624
+ tenancy=sometenancy
625
+ compartment = somecompartment
626
+ region=someregion
627
+ `
628
+
629
+ keyFile := writeTempFile (testEncryptedPrivateKeyConf )
630
+ data := fmt .Sprintf (dataTpl , keyFile )
631
+ tmpConfFile := writeTempFile (data )
632
+
633
+ defer removeFileFn (tmpConfFile )
634
+ defer removeFileFn (keyFile )
635
+
636
+ provider , err := ConfigurationProviderFromFile (tmpConfFile , testKeyPassphrase )
637
+ assert .NoError (t , err )
638
+ ok , err := IsConfigurationProviderValid (provider )
639
+ assert .NoError (t , err )
640
+ assert .True (t , ok )
641
+
642
+ fns := []func () (string , error ){provider .TenancyOCID , provider .UserOCID , provider .KeyFingerprint }
643
+
644
+ for _ , fn := range fns {
645
+ val , e := fn ()
646
+ assert .NoError (t , e )
647
+ assert .NotEmpty (t , val )
648
+ }
649
+
650
+ key , err := provider .PrivateRSAKey ()
651
+ assert .NoError (t , err )
652
+ assert .NotNil (t , key )
653
+ }
0 commit comments