Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit 30cb33d

Browse files
committed
test(pkg/certificate/providers): add tests to config file
Adds unit tests to config.go and resolves #3425 Signed-off-by: Shalier Xia <[email protected]>
1 parent 7e580ef commit 30cb33d

File tree

1 file changed

+196
-8
lines changed

1 file changed

+196
-8
lines changed

pkg/certificate/providers/config_test.go

Lines changed: 196 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,24 @@ import (
1313
corev1 "k8s.io/api/core/v1"
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
"k8s.io/client-go/kubernetes/fake"
16+
"k8s.io/client-go/rest"
17+
"k8s.io/client-go/tools/clientcmd"
1618

1719
"github.com/openservicemesh/osm/pkg/certificate"
1820
"github.com/openservicemesh/osm/pkg/certificate/providers/tresor"
1921
"github.com/openservicemesh/osm/pkg/configurator"
2022
"github.com/openservicemesh/osm/pkg/constants"
2123
"github.com/openservicemesh/osm/pkg/tests"
24+
"github.com/openservicemesh/osm/pkg/tests/certificates"
2225
)
2326

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()
2534
mockCtrl := gomock.NewController(t)
2635
mockConfigurator := configurator.NewMockConfigurator(mockCtrl)
2736

@@ -30,9 +39,50 @@ func TestGetCertificateManager(t *testing.T) {
3039
mockConfigurator.EXPECT().GetServiceCertValidityPeriod().Return(1 * time.Hour).AnyTimes()
3140

3241
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)
3578

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
3686
expectError bool
3787
}{
3888
{
@@ -46,22 +96,38 @@ func TestGetCertificateManager(t *testing.T) {
4696
},
4797
expectError: false,
4898
},
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+
},
49112
}
50113

51114
for i, tc := range testCases {
52115
t.Run(fmt.Sprintf("Testing test case %d: %s", i, tc.name), func(t *testing.T) {
53116
assert := tassert.New(t)
54117

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+
55124
manager, _, err := tc.util.GetCertificateManager()
56125
assert.NotNil(manager)
57126
assert.Equal(tc.expectError, err != nil)
58127

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{})
62130
assert.NoError(err)
63-
default:
64-
assert.Fail("Unknown provider kind")
65131
}
66132
})
67133
}
@@ -349,3 +415,125 @@ func TestValidateVaultOptions(t *testing.T) {
349415
}
350416
}
351417
}
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

Comments
 (0)