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  }