github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/utils/ssh/generate_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package ssh_test 5 6 import ( 7 "crypto/rsa" 8 "io" 9 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/utils/ssh" 15 ) 16 17 type GenerateSuite struct { 18 testing.IsolationSuite 19 } 20 21 var _ = gc.Suite(&GenerateSuite{}) 22 23 var pregeneratedKey *rsa.PrivateKey 24 25 // overrideGenerateKey patches out rsa.GenerateKey to create a single testing 26 // key which is saved and used between tests to save computation time. 27 func overrideGenerateKey(c *gc.C) testing.Restorer { 28 restorer := testing.PatchValue(ssh.RSAGenerateKey, func(random io.Reader, bits int) (*rsa.PrivateKey, error) { 29 if pregeneratedKey != nil { 30 return pregeneratedKey, nil 31 } 32 // Ignore requested bits and just use 512 bits for speed 33 key, err := rsa.GenerateKey(random, 512) 34 if err != nil { 35 return nil, err 36 } 37 key.Precompute() 38 pregeneratedKey = key 39 return key, nil 40 }) 41 return restorer 42 } 43 44 func (s *GenerateSuite) TestGenerate(c *gc.C) { 45 defer overrideGenerateKey(c).Restore() 46 private, public, err := ssh.GenerateKey("some-comment") 47 48 c.Check(err, jc.ErrorIsNil) 49 c.Check(private, jc.HasPrefix, "-----BEGIN RSA PRIVATE KEY-----\n") 50 c.Check(private, jc.HasSuffix, "-----END RSA PRIVATE KEY-----\n") 51 c.Check(public, jc.HasPrefix, "ssh-rsa ") 52 c.Check(public, jc.HasSuffix, " some-comment\n") 53 }