github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/api/modelmanager/modelmanager_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package modelmanager_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/modelmanager" 13 "github.com/juju/juju/apiserver/params" 14 jujutesting "github.com/juju/juju/juju/testing" 15 coretesting "github.com/juju/juju/testing" 16 "github.com/juju/juju/testing/factory" 17 ) 18 19 type modelmanagerSuite struct { 20 jujutesting.JujuConnSuite 21 } 22 23 var _ = gc.Suite(&modelmanagerSuite{}) 24 25 func (s *modelmanagerSuite) SetUpTest(c *gc.C) { 26 s.JujuConnSuite.SetUpTest(c) 27 } 28 29 func (s *modelmanagerSuite) OpenAPI(c *gc.C) *modelmanager.Client { 30 return modelmanager.NewClient(s.APIState) 31 } 32 33 func (s *modelmanagerSuite) TestConfigSkeleton(c *gc.C) { 34 modelManager := s.OpenAPI(c) 35 result, err := modelManager.ConfigSkeleton("", "") 36 c.Assert(err, jc.ErrorIsNil) 37 38 // The apiPort changes every test run as the dummy provider 39 // looks for a random open port. 40 apiPort := s.Environ.Config().APIPort() 41 42 // Numbers coming over the api are floats, not ints. 43 c.Assert(result, jc.DeepEquals, params.ModelConfig{ 44 "type": "dummy", 45 "controller-uuid": coretesting.ModelTag.Id(), 46 "ca-cert": coretesting.CACert, 47 "state-port": float64(1234), 48 "api-port": float64(apiPort), 49 }) 50 51 } 52 53 func (s *modelmanagerSuite) TestCreateModelBadUser(c *gc.C) { 54 modelManager := s.OpenAPI(c) 55 _, err := modelManager.CreateModel("not a user", nil, nil) 56 c.Assert(err, gc.ErrorMatches, `invalid owner name "not a user"`) 57 } 58 59 func (s *modelmanagerSuite) TestCreateModelMissingConfig(c *gc.C) { 60 modelManager := s.OpenAPI(c) 61 _, err := modelManager.CreateModel("owner", nil, nil) 62 c.Assert(err, gc.ErrorMatches, `failed to create config: creating config from values failed: name: expected string, got nothing`) 63 } 64 65 func (s *modelmanagerSuite) TestCreateModel(c *gc.C) { 66 modelManager := s.OpenAPI(c) 67 user := s.Factory.MakeUser(c, nil) 68 owner := user.UserTag().Canonical() 69 newEnv, err := modelManager.CreateModel(owner, nil, map[string]interface{}{ 70 "name": "new-model", 71 "authorized-keys": "ssh-key", 72 // dummy needs controller 73 "controller": false, 74 }) 75 c.Assert(err, jc.ErrorIsNil) 76 c.Assert(newEnv.Name, gc.Equals, "new-model") 77 c.Assert(newEnv.OwnerTag, gc.Equals, user.Tag().String()) 78 c.Assert(utils.IsValidUUIDString(newEnv.UUID), jc.IsTrue) 79 } 80 81 func (s *modelmanagerSuite) TestListModelsBadUser(c *gc.C) { 82 modelManager := s.OpenAPI(c) 83 _, err := modelManager.ListModels("not a user") 84 c.Assert(err, gc.ErrorMatches, `invalid user name "not a user"`) 85 } 86 87 func (s *modelmanagerSuite) TestListModels(c *gc.C) { 88 owner := names.NewUserTag("user@remote") 89 s.Factory.MakeModel(c, &factory.ModelParams{ 90 Name: "first", Owner: owner}).Close() 91 s.Factory.MakeModel(c, &factory.ModelParams{ 92 Name: "second", Owner: owner}).Close() 93 94 modelManager := s.OpenAPI(c) 95 models, err := modelManager.ListModels("user@remote") 96 c.Assert(err, jc.ErrorIsNil) 97 c.Assert(models, gc.HasLen, 2) 98 99 envNames := []string{models[0].Name, models[1].Name} 100 c.Assert(envNames, jc.DeepEquals, []string{"first", "second"}) 101 ownerNames := []string{models[0].Owner, models[1].Owner} 102 c.Assert(ownerNames, jc.DeepEquals, []string{"user@remote", "user@remote"}) 103 }