@@ -13,15 +13,24 @@ import (
13
13
corev1 "k8s.io/api/core/v1"
14
14
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
15
"k8s.io/client-go/kubernetes/fake"
16
+ "k8s.io/client-go/rest"
17
+ "k8s.io/client-go/tools/clientcmd"
16
18
17
19
"github.com/openservicemesh/osm/pkg/certificate"
18
20
"github.com/openservicemesh/osm/pkg/certificate/providers/tresor"
19
21
"github.com/openservicemesh/osm/pkg/configurator"
20
22
"github.com/openservicemesh/osm/pkg/constants"
21
23
"github.com/openservicemesh/osm/pkg/tests"
24
+ "github.com/openservicemesh/osm/pkg/tests/certificates"
22
25
)
23
26
24
- func TestGetCertificateManager (t * testing.T ) {
27
+ func TestNewCertificateProvider (t * testing.T ) {
28
+ fakeClient := fake .NewSimpleClientset ()
29
+ clientConfig := clientcmd .NewNonInteractiveDeferredLoadingClientConfig (
30
+ clientcmd .NewDefaultClientConfigLoadingRules (),
31
+ & clientcmd.ConfigOverrides {},
32
+ )
33
+ kubeConfig , _ := clientConfig .ClientConfig ()
25
34
mockCtrl := gomock .NewController (t )
26
35
mockConfigurator := configurator .NewMockConfigurator (mockCtrl )
27
36
@@ -30,9 +39,50 @@ func TestGetCertificateManager(t *testing.T) {
30
39
mockConfigurator .EXPECT ().GetServiceCertValidityPeriod ().Return (1 * time .Hour ).AnyTimes ()
31
40
32
41
testCases := []struct {
33
- name string
34
- util * Config
42
+ name string
43
+ tresorOpt TresorOptions
44
+ vaultOpt VaultOptions
45
+ certManagerOpt CertManagerOptions
46
+ providerKind Kind
47
+ expErr bool
48
+ }{
49
+ {
50
+ name : "Successfully create certManager and certDebugger" ,
51
+ tresorOpt : TresorOptions {},
52
+ vaultOpt : VaultOptions {},
53
+ certManagerOpt : CertManagerOptions {},
54
+ providerKind : TresorKind ,
55
+ expErr : false ,
56
+ },
57
+ {
58
+ name : "Fail to validate Config" ,
59
+ tresorOpt : TresorOptions {},
60
+ vaultOpt : VaultOptions {},
61
+ certManagerOpt : CertManagerOptions {},
62
+ providerKind : VaultKind ,
63
+ expErr : true ,
64
+ },
65
+ }
66
+ for i , tc := range testCases {
67
+ t .Run (fmt .Sprintf ("Testing test case %d: %s" , i , tc .name ), func (t * testing.T ) {
68
+ assert := tassert .New (t )
69
+ _ , _ , _ , err := NewCertificateProvider (fakeClient , kubeConfig , mockConfigurator , tc .providerKind , "osm-system" , "osm-ca-bundle" , tc .tresorOpt , tc .vaultOpt , tc .certManagerOpt )
70
+ assert .Equal (tc .expErr , err != nil )
71
+ })
72
+ }
73
+ }
74
+
75
+ func TestGetCertificateManager (t * testing.T ) {
76
+ mockCtrl := gomock .NewController (t )
77
+ mockConfigurator := configurator .NewMockConfigurator (mockCtrl )
35
78
79
+ mockConfigurator .EXPECT ().IsDebugServerEnabled ().Return (false ).AnyTimes ()
80
+ mockConfigurator .EXPECT ().GetCertKeyBitSize ().Return (2048 ).AnyTimes ()
81
+ mockConfigurator .EXPECT ().GetServiceCertValidityPeriod ().Return (1 * time .Hour ).AnyTimes ()
82
+
83
+ testCases := []struct {
84
+ name string
85
+ util * Config
36
86
expectError bool
37
87
}{
38
88
{
@@ -46,22 +96,38 @@ func TestGetCertificateManager(t *testing.T) {
46
96
},
47
97
expectError : false ,
48
98
},
99
+ {
100
+ name : "certManager as the certificate manager" ,
101
+ util : & Config {
102
+ kubeClient : fake .NewSimpleClientset (),
103
+ kubeConfig : & rest.Config {},
104
+ cfg : mockConfigurator ,
105
+ providerKind : CertManagerKind ,
106
+ providerNamespace : "osm-system" ,
107
+ caBundleSecretName : "" ,
108
+ certManagerOptions : CertManagerOptions {IssuerName : "test-name" , IssuerKind : "test-kind" , IssuerGroup : "test-group" },
109
+ },
110
+ expectError : false ,
111
+ },
49
112
}
50
113
51
114
for i , tc := range testCases {
52
115
t .Run (fmt .Sprintf ("Testing test case %d: %s" , i , tc .name ), func (t * testing.T ) {
53
116
assert := tassert .New (t )
54
117
118
+ if tc .util .providerKind == CertManagerKind {
119
+ secret := corev1.Secret {Data : map [string ][]byte {constants .KubernetesOpaqueSecretCAKey : []byte (certificates .SampleCertificatePEM )}}
120
+ _ , err := tc .util .kubeClient .CoreV1 ().Secrets (tc .util .providerNamespace ).Create (context .Background (), & secret , metav1.CreateOptions {})
121
+ assert .Nil (err )
122
+ }
123
+
55
124
manager , _ , err := tc .util .GetCertificateManager ()
56
125
assert .NotNil (manager )
57
126
assert .Equal (tc .expectError , err != nil )
58
127
59
- switch tc .util .providerKind {
60
- case TresorKind :
61
- _ , err = tc .util .kubeClient .CoreV1 ().Secrets (tc .util .providerNamespace ).Get (context .TODO (), tc .util .caBundleSecretName , metav1.GetOptions {})
128
+ if tc .util .providerKind == TresorKind {
129
+ _ , err := tc .util .kubeClient .CoreV1 ().Secrets (tc .util .providerNamespace ).Get (context .TODO (), tc .util .caBundleSecretName , metav1.GetOptions {})
62
130
assert .NoError (err )
63
- default :
64
- assert .Fail ("Unknown provider kind" )
65
131
}
66
132
})
67
133
}
@@ -349,3 +415,125 @@ func TestValidateVaultOptions(t *testing.T) {
349
415
}
350
416
}
351
417
}
418
+
419
+ func TestGetHashiVaultOSMCertificateManager (t * testing.T ) {
420
+ mockCtrl := gomock .NewController (t )
421
+ mockConfigurator := configurator .NewMockConfigurator (mockCtrl )
422
+
423
+ mockConfigurator .EXPECT ().IsDebugServerEnabled ().Return (false ).AnyTimes ()
424
+ mockConfigurator .EXPECT ().GetCertKeyBitSize ().Return (2048 ).AnyTimes ()
425
+ mockConfigurator .EXPECT ().GetServiceCertValidityPeriod ().Return (1 * time .Hour ).AnyTimes ()
426
+ config := Config {
427
+ kubeConfig : & rest.Config {},
428
+ caBundleSecretName : "" ,
429
+ providerKind : VaultKind ,
430
+ providerNamespace : "osm-system" ,
431
+ cfg : mockConfigurator ,
432
+ kubeClient : fake .NewSimpleClientset (),
433
+ }
434
+ opt := VaultOptions {
435
+ VaultHost : "vault.default.svc.cluster.local" ,
436
+ VaultToken : "vault-token" ,
437
+ VaultRole : "role" ,
438
+ VaultPort : 8200 ,
439
+ }
440
+
441
+ testCases := []struct {
442
+ name string
443
+ vaultProtocol string
444
+ expErr bool
445
+ }{
446
+ {
447
+ name : "Not a valid Vault protocol" ,
448
+ vaultProtocol : "hi" ,
449
+ expErr : true ,
450
+ },
451
+ {
452
+ name : "Error instantiating Vault as CertManager" ,
453
+ vaultProtocol : "http" ,
454
+ expErr : true ,
455
+ },
456
+ }
457
+
458
+ for i , tc := range testCases {
459
+ t .Run (fmt .Sprintf ("Testing test case %d: %s" , i , tc .name ), func (t * testing.T ) {
460
+ assert := tassert .New (t )
461
+
462
+ opt .VaultProtocol = tc .vaultProtocol
463
+ _ , _ , err := config .getHashiVaultOSMCertificateManager (opt )
464
+ assert .Equal (tc .expErr , err != nil )
465
+ })
466
+ }
467
+ }
468
+
469
+ func TestGetCertManagerOSMCertificateManager (t * testing.T ) {
470
+ mockCtrl := gomock .NewController (t )
471
+ mockConfigurator := configurator .NewMockConfigurator (mockCtrl )
472
+
473
+ mockConfigurator .EXPECT ().IsDebugServerEnabled ().Return (false ).AnyTimes ()
474
+ mockConfigurator .EXPECT ().GetCertKeyBitSize ().Return (2048 ).AnyTimes ()
475
+ mockConfigurator .EXPECT ().GetServiceCertValidityPeriod ().Return (1 * time .Hour ).AnyTimes ()
476
+ config := Config {
477
+ kubeConfig : & rest.Config {},
478
+ caBundleSecretName : "" ,
479
+ providerKind : CertManagerKind ,
480
+ providerNamespace : "osm-system" ,
481
+ cfg : mockConfigurator ,
482
+ kubeClient : fake .NewSimpleClientset (),
483
+ }
484
+ opt := CertManagerOptions {
485
+ IssuerName : "test-name" ,
486
+ IssuerKind : "test-kind" ,
487
+ IssuerGroup : "test-group" ,
488
+ }
489
+
490
+ testCases := []struct {
491
+ name string
492
+ createSecret bool
493
+ secret corev1.Secret
494
+ expErr bool
495
+ }{
496
+ {
497
+ name : "No secret" ,
498
+ createSecret : false ,
499
+ secret : corev1.Secret {},
500
+ expErr : true ,
501
+ },
502
+ {
503
+ name : "Doesn't have opaque key" ,
504
+ createSecret : true ,
505
+ secret : corev1.Secret {},
506
+ expErr : true ,
507
+ },
508
+ {
509
+ name : "Failed to decode" ,
510
+ createSecret : true ,
511
+ secret : corev1.Secret {Data : map [string ][]byte {constants .KubernetesOpaqueSecretCAKey : {}}},
512
+ expErr : true ,
513
+ },
514
+ {
515
+ name : "Successfully get CertManager" ,
516
+ createSecret : true ,
517
+ secret : corev1.Secret {Data : map [string ][]byte {constants .KubernetesOpaqueSecretCAKey : []byte (certificates .SampleCertificatePEM )}},
518
+ expErr : false ,
519
+ },
520
+ }
521
+
522
+ for i , tc := range testCases {
523
+ t .Run (fmt .Sprintf ("Testing test case %d: %s" , i , tc .name ), func (t * testing.T ) {
524
+ assert := tassert .New (t )
525
+ if tc .createSecret {
526
+ _ , err := config .kubeClient .CoreV1 ().Secrets (config .providerNamespace ).Create (context .Background (), & tc .secret , metav1.CreateOptions {})
527
+ assert .Nil (err )
528
+ }
529
+
530
+ _ , _ , err := config .getCertManagerOSMCertificateManager (opt )
531
+ assert .Equal (tc .expErr , err != nil )
532
+
533
+ if tc .createSecret {
534
+ err := config .kubeClient .CoreV1 ().Secrets (config .providerNamespace ).Delete (context .Background (), "" , metav1.DeleteOptions {})
535
+ assert .Nil (err )
536
+ }
537
+ })
538
+ }
539
+ }
0 commit comments