github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/featuretests/api_environment_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package featuretests
     5  
     6  import (
     7  	"bytes"
     8  	"time"
     9  
    10  	"github.com/juju/errors"
    11  	"github.com/juju/names"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/api"
    16  	"github.com/juju/juju/apiserver/params"
    17  	"github.com/juju/juju/juju"
    18  	jujunames "github.com/juju/juju/juju/names"
    19  	"github.com/juju/juju/juju/testing"
    20  	"github.com/juju/juju/state"
    21  	coretesting "github.com/juju/juju/testing"
    22  	"github.com/juju/juju/testing/factory"
    23  	"github.com/juju/juju/version"
    24  )
    25  
    26  type apiEnvironmentSuite struct {
    27  	testing.JujuConnSuite
    28  	client *api.Client
    29  }
    30  
    31  func (s *apiEnvironmentSuite) SetUpTest(c *gc.C) {
    32  	s.JujuConnSuite.SetUpTest(c)
    33  	var err error
    34  	s.client, err = juju.NewAPIClientFromName("")
    35  	c.Assert(err, jc.ErrorIsNil)
    36  	c.Assert(s.client, gc.NotNil)
    37  }
    38  
    39  func (s *apiEnvironmentSuite) TearDownTest(c *gc.C) {
    40  	s.client.ClientFacade.Close()
    41  	s.JujuConnSuite.TearDownTest(c)
    42  }
    43  
    44  func (s *apiEnvironmentSuite) TestEnvironmentShare(c *gc.C) {
    45  	user := names.NewUserTag("foo@ubuntuone")
    46  
    47  	err := s.client.ShareEnvironment(user)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	envUser, err := s.State.EnvironmentUser(user)
    51  	c.Assert(err, jc.ErrorIsNil)
    52  	c.Assert(envUser.UserName(), gc.Equals, user.Username())
    53  	c.Assert(envUser.CreatedBy(), gc.Equals, s.AdminUserTag(c).Username())
    54  	lastConn, err := envUser.LastConnection()
    55  	c.Assert(err, jc.Satisfies, state.IsNeverConnectedError)
    56  	c.Assert(lastConn.IsZero(), jc.IsTrue)
    57  }
    58  
    59  func (s *apiEnvironmentSuite) TestEnvironmentUnshare(c *gc.C) {
    60  	// Firt share an environment with a user.
    61  	user := names.NewUserTag("foo@ubuntuone")
    62  	err := s.client.ShareEnvironment(user)
    63  	c.Assert(err, jc.ErrorIsNil)
    64  
    65  	envUser, err := s.State.EnvironmentUser(user)
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	c.Assert(envUser, gc.NotNil)
    68  
    69  	// Then test unsharing the environment.
    70  	err = s.client.UnshareEnvironment(user)
    71  	c.Assert(err, jc.ErrorIsNil)
    72  
    73  	envUser, err = s.State.EnvironmentUser(user)
    74  	c.Assert(errors.IsNotFound(err), jc.IsTrue)
    75  	c.Assert(envUser, gc.IsNil)
    76  }
    77  
    78  func (s *apiEnvironmentSuite) TestEnvironmentUserInfo(c *gc.C) {
    79  	envUser := s.Factory.MakeEnvUser(c, &factory.EnvUserParams{User: "bobjohns@ubuntuone", DisplayName: "Bob Johns"})
    80  	env, err := s.State.Environment()
    81  	c.Assert(err, jc.ErrorIsNil)
    82  	owner, err := s.State.EnvironmentUser(env.Owner())
    83  	c.Assert(err, jc.ErrorIsNil)
    84  
    85  	obtained, err := s.client.EnvironmentUserInfo()
    86  	c.Assert(err, jc.ErrorIsNil)
    87  	c.Assert(obtained, gc.DeepEquals, []params.EnvUserInfo{
    88  		{
    89  			UserName:       owner.UserName(),
    90  			DisplayName:    owner.DisplayName(),
    91  			CreatedBy:      owner.UserName(),
    92  			DateCreated:    owner.DateCreated(),
    93  			LastConnection: lastConnPointer(c, owner),
    94  		}, {
    95  			UserName:       "bobjohns@ubuntuone",
    96  			DisplayName:    "Bob Johns",
    97  			CreatedBy:      owner.UserName(),
    98  			DateCreated:    envUser.DateCreated(),
    99  			LastConnection: lastConnPointer(c, envUser),
   100  		},
   101  	})
   102  }
   103  
   104  func lastConnPointer(c *gc.C, envUser *state.EnvironmentUser) *time.Time {
   105  	lastConn, err := envUser.LastConnection()
   106  	if err != nil {
   107  		if state.IsNeverConnectedError(err) {
   108  			return nil
   109  		}
   110  		c.Fatal(err)
   111  	}
   112  	return &lastConn
   113  }
   114  
   115  func (s *apiEnvironmentSuite) TestUploadToolsOtherEnvironment(c *gc.C) {
   116  	// setup other environment
   117  	otherState := s.Factory.MakeEnvironment(c, nil)
   118  	defer otherState.Close()
   119  	info := s.APIInfo(c)
   120  	info.EnvironTag = otherState.EnvironTag()
   121  	otherAPIState, err := api.Open(info, api.DefaultDialOpts())
   122  	c.Assert(err, jc.ErrorIsNil)
   123  	defer otherAPIState.Close()
   124  	otherClient := otherAPIState.Client()
   125  	defer otherClient.ClientFacade.Close()
   126  
   127  	newVersion := version.MustParseBinary("5.4.3-quantal-amd64")
   128  
   129  	// build fake tools
   130  	tgz, checksum := coretesting.TarGz(
   131  		coretesting.NewTarFile(jujunames.Jujud, 0777, "jujud contents "+newVersion.String()))
   132  
   133  	tool, err := otherClient.UploadTools(bytes.NewReader(tgz), newVersion)
   134  	c.Assert(err, jc.ErrorIsNil)
   135  	c.Assert(tool.SHA256, gc.Equals, checksum)
   136  
   137  	toolStrg, err := otherState.ToolsStorage()
   138  	defer toolStrg.Close()
   139  	c.Assert(err, jc.ErrorIsNil)
   140  	meta, closer, err := toolStrg.Tools(newVersion)
   141  	defer closer.Close()
   142  	c.Assert(err, jc.ErrorIsNil)
   143  	c.Assert(meta.SHA256, gc.Equals, checksum)
   144  	c.Assert(meta.Version, gc.Equals, newVersion)
   145  }