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 }