1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
10
"github.com/juju/testing"
11
jc "github.com/juju/testing/checkers"
12
gc "gopkg.in/check.v1"
14
"github.com/juju/utils/ssh"
17
type GenerateSuite struct {
18
testing.IsolationSuite
21
var _ = gc.Suite(&GenerateSuite{})
23
var pregeneratedKey *rsa.PrivateKey
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
32
// Ignore requested bits and just use 512 bits for speed
33
key, err := rsa.GenerateKey(random, 512)
44
func (s *GenerateSuite) TestGenerate(c *gc.C) {
45
defer overrideGenerateKey(c).Restore()
46
private, public, err := ssh.GenerateKey("some-comment")
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")