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  }