github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/pki/ssh/keys_test.go (about) 1 // Copyright 2022 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package ssh_test 5 6 import ( 7 "crypto" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/pki/ssh" 13 ) 14 15 type KeySuite struct { 16 } 17 18 var _ = gc.Suite(&KeySuite{}) 19 20 func (s *KeySuite) TestKeyProfilesForErrors(c *gc.C) { 21 tests := []struct { 22 name string 23 profile ssh.KeyProfile 24 }{ 25 {name: "ecdsa256", profile: ssh.ECDSAP256}, 26 {name: "ecdsa384", profile: ssh.ECDSAP384}, 27 {name: "ecdsa521", profile: ssh.ECDSAP521}, 28 {name: "rsa2048", profile: ssh.RSA2048}, 29 {name: "rsa3072", profile: ssh.RSA3072}, 30 {name: "ed25519", profile: ssh.ED25519}, 31 } 32 for _, test := range tests { 33 _, err := test.profile() 34 c.Check(err, jc.ErrorIsNil, gc.Commentf("profile %s", test.name)) 35 } 36 } 37 38 func (s *KeySuite) TestGenerateHostKeys(c *gc.C) { 39 keys, err := ssh.GenerateHostKeys() 40 c.Assert(err, jc.ErrorIsNil) 41 c.Assert(keys, gc.HasLen, 3) 42 keys2, err := ssh.GenerateHostKeys() 43 c.Assert(err, jc.ErrorIsNil) 44 c.Assert(keys2, gc.HasLen, 3) 45 for i, key := range keys { 46 key2 := keys2[i] 47 c.Assert(key, gc.FitsTypeOf, key2) 48 typedKey, ok := key.(interface { 49 Equal(crypto.PrivateKey) bool 50 }) 51 c.Assert(ok, jc.IsTrue, gc.Commentf("cast %v", key)) 52 c.Assert(typedKey.Equal(key), jc.IsTrue) 53 c.Assert(typedKey.Equal(key2), jc.IsFalse) 54 } 55 }