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  }