github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/provider/joyent/config_internal_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package joyent
     5  
     6  import (
     7  	"os"
     8  
     9  	gc "gopkg.in/check.v1"
    10  
    11  	coretesting "github.com/juju/juju/testing"
    12  )
    13  
    14  type InternalSuite struct {
    15  	coretesting.FakeJujuHomeSuite
    16  }
    17  
    18  var _ = gc.Suite(&InternalSuite{})
    19  
    20  func (s *InternalSuite) TestEnsurePrivateKey(c *gc.C) {
    21  	m := map[string]interface{}{
    22  		"private-key": "foo",
    23  	}
    24  
    25  	e := &environConfig{attrs: copymap(m)}
    26  
    27  	err := ensurePrivateKeyOrPath(e)
    28  	c.Assert(err, gc.IsNil)
    29  	c.Assert(e.attrs, gc.DeepEquals, m)
    30  }
    31  
    32  func (s *InternalSuite) TestEnsurePrivateKeyPathSet(c *gc.C) {
    33  	// if path is set, func should noop
    34  	m := map[string]interface{}{
    35  		"private-key-path": "foo",
    36  	}
    37  
    38  	e := &environConfig{attrs: copymap(m)}
    39  
    40  	err := ensurePrivateKeyOrPath(e)
    41  	c.Assert(err, gc.IsNil)
    42  	c.Assert(e.attrs, gc.DeepEquals, m)
    43  }
    44  
    45  func (s *InternalSuite) TestEnsurePrivateKeyEnvPath(c *gc.C) {
    46  	// if path is set in env, use it
    47  	old := os.Getenv("MANTA_PRIVATE_KEY_FILE")
    48  	err := os.Setenv("MANTA_PRIVATE_KEY_FILE", "foobar")
    49  	defer os.Setenv("MANTA_PRIVATE_KEY_FILE", old)
    50  	c.Assert(err, gc.IsNil)
    51  
    52  	e := &environConfig{attrs: map[string]interface{}{}}
    53  
    54  	err = ensurePrivateKeyOrPath(e)
    55  	c.Assert(err, gc.IsNil)
    56  	c.Assert(e.attrs, gc.DeepEquals, map[string]interface{}{
    57  		"private-key-path": "foobar",
    58  	})
    59  }
    60  
    61  func (s *InternalSuite) TestEnsurePrivateKeySet(c *gc.C) {
    62  	// if key is set, func should noop
    63  	m := map[string]interface{}{"private-key": "foo"}
    64  
    65  	e := &environConfig{attrs: copymap(m)}
    66  
    67  	err := ensurePrivateKeyOrPath(e)
    68  	c.Assert(err, gc.IsNil)
    69  	c.Assert(e.attrs, gc.DeepEquals, m)
    70  }
    71  
    72  func (s *InternalSuite) TestEnsurePrivateKeyMissing(c *gc.C) {
    73  	e := &environConfig{attrs: map[string]interface{}{}}
    74  
    75  	err := ensurePrivateKeyOrPath(e)
    76  	c.Assert(err, gc.ErrorMatches, "no ssh private key specified in joyent configuration")
    77  }
    78  
    79  func copymap(m map[string]interface{}) map[string]interface{} {
    80  	m1 := make(map[string]interface{}, len(m))
    81  	for k, v := range m {
    82  		m1[k] = v
    83  	}
    84  	return m1
    85  }