github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/provider/manual/environ_test.go (about)

     1  // Copyright 2012 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package manual
     5  
     6  import (
     7  	"errors"
     8  	"strings"
     9  
    10  	gc "launchpad.net/gocheck"
    11  
    12  	"launchpad.net/juju-core/environs"
    13  	"launchpad.net/juju-core/environs/manual"
    14  	"launchpad.net/juju-core/environs/storage"
    15  	"launchpad.net/juju-core/environs/tools"
    16  	"launchpad.net/juju-core/instance"
    17  	jc "launchpad.net/juju-core/testing/checkers"
    18  	"launchpad.net/juju-core/testing/testbase"
    19  )
    20  
    21  type environSuite struct {
    22  	testbase.LoggingSuite
    23  	env *manualEnviron
    24  }
    25  
    26  type dummyStorage struct {
    27  	storage.Storage
    28  }
    29  
    30  var _ = gc.Suite(&environSuite{})
    31  
    32  func (s *environSuite) SetUpTest(c *gc.C) {
    33  	env, err := manualProvider{}.Open(MinimalConfig(c))
    34  	c.Assert(err, gc.IsNil)
    35  	s.env = env.(*manualEnviron)
    36  }
    37  
    38  func (s *environSuite) TestSetConfig(c *gc.C) {
    39  	err := s.env.SetConfig(MinimalConfig(c))
    40  	c.Assert(err, gc.IsNil)
    41  
    42  	testConfig := MinimalConfig(c)
    43  	testConfig, err = testConfig.Apply(map[string]interface{}{"bootstrap-host": ""})
    44  	c.Assert(err, gc.IsNil)
    45  	err = s.env.SetConfig(testConfig)
    46  	c.Assert(err, gc.ErrorMatches, "bootstrap-host must be specified")
    47  }
    48  
    49  func (s *environSuite) TestInstances(c *gc.C) {
    50  	var ids []instance.Id
    51  
    52  	instances, err := s.env.Instances(ids)
    53  	c.Assert(err, gc.Equals, environs.ErrNoInstances)
    54  	c.Assert(instances, gc.HasLen, 0)
    55  
    56  	ids = append(ids, manual.BootstrapInstanceId)
    57  	instances, err = s.env.Instances(ids)
    58  	c.Assert(err, gc.IsNil)
    59  	c.Assert(instances, gc.HasLen, 1)
    60  	c.Assert(instances[0], gc.NotNil)
    61  
    62  	ids = append(ids, manual.BootstrapInstanceId)
    63  	instances, err = s.env.Instances(ids)
    64  	c.Assert(err, gc.IsNil)
    65  	c.Assert(instances, gc.HasLen, 2)
    66  	c.Assert(instances[0], gc.NotNil)
    67  	c.Assert(instances[1], gc.NotNil)
    68  
    69  	ids = append(ids, instance.Id("invalid"))
    70  	instances, err = s.env.Instances(ids)
    71  	c.Assert(err, gc.Equals, environs.ErrPartialInstances)
    72  	c.Assert(instances, gc.HasLen, 3)
    73  	c.Assert(instances[0], gc.NotNil)
    74  	c.Assert(instances[1], gc.NotNil)
    75  	c.Assert(instances[2], gc.IsNil)
    76  
    77  	ids = []instance.Id{instance.Id("invalid")}
    78  	instances, err = s.env.Instances(ids)
    79  	c.Assert(err, gc.Equals, environs.ErrNoInstances)
    80  	c.Assert(instances, gc.HasLen, 1)
    81  	c.Assert(instances[0], gc.IsNil)
    82  }
    83  
    84  func (s *environSuite) TestDestroy(c *gc.C) {
    85  	var resultStderr string
    86  	var resultErr error
    87  	runSSHCommandTesting := func(host string, command []string) (string, error) {
    88  		c.Assert(host, gc.Equals, "ubuntu@hostname")
    89  		c.Assert(command, gc.DeepEquals, []string{"sudo", "pkill", "-6", "jujud"})
    90  		return resultStderr, resultErr
    91  	}
    92  	s.PatchValue(&runSSHCommand, runSSHCommandTesting)
    93  	type test struct {
    94  		stderr string
    95  		err    error
    96  		match  string
    97  	}
    98  	tests := []test{
    99  		{"", nil, ""},
   100  		{"abc", nil, ""},
   101  		{"", errors.New("oh noes"), "oh noes"},
   102  		{"123", errors.New("abc"), "abc \\(123\\)"},
   103  	}
   104  	for i, t := range tests {
   105  		c.Logf("test %d: %v", i, t)
   106  		resultStderr, resultErr = t.stderr, t.err
   107  		err := s.env.Destroy()
   108  		if t.match == "" {
   109  			c.Assert(err, gc.IsNil)
   110  		} else {
   111  			c.Assert(err, gc.ErrorMatches, t.match)
   112  		}
   113  	}
   114  }
   115  
   116  func (s *environSuite) TestLocalStorageConfig(c *gc.C) {
   117  	c.Assert(s.env.StorageDir(), gc.Equals, "/var/lib/juju/storage")
   118  	c.Assert(s.env.cfg.storageListenAddr(), gc.Equals, ":8040")
   119  	c.Assert(s.env.StorageAddr(), gc.Equals, s.env.cfg.storageListenAddr())
   120  	c.Assert(s.env.SharedStorageAddr(), gc.Equals, "")
   121  	c.Assert(s.env.SharedStorageDir(), gc.Equals, "")
   122  }
   123  
   124  func (s *environSuite) TestEnvironSupportsCustomSources(c *gc.C) {
   125  	sources, err := tools.GetMetadataSources(s.env)
   126  	c.Assert(err, gc.IsNil)
   127  	c.Assert(len(sources), gc.Equals, 2)
   128  	url, err := sources[0].URL("")
   129  	c.Assert(err, gc.IsNil)
   130  	c.Assert(strings.Contains(url, "/tools"), jc.IsTrue)
   131  }