github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/environmentmanager/environmentmanager_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package environmentmanager_test 5 6 import ( 7 "github.com/juju/names" 8 jc "github.com/juju/testing/checkers" 9 "github.com/juju/utils" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api" 13 "github.com/juju/juju/api/environmentmanager" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/feature" 16 "github.com/juju/juju/juju" 17 jujutesting "github.com/juju/juju/juju/testing" 18 coretesting "github.com/juju/juju/testing" 19 "github.com/juju/juju/testing/factory" 20 ) 21 22 type environmentmanagerSuite struct { 23 jujutesting.JujuConnSuite 24 } 25 26 var _ = gc.Suite(&environmentmanagerSuite{}) 27 28 func (s *environmentmanagerSuite) SetUpTest(c *gc.C) { 29 s.JujuConnSuite.SetUpTest(c) 30 } 31 32 func (s *environmentmanagerSuite) OpenAPI(c *gc.C) *environmentmanager.Client { 33 conn, err := juju.NewAPIState(s.AdminUserTag(c), s.Environ, api.DialOpts{}) 34 c.Assert(err, jc.ErrorIsNil) 35 s.AddCleanup(func(*gc.C) { conn.Close() }) 36 return environmentmanager.NewClient(conn) 37 } 38 39 func (s *environmentmanagerSuite) TestConfigSkeleton(c *gc.C) { 40 s.SetFeatureFlags(feature.JES) 41 envManager := s.OpenAPI(c) 42 result, err := envManager.ConfigSkeleton("", "") 43 c.Assert(err, jc.ErrorIsNil) 44 45 // The apiPort changes every test run as the dummy provider 46 // looks for a random open port. 47 apiPort := s.Environ.Config().APIPort() 48 49 // Numbers coming over the api are floats, not ints. 50 c.Assert(result, jc.DeepEquals, params.EnvironConfig{ 51 "type": "dummy", 52 "ca-cert": coretesting.CACert, 53 "state-port": float64(1234), 54 "api-port": float64(apiPort), 55 "syslog-port": float64(2345), 56 }) 57 58 } 59 60 func (s *environmentmanagerSuite) TestCreateEnvironmentBadUser(c *gc.C) { 61 envManager := s.OpenAPI(c) 62 _, err := envManager.CreateEnvironment("not a user", nil, nil) 63 c.Assert(err, gc.ErrorMatches, `invalid owner name "not a user"`) 64 } 65 66 func (s *environmentmanagerSuite) TestCreateEnvironmentFeatureNotEnabled(c *gc.C) { 67 envManager := s.OpenAPI(c) 68 _, err := envManager.CreateEnvironment("owner", nil, nil) 69 c.Assert(err, gc.ErrorMatches, `unknown object type "EnvironmentManager"`) 70 } 71 72 func (s *environmentmanagerSuite) TestCreateEnvironmentMissingConfig(c *gc.C) { 73 s.SetFeatureFlags(feature.JES) 74 envManager := s.OpenAPI(c) 75 _, err := envManager.CreateEnvironment("owner", nil, nil) 76 c.Assert(err, gc.ErrorMatches, `creating config from values failed: name: expected string, got nothing`) 77 } 78 79 func (s *environmentmanagerSuite) TestCreateEnvironment(c *gc.C) { 80 s.SetFeatureFlags(feature.JES) 81 envManager := s.OpenAPI(c) 82 user := s.Factory.MakeUser(c, nil) 83 owner := user.UserTag().Username() 84 newEnv, err := envManager.CreateEnvironment(owner, nil, map[string]interface{}{ 85 "name": "new-env", 86 "authorized-keys": "ssh-key", 87 // dummy needs state-server 88 "state-server": false, 89 }) 90 c.Assert(err, jc.ErrorIsNil) 91 c.Assert(newEnv.Name, gc.Equals, "new-env") 92 c.Assert(newEnv.OwnerTag, gc.Equals, user.Tag().String()) 93 c.Assert(utils.IsValidUUIDString(newEnv.UUID), jc.IsTrue) 94 } 95 96 func (s *environmentmanagerSuite) TestListEnvironmentsBadUser(c *gc.C) { 97 envManager := s.OpenAPI(c) 98 _, err := envManager.ListEnvironments("not a user") 99 c.Assert(err, gc.ErrorMatches, `invalid user name "not a user"`) 100 } 101 102 func (s *environmentmanagerSuite) TestListEnvironments(c *gc.C) { 103 s.SetFeatureFlags(feature.JES) 104 owner := names.NewUserTag("user@remote") 105 s.Factory.MakeEnvironment(c, &factory.EnvParams{ 106 Name: "first", Owner: owner}).Close() 107 s.Factory.MakeEnvironment(c, &factory.EnvParams{ 108 Name: "second", Owner: owner}).Close() 109 110 envManager := s.OpenAPI(c) 111 envs, err := envManager.ListEnvironments("user@remote") 112 c.Assert(err, jc.ErrorIsNil) 113 c.Assert(envs, gc.HasLen, 2) 114 115 envNames := []string{envs[0].Name, envs[1].Name} 116 c.Assert(envNames, jc.DeepEquals, []string{"first", "second"}) 117 ownerNames := []string{envs[0].Owner, envs[1].Owner} 118 c.Assert(ownerNames, jc.DeepEquals, []string{"user@remote", "user@remote"}) 119 }