github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/upgrades/tags_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package upgrades_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/environs" 11 "github.com/juju/juju/environs/config" 12 "github.com/juju/juju/instance" 13 "github.com/juju/juju/state" 14 statetesting "github.com/juju/juju/state/testing" 15 "github.com/juju/juju/testing" 16 "github.com/juju/juju/upgrades" 17 ) 18 19 type tagsSuite struct { 20 statetesting.StateSuite 21 stateServer, unprovisioned, provisioned, container *state.Machine 22 } 23 24 var _ = gc.Suite(&tagsSuite{}) 25 26 func (s *tagsSuite) SetUpTest(c *gc.C) { 27 s.StateSuite.SetUpTest(c) 28 29 var err error 30 s.stateServer, err = s.State.AddMachine("quantal", state.JobManageEnviron) 31 c.Assert(err, jc.ErrorIsNil) 32 err = s.stateServer.SetProvisioned("inst-0", "nonce-0", nil) 33 c.Assert(err, jc.ErrorIsNil) 34 35 s.unprovisioned, err = s.State.AddMachine("quantal", state.JobHostUnits) 36 c.Assert(err, jc.ErrorIsNil) 37 38 s.provisioned, err = s.State.AddMachine("quantal", state.JobHostUnits) 39 c.Assert(err, jc.ErrorIsNil) 40 err = s.provisioned.SetProvisioned("inst-1", "nonce-1", nil) 41 c.Assert(err, jc.ErrorIsNil) 42 43 s.container, err = s.State.AddMachineInsideMachine(state.MachineTemplate{ 44 Series: "quantal", 45 Jobs: []state.MachineJob{state.JobHostUnits}, 46 }, s.provisioned.Id(), instance.LXC) 47 c.Assert(err, jc.ErrorIsNil) 48 err = s.container.SetProvisioned("inst-2", "nonce-2", nil) 49 c.Assert(err, jc.ErrorIsNil) 50 } 51 52 func (s *tagsSuite) TestAddInstanceTagsSupportsTagging(c *gc.C) { 53 env := &testEnvironWithTagging{ 54 testEnviron: testEnviron{ 55 cfg: testing.CustomEnvironConfig(c, testing.Attrs{ 56 "resource-tags": "abc=123", 57 }), 58 }, 59 } 60 err := upgrades.AddInstanceTags(env, []*state.Machine{ 61 s.stateServer, s.unprovisioned, s.provisioned, s.container, 62 }) 63 c.Assert(err, jc.ErrorIsNil) 64 c.Assert(env.calls, jc.DeepEquals, []tagInstanceArgs{{ 65 "inst-0", map[string]string{ 66 "juju-is-state": "true", 67 "juju-env-uuid": testing.EnvironmentTag.Id(), 68 "abc": "123", 69 }, 70 }, { 71 "inst-1", map[string]string{ 72 "juju-env-uuid": testing.EnvironmentTag.Id(), 73 "abc": "123", 74 }, 75 }}) 76 } 77 78 func (s *tagsSuite) TestAddInstanceTagsDoesNotSupportTagging(c *gc.C) { 79 env := &testEnviron{cfg: testing.CustomEnvironConfig(c, nil)} 80 err := upgrades.AddInstanceTags(env, []*state.Machine{ 81 s.stateServer, s.unprovisioned, s.provisioned, s.container, 82 }) 83 c.Assert(err, jc.ErrorIsNil) 84 } 85 86 type testEnviron struct { 87 environs.Environ 88 cfg *config.Config 89 } 90 91 func (e *testEnviron) Config() *config.Config { 92 return e.cfg 93 } 94 95 type tagInstanceArgs struct { 96 id instance.Id 97 tags map[string]string 98 } 99 100 type testEnvironWithTagging struct { 101 testEnviron 102 calls []tagInstanceArgs 103 } 104 105 func (e *testEnvironWithTagging) TagInstance(id instance.Id, tags map[string]string) error { 106 e.calls = append(e.calls, tagInstanceArgs{id, tags}) 107 return nil 108 }