github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/cloudconfig/instancecfg/instancecfg_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package instancecfg_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	"github.com/juju/version"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/cloudconfig/instancecfg"
    12  	"github.com/juju/juju/environs/config"
    13  	"github.com/juju/juju/state/multiwatcher"
    14  	"github.com/juju/juju/testing"
    15  	coretools "github.com/juju/juju/tools"
    16  )
    17  
    18  type instancecfgSuite struct {
    19  	testing.BaseSuite
    20  }
    21  
    22  var _ = gc.Suite(&instancecfgSuite{})
    23  
    24  func (*instancecfgSuite) TestInstanceTagsController(c *gc.C) {
    25  	cfg := testing.CustomModelConfig(c, testing.Attrs{})
    26  	controllerJobs := []multiwatcher.MachineJob{multiwatcher.JobManageModel}
    27  	nonControllerJobs := []multiwatcher.MachineJob{multiwatcher.JobHostUnits}
    28  	testInstanceTags(c, cfg, controllerJobs, map[string]string{
    29  		"juju-model-uuid":      testing.ModelTag.Id(),
    30  		"juju-controller-uuid": testing.ModelTag.Id(),
    31  		"juju-is-controller":   "true",
    32  	})
    33  	testInstanceTags(c, cfg, nonControllerJobs, map[string]string{
    34  		"juju-model-uuid":      testing.ModelTag.Id(),
    35  		"juju-controller-uuid": testing.ModelTag.Id(),
    36  	})
    37  }
    38  
    39  func (*instancecfgSuite) TestInstanceTagsUserSpecified(c *gc.C) {
    40  	cfg := testing.CustomModelConfig(c, testing.Attrs{
    41  		"resource-tags": "a=b c=",
    42  	})
    43  	testInstanceTags(c, cfg, nil, map[string]string{
    44  		"juju-model-uuid":      testing.ModelTag.Id(),
    45  		"juju-controller-uuid": testing.ModelTag.Id(),
    46  		"a": "b",
    47  		"c": "",
    48  	})
    49  }
    50  
    51  func testInstanceTags(c *gc.C, cfg *config.Config, jobs []multiwatcher.MachineJob, expectTags map[string]string) {
    52  	tags := instancecfg.InstanceTags(cfg, jobs)
    53  	c.Assert(tags, jc.DeepEquals, expectTags)
    54  }
    55  
    56  func (*instancecfgSuite) TestAgentVersionZero(c *gc.C) {
    57  	var icfg instancecfg.InstanceConfig
    58  	c.Assert(icfg.AgentVersion(), gc.Equals, version.Binary{})
    59  }
    60  
    61  func (*instancecfgSuite) TestAgentVersion(c *gc.C) {
    62  	var icfg instancecfg.InstanceConfig
    63  	list := coretools.List{
    64  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-trusty-amd64")},
    65  	}
    66  	err := icfg.SetTools(list)
    67  	c.Assert(err, jc.ErrorIsNil)
    68  	c.Assert(icfg.AgentVersion(), gc.Equals, list[0].Version)
    69  }
    70  
    71  func (*instancecfgSuite) TestSetToolsSameVersions(c *gc.C) {
    72  	var icfg instancecfg.InstanceConfig
    73  	list := coretools.List{
    74  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-trusty-amd64")},
    75  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-trusty-amd64")},
    76  	}
    77  	err := icfg.SetTools(list)
    78  	c.Assert(err, jc.ErrorIsNil)
    79  	c.Assert(icfg.ToolsList(), jc.DeepEquals, list)
    80  }
    81  
    82  func (*instancecfgSuite) TestSetToolsDifferentVersions(c *gc.C) {
    83  	var icfg instancecfg.InstanceConfig
    84  	list := coretools.List{
    85  		&coretools.Tools{Version: version.MustParseBinary("2.3.4-trusty-amd64")},
    86  		&coretools.Tools{Version: version.MustParseBinary("2.3.5-trusty-amd64")},
    87  	}
    88  	err := icfg.SetTools(list)
    89  	c.Assert(err, gc.ErrorMatches, `tools info mismatch.*2\.3\.4.*2\.3\.5.*`)
    90  	c.Assert(icfg.ToolsList(), gc.HasLen, 0)
    91  }
    92  
    93  func (*instancecfgSuite) TestJujuTools(c *gc.C) {
    94  	icfg := &instancecfg.InstanceConfig{
    95  		DataDir: "/path/to/datadir/",
    96  	}
    97  	err := icfg.SetTools(coretools.List{
    98  		&coretools.Tools{
    99  			Version: version.MustParseBinary("2.3.4-trusty-amd64"),
   100  			URL:     "/tools/2.3.4-trusty-amd64",
   101  		},
   102  	})
   103  	c.Assert(err, jc.ErrorIsNil)
   104  
   105  	c.Assert(icfg.JujuTools(), gc.Equals, "/path/to/datadir/tools/2.3.4-trusty-amd64")
   106  }
   107  
   108  func (*instancecfgSuite) TestGUITools(c *gc.C) {
   109  	icfg := &instancecfg.InstanceConfig{
   110  		DataDir: "/path/to/datadir/",
   111  	}
   112  	c.Assert(icfg.GUITools(), gc.Equals, "/path/to/datadir/gui")
   113  }