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 }