1
1
package certificate
2
2
3
3
import (
4
- "fmt"
5
4
"testing"
6
5
time "time"
7
6
@@ -10,6 +9,7 @@ import (
10
9
tassert "github.com/stretchr/testify/assert"
11
10
12
11
"github.com/openservicemesh/osm/pkg/announcements"
12
+ "github.com/openservicemesh/osm/pkg/certificate/pem"
13
13
"github.com/openservicemesh/osm/pkg/messaging"
14
14
)
15
15
@@ -70,11 +70,8 @@ func TestRotor(t *testing.T) {
70
70
assert .NoError (err )
71
71
certRotateChan := msgBroker .GetCertPubSub ().Sub (announcements .CertificateRotated .String ())
72
72
73
- start := time .Now ()
74
- // Wait for one certificate rotation to be announced and terminate
73
+ // Wait for two certificate rotations to be announced and terminate
75
74
<- certRotateChan
76
-
77
- fmt .Printf ("It took %+v to rotate certificate %s\n " , time .Since (start ), cn )
78
75
newCert , err := certManager .IssueCertificate (cn , validityPeriod )
79
76
assert .NoError (err )
80
77
assert .NotEqual (certA .GetExpiration (), newCert .GetExpiration ())
@@ -216,7 +213,10 @@ func TestListCertificate(t *testing.T) {
216
213
func TestGetRootCertificate (t * testing.T ) {
217
214
assert := tassert .New (t )
218
215
219
- manager := & Manager {clients : map [string ]Issuer {"fake-issuer-1" : & fakeIssuer {}}}
216
+ manager := & Manager {
217
+ keyIssuer : & issuer {ID : "fake-1" , Issuer : & fakeIssuer {}},
218
+ pubIssuer : & issuer {ID : "fake-1" , Issuer : & fakeIssuer {}},
219
+ }
220
220
221
221
got := manager .GetRootCertificate ()
222
222
@@ -227,103 +227,113 @@ func TestIssueCertificate(t *testing.T) {
227
227
cn := CommonName ("fake-cert-cn" )
228
228
assert := tassert .New (t )
229
229
230
- cm := & Manager {
231
- // The root certificate signing all newly issued certificates
232
- clients : map [string ]Issuer {"id1" : & fakeIssuer {}},
233
- keyIssuer : "id1" ,
234
- }
235
-
236
230
t .Run ("single key issuer" , func (t * testing.T ) {
231
+ cm := & Manager {
232
+ // The root certificate signing all newly issued certificates
233
+ keyIssuer : & issuer {ID : "id1" , Issuer : & fakeIssuer {id : "id1" }},
234
+ pubIssuer : & issuer {ID : "id1" , Issuer : & fakeIssuer {id : "id1" }},
235
+ }
237
236
// single keyIssuer, not cached
238
- cert , err := cm .IssueCertificate (cn , time .Minute )
237
+ cert1 , err := cm .IssueCertificate (cn , time .Minute )
239
238
assert .NoError (err )
240
- assert .NotNil (cert )
241
- assert .Equal (cert .keyIssuer , "id1" )
242
- assert .Empty (cert .pubIssuer )
239
+ assert .NotNil (cert1 )
240
+ assert .Equal (cert1 .keyIssuer , "id1" )
241
+ assert .Equal (cert1 .pubIssuer , "id1" )
242
+ assert .Equal (cert1 .GetIssuingCA (), pem .RootCertificate ("id1" ))
243
243
244
244
// single keyIssuer cached
245
- cert1 , err := cm .IssueCertificate (cn , time .Minute )
245
+ cert2 , err := cm .IssueCertificate (cn , time .Minute )
246
246
assert .NoError (err )
247
- assert .Equal (cert , cert1 )
247
+ assert .Equal (cert1 , cert2 )
248
248
249
249
// single key issuer, old version cached
250
250
// TODO: could use informer logic to test mrc updates instead of just manually making changes.
251
- cm .clients ["id2" ] = & fakeIssuer {}
252
- delete (cm .clients , "id1" )
253
- cm .keyIssuer = "id2"
251
+ cm .keyIssuer = & issuer {ID : "id2" , Issuer : & fakeIssuer {id : "id2" }}
252
+ cm .pubIssuer = & issuer {ID : "id2" , Issuer : & fakeIssuer {id : "id2" }}
254
253
255
254
cert3 , err := cm .IssueCertificate (cn , time .Minute )
256
255
assert .NoError (err )
257
- assert .NotNil (cert )
258
- assert .Equal (cert .keyIssuer , "id2" )
259
- assert .NotEqual (cert1 , cert3 )
260
- assert .Empty (cert .pubIssuer )
256
+ assert .NotNil (cert3 )
257
+ assert .Equal (cert3 .keyIssuer , "id2" )
258
+ assert .Equal (cert3 .pubIssuer , "id2" )
259
+ assert .NotEqual (cert2 , cert3 )
260
+ assert .Equal (cert3 .GetIssuingCA (), pem .RootCertificate ("id2" ))
261
261
})
262
262
263
263
t .Run ("2 issuers" , func (t * testing.T ) {
264
- // {
265
- // name: "2 issuers, nothing cached",
266
- // test: func(a *tassert.Assertions) {
267
-
268
- // },
269
- // },
270
- // {
271
- // name: "2 issuers, old version cached",
272
- // test: func(a *tassert.Assertions) {
273
-
274
- // },
275
- // },
276
- // {
277
- // name: "2 issuers, 1 cached",
278
- // test: func(a *tassert.Assertions) {
279
-
280
- // },
281
- // },
282
- // {
283
- // name: "2 issuers, both cached",
284
- // test: func(a *tassert.Assertions) {
285
-
286
- // },
287
- // },
288
- })
289
-
290
- testCases := []struct {
291
- name string
292
- test func (* tassert.Assertions )
293
- }{
294
- {
295
- name : "" ,
296
- test : func (a * tassert.Assertions ) {
297
-
298
- },
299
- },
300
- {
301
- name : "single keyIssuer, cached" ,
302
- test : func (a * tassert.Assertions ) {
264
+ cm := & Manager {
265
+ // The root certificate signing all newly issued certificates
266
+ keyIssuer : & issuer {ID : "id1" , Issuer : & fakeIssuer {id : "id1" }},
267
+ pubIssuer : & issuer {ID : "id2" , Issuer : & fakeIssuer {id : "id2" }},
268
+ }
303
269
304
- },
305
- },
306
- {
307
- name : "single keyIssuer, old version cached" ,
308
- test : func (a * tassert.Assertions ) {
270
+ // Not cached
271
+ cert1 , err := cm .IssueCertificate (cn , time .Minute )
272
+ assert .NoError (err )
273
+ assert .NotNil (cert1 )
274
+ assert .Equal (cert1 .keyIssuer , "id1" )
275
+ assert .Equal (cert1 .pubIssuer , "id2" )
276
+ assert .Equal (cert1 .GetIssuingCA (), pem .RootCertificate ("idid2" ))
309
277
310
- },
311
- },
278
+ // cached
279
+ cert2 , err := cm .IssueCertificate (cn , time .Minute )
280
+ assert .NoError (err )
281
+ assert .Equal (cert1 , cert2 )
312
282
313
- // 2 keyissuers
283
+ // cached, but pubIssuer is removed
284
+ cm .pubIssuer = cm .keyIssuer
285
+ cert3 , err := cm .IssueCertificate (cn , time .Minute )
286
+ assert .NoError (err )
287
+ assert .NotEqual (cert1 , cert3 )
288
+ assert .Equal (cert3 .keyIssuer , "id1" )
289
+ assert .Equal (cert3 .pubIssuer , "id1" )
290
+ assert .Equal (cert3 .GetIssuingCA (), pem .RootCertificate ("id1" ))
314
291
315
- {
316
- name : "bad key issuer" ,
317
- test : func (a * tassert.Assertions ) {
292
+ // cached, but keyIssuer is old
293
+ cm .keyIssuer = & issuer {ID : "id2" , Issuer : & fakeIssuer {id : "id2" }}
294
+ cert4 , err := cm .IssueCertificate (cn , time .Minute )
295
+ assert .NoError (err )
296
+ assert .NotEqual (cert3 , cert4 )
297
+ assert .Equal (cert4 .keyIssuer , "id2" )
298
+ assert .Equal (cert4 .pubIssuer , "id1" )
299
+ assert .Equal (cert4 .GetIssuingCA (), pem .RootCertificate ("idid1" ))
300
+
301
+ // cached, but pubIssuer is old
302
+ cm .pubIssuer = & issuer {ID : "id3" , Issuer : & fakeIssuer {id : "id3" }}
303
+ cert5 , err := cm .IssueCertificate (cn , time .Minute )
304
+ assert .NoError (err )
305
+ assert .NotEqual (cert4 , cert5 )
306
+ assert .Equal (cert5 .keyIssuer , "id2" )
307
+ assert .Equal (cert5 .pubIssuer , "id3" )
308
+ assert .Equal (cert5 .GetIssuingCA (), pem .RootCertificate ("idid3" ))
309
+ })
318
310
319
- },
320
- },
321
- {
322
- name : "bad pub issuer" ,
323
- test : func (a * tassert.Assertions ) {
311
+ t .Run ("bad issuers" , func (t * testing.T ) {
312
+ cm := & Manager {
313
+ // The root certificate signing all newly issued certificates
314
+ keyIssuer : & issuer {ID : "id1" , Issuer : & fakeIssuer {id : "id1" , err : true }},
315
+ pubIssuer : & issuer {ID : "id2" , Issuer : & fakeIssuer {id : "id2" , err : true }},
316
+ }
324
317
325
- },
326
- },
327
- }
318
+ // bad private key
319
+ cert , err := cm .IssueCertificate (cn , time .Minute )
320
+ assert .Nil (cert )
321
+ assert .EqualError (err , "id1 failed" )
322
+
323
+ // bad public key
324
+ cm .keyIssuer = & issuer {ID : "id3" , Issuer : & fakeIssuer {id : "id3" }}
325
+ cert , err = cm .IssueCertificate (cn , time .Minute )
326
+ assert .Nil (cert )
327
+ assert .EqualError (err , "id2 failed" )
328
+
329
+ // insert a cached cert
330
+ cm .pubIssuer = cm .keyIssuer
331
+ cert , err = cm .IssueCertificate (cn , time .Minute )
332
+ assert .NoError (err )
328
333
334
+ // bad public key on an existing cached cert, because the pubIssuer is new
335
+ cm .pubIssuer = & issuer {ID : "id1" , Issuer : & fakeIssuer {id : "id1" , err : true }}
336
+ cert , err = cm .IssueCertificate (cn , time .Minute )
337
+ assert .EqualError (err , "id1 failed" )
338
+ })
329
339
}
0 commit comments