@@ -18,7 +18,8 @@ import (
18
18
type (
19
19
SuiteCommon struct {}
20
20
21
- mockKnownHosts struct {}
21
+ mockKnownHosts struct {}
22
+ mockKnownHostsWithCert struct {}
22
23
)
23
24
24
25
func (mockKnownHosts ) host () string { return "github.com" }
@@ -27,6 +28,19 @@ func (mockKnownHosts) knownHosts() []byte {
27
28
}
28
29
func (mockKnownHosts ) Network () string { return "tcp" }
29
30
func (mockKnownHosts ) String () string { return "github.com:22" }
31
+ func (mockKnownHosts ) Algorithms () []string {
32
+ return []string {ssh .KeyAlgoRSA , ssh .KeyAlgoRSASHA256 , ssh .KeyAlgoRSASHA512 }
33
+ }
34
+
35
+ func (mockKnownHostsWithCert ) host () string { return "github.com" }
36
+ func (mockKnownHostsWithCert ) knownHosts () []byte {
37
+ return []byte (`@cert-authority github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==` )
38
+ }
39
+ func (mockKnownHostsWithCert ) Network () string { return "tcp" }
40
+ func (mockKnownHostsWithCert ) String () string { return "github.com:22" }
41
+ func (mockKnownHostsWithCert ) Algorithms () []string {
42
+ return []string {ssh .CertAlgoRSASHA512v01 , ssh .CertAlgoRSASHA256v01 , ssh .CertAlgoRSAv01 }
43
+ }
30
44
31
45
var _ = Suite (& SuiteCommon {})
32
46
@@ -230,3 +244,93 @@ func (*SuiteCommon) TestNewKnownHostsCallback(c *C) {
230
244
err = clb (mock .String (), mock , hostKey )
231
245
c .Assert (err , IsNil )
232
246
}
247
+
248
+ func (* SuiteCommon ) TestNewKnownHostsDbWithoutCert (c * C ) {
249
+ if runtime .GOOS == "js" {
250
+ c .Skip ("not available in wasm" )
251
+ }
252
+
253
+ var mock = mockKnownHosts {}
254
+
255
+ f , err := util .TempFile (osfs .Default , "" , "known-hosts" )
256
+ c .Assert (err , IsNil )
257
+
258
+ _ , err = f .Write (mock .knownHosts ())
259
+ c .Assert (err , IsNil )
260
+
261
+ err = f .Close ()
262
+ c .Assert (err , IsNil )
263
+
264
+ defer util .RemoveAll (osfs .Default , f .Name ())
265
+
266
+ f , err = osfs .Default .Open (f .Name ())
267
+ c .Assert (err , IsNil )
268
+
269
+ defer f .Close ()
270
+
271
+ db , err := newKnownHostsDb (f .Name ())
272
+ c .Assert (err , IsNil )
273
+
274
+ algos := db .HostKeyAlgorithms (mock .String ())
275
+ c .Assert (algos , HasLen , len (mock .Algorithms ()))
276
+
277
+ contains := func (container []string , value string ) bool {
278
+ for _ , inner := range container {
279
+ if inner == value {
280
+ return true
281
+ }
282
+ }
283
+ return false
284
+ }
285
+
286
+ for _ , algorithm := range mock .Algorithms () {
287
+ if ! contains (algos , algorithm ) {
288
+ c .Error ("algos does not contain " , algorithm )
289
+ }
290
+ }
291
+ }
292
+
293
+ func (* SuiteCommon ) TestNewKnownHostsDbWithCert (c * C ) {
294
+ if runtime .GOOS == "js" {
295
+ c .Skip ("not available in wasm" )
296
+ }
297
+
298
+ var mock = mockKnownHostsWithCert {}
299
+
300
+ f , err := util .TempFile (osfs .Default , "" , "known-hosts" )
301
+ c .Assert (err , IsNil )
302
+
303
+ _ , err = f .Write (mock .knownHosts ())
304
+ c .Assert (err , IsNil )
305
+
306
+ err = f .Close ()
307
+ c .Assert (err , IsNil )
308
+
309
+ defer util .RemoveAll (osfs .Default , f .Name ())
310
+
311
+ f , err = osfs .Default .Open (f .Name ())
312
+ c .Assert (err , IsNil )
313
+
314
+ defer f .Close ()
315
+
316
+ db , err := newKnownHostsDb (f .Name ())
317
+ c .Assert (err , IsNil )
318
+
319
+ algos := db .HostKeyAlgorithms (mock .String ())
320
+ c .Assert (algos , HasLen , len (mock .Algorithms ()))
321
+
322
+ contains := func (container []string , value string ) bool {
323
+ for _ , inner := range container {
324
+ if inner == value {
325
+ return true
326
+ }
327
+ }
328
+ return false
329
+ }
330
+
331
+ for _ , algorithm := range mock .Algorithms () {
332
+ if ! contains (algos , algorithm ) {
333
+ c .Error ("algos does not contain " , algorithm )
334
+ }
335
+ }
336
+ }
0 commit comments