@@ -11,6 +11,7 @@ import (
11
11
"github.com/stretchr/testify/require"
12
12
v1 "k8s.io/api/core/v1"
13
13
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14
+ "k8s.io/apimachinery/pkg/runtime"
14
15
"k8s.io/client-go/kubernetes"
15
16
"k8s.io/client-go/kubernetes/fake"
16
17
"k8s.io/client-go/rest"
@@ -88,6 +89,62 @@ func TestGetCertificateManager(t *testing.T) {
88
89
},
89
90
cfg : mockConfigurator ,
90
91
},
92
+ {
93
+ name : "Valid Vault protocol using vault secret defined in MRC" ,
94
+ options : VaultOptions {
95
+ VaultHost : "vault.default.svc.cluster.local" ,
96
+ VaultRole : "role" ,
97
+ VaultPort : 8200 ,
98
+ VaultProtocol : "http" ,
99
+ },
100
+ kubeClient : fake .NewSimpleClientset (& v1.Secret {
101
+ ObjectMeta : metav1.ObjectMeta {
102
+ Name : "vault-token" ,
103
+ Namespace : "osm-system" ,
104
+ },
105
+ Data : map [string ][]byte {
106
+ "token" : []byte ("secret" ),
107
+ },
108
+ }),
109
+ configClient : fakeConfigClientset .NewSimpleClientset (& v1alpha2.MeshRootCertificate {
110
+ ObjectMeta : metav1.ObjectMeta {
111
+ Name : "osm-mesh-root-certificate" ,
112
+ Namespace : "osm-system" ,
113
+ Annotations : map [string ]string {
114
+ constants .MRCVersionAnnotation : "0" ,
115
+ },
116
+ },
117
+ Spec : v1alpha2.MeshRootCertificateSpec {
118
+ Provider : v1alpha2.ProviderSpec {
119
+ Vault : & v1alpha2.VaultProviderSpec {
120
+ Host : "vault.default.svc.cluster.local" ,
121
+ Role : "role" ,
122
+ Port : 8200 ,
123
+ Protocol : "http" ,
124
+ Token : v1alpha2.VaultTokenSpec {
125
+ SecretKeyRef : v1alpha2.SecretKeyReferenceSpec {
126
+ Name : "vault-token" ,
127
+ Namespace : "osm-system" ,
128
+ Key : "token" ,
129
+ },
130
+ },
131
+ },
132
+ },
133
+ },
134
+ Status : v1alpha2.MeshRootCertificateStatus {
135
+ State : constants .MRCStateActive ,
136
+ },
137
+ }),
138
+ informerCollectionFunc : func (tc testCase ) (* informers.InformerCollection , error ) {
139
+ ic , err := informers .NewInformerCollection ("osm" , nil , informers .WithKubeClient (tc .kubeClient ), informers .WithConfigClient (tc .configClient ))
140
+ if err != nil {
141
+ return nil , err
142
+ }
143
+
144
+ return ic , nil
145
+ },
146
+ cfg : mockConfigurator ,
147
+ },
91
148
{
92
149
name : "Not a valid Vault protocol" ,
93
150
options : VaultOptions {
@@ -185,3 +242,78 @@ func TestGetCertificateManager(t *testing.T) {
185
242
})
186
243
}
187
244
}
245
+
246
+ func TestGetHashiVaultOSMToken (t * testing.T ) {
247
+ validVaultTokenSecret := & v1.Secret {
248
+ ObjectMeta : metav1.ObjectMeta {
249
+ Namespace : "osm-system" ,
250
+ Name : "osm-vault-token" ,
251
+ },
252
+ Data : map [string ][]byte {
253
+ "token" : []byte ("token" ),
254
+ },
255
+ }
256
+
257
+ invalidVaultTokenSecret := & v1.Secret {
258
+ ObjectMeta : metav1.ObjectMeta {
259
+ Namespace : "osm-system" ,
260
+ Name : "osm-vault-token" ,
261
+ },
262
+ Data : map [string ][]byte {
263
+ "noop" : []byte ("noop" ),
264
+ },
265
+ }
266
+
267
+ testCases := []struct {
268
+ name string
269
+ secretKeyRef * v1alpha2.SecretKeyReferenceSpec
270
+ kubeClient kubernetes.Interface
271
+ expectError bool
272
+ }{
273
+ {
274
+ name : "No Vault token secret" ,
275
+ secretKeyRef : & v1alpha2.SecretKeyReferenceSpec {
276
+ Name : "osm-vault-token" ,
277
+ Namespace : "osm-system" ,
278
+ Key : "token" ,
279
+ },
280
+ kubeClient : fake .NewSimpleClientset (),
281
+ expectError : true ,
282
+ },
283
+ {
284
+ name : "Invalid Vault token secret" ,
285
+ secretKeyRef : & v1alpha2.SecretKeyReferenceSpec {
286
+ Name : "osm-vault-token" ,
287
+ Namespace : "osm-system" ,
288
+ Key : "token" ,
289
+ },
290
+ kubeClient : fake .NewSimpleClientset ([]runtime.Object {invalidVaultTokenSecret }... ),
291
+ expectError : true ,
292
+ },
293
+ {
294
+ name : "Valid Vault token secret" ,
295
+ secretKeyRef : & v1alpha2.SecretKeyReferenceSpec {
296
+ Name : "osm-vault-token" ,
297
+ Namespace : "osm-system" ,
298
+ Key : "token" ,
299
+ },
300
+ kubeClient : fake .NewSimpleClientset ([]runtime.Object {validVaultTokenSecret }... ),
301
+ expectError : false ,
302
+ },
303
+ }
304
+
305
+ for _ , tc := range testCases {
306
+ t .Run (tc .name , func (t * testing.T ) {
307
+ assert := tassert .New (t )
308
+
309
+ token , err := getHashiVaultOSMToken (tc .secretKeyRef , tc .kubeClient )
310
+ if tc .expectError {
311
+ assert .Empty (token )
312
+ assert .Error (err )
313
+ } else {
314
+ assert .NotEmpty (token )
315
+ assert .NoError (err )
316
+ }
317
+ })
318
+ }
319
+ }
0 commit comments