github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/apiserver/common/tools_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_test
     5  
     6  import (
     7  	"fmt"
     8  
     9  	gc "launchpad.net/gocheck"
    10  
    11  	"launchpad.net/juju-core/juju/testing"
    12  	"launchpad.net/juju-core/state"
    13  	"launchpad.net/juju-core/state/api/params"
    14  	"launchpad.net/juju-core/state/apiserver/common"
    15  	apiservertesting "launchpad.net/juju-core/state/apiserver/testing"
    16  	jc "launchpad.net/juju-core/testing/checkers"
    17  	"launchpad.net/juju-core/version"
    18  )
    19  
    20  type toolsSuite struct {
    21  	testing.JujuConnSuite
    22  	machine0 *state.Machine
    23  }
    24  
    25  var _ = gc.Suite(&toolsSuite{})
    26  
    27  func (s *toolsSuite) SetUpTest(c *gc.C) {
    28  	s.JujuConnSuite.SetUpTest(c)
    29  	var err error
    30  	s.machine0, err = s.State.AddMachine("series", state.JobHostUnits)
    31  	c.Assert(err, gc.IsNil)
    32  }
    33  
    34  func (s *toolsSuite) TestTools(c *gc.C) {
    35  	getCanRead := func() (common.AuthFunc, error) {
    36  		return func(tag string) bool {
    37  			return tag == "machine-0" || tag == "machine-42"
    38  		}, nil
    39  	}
    40  	tg := common.NewToolsGetter(s.State, getCanRead)
    41  	c.Assert(tg, gc.NotNil)
    42  
    43  	err := s.machine0.SetAgentVersion(version.Current)
    44  	c.Assert(err, gc.IsNil)
    45  
    46  	args := params.Entities{
    47  		Entities: []params.Entity{
    48  			{Tag: "machine-0"},
    49  			{Tag: "machine-1"},
    50  			{Tag: "machine-42"},
    51  		}}
    52  	result, err := tg.Tools(args)
    53  	c.Assert(err, gc.IsNil)
    54  	c.Assert(result.Results, gc.HasLen, 3)
    55  	c.Assert(result.Results[0].Tools, gc.NotNil)
    56  	c.Assert(result.Results[0].Tools.Version, gc.DeepEquals, version.Current)
    57  	c.Assert(result.Results[0].DisableSSLHostnameVerification, jc.IsFalse)
    58  	c.Assert(result.Results[1].Error, gc.DeepEquals, apiservertesting.ErrUnauthorized)
    59  	c.Assert(result.Results[2].Error, gc.DeepEquals, apiservertesting.NotFoundError("machine 42"))
    60  }
    61  
    62  func (s *toolsSuite) TestToolsError(c *gc.C) {
    63  	getCanRead := func() (common.AuthFunc, error) {
    64  		return nil, fmt.Errorf("splat")
    65  	}
    66  	tg := common.NewToolsGetter(s.State, getCanRead)
    67  	args := params.Entities{
    68  		Entities: []params.Entity{{Tag: "machine-42"}},
    69  	}
    70  	result, err := tg.Tools(args)
    71  	c.Assert(err, gc.ErrorMatches, "splat")
    72  	c.Assert(result.Results, gc.HasLen, 1)
    73  }
    74  
    75  func (s *toolsSuite) TestSetTools(c *gc.C) {
    76  	getCanWrite := func() (common.AuthFunc, error) {
    77  		return func(tag string) bool {
    78  			return tag == "machine-0" || tag == "machine-42"
    79  		}, nil
    80  	}
    81  	ts := common.NewToolsSetter(s.State, getCanWrite)
    82  	c.Assert(ts, gc.NotNil)
    83  
    84  	err := s.machine0.SetAgentVersion(version.Current)
    85  	c.Assert(err, gc.IsNil)
    86  
    87  	args := params.EntitiesVersion{
    88  		AgentTools: []params.EntityVersion{{
    89  			Tag: "machine-0",
    90  			Tools: &params.Version{
    91  				Version: version.Current,
    92  			},
    93  		}, {
    94  			Tag: "machine-1",
    95  			Tools: &params.Version{
    96  				Version: version.Current,
    97  			},
    98  		}, {
    99  			Tag: "machine-42",
   100  			Tools: &params.Version{
   101  				Version: version.Current,
   102  			},
   103  		}},
   104  	}
   105  	result, err := ts.SetTools(args)
   106  	c.Assert(err, gc.IsNil)
   107  	c.Assert(result.Results, gc.HasLen, 3)
   108  	c.Assert(result.Results[0].Error, gc.IsNil)
   109  	agentTools, err := s.machine0.AgentTools()
   110  	c.Assert(err, gc.IsNil)
   111  	c.Assert(agentTools.Version, gc.DeepEquals, version.Current)
   112  	c.Assert(result.Results[1].Error, gc.DeepEquals, apiservertesting.ErrUnauthorized)
   113  	c.Assert(result.Results[2].Error, gc.DeepEquals, apiservertesting.NotFoundError("machine 42"))
   114  }
   115  
   116  func (s *toolsSuite) TestToolsSetError(c *gc.C) {
   117  	getCanWrite := func() (common.AuthFunc, error) {
   118  		return nil, fmt.Errorf("splat")
   119  	}
   120  	ts := common.NewToolsSetter(s.State, getCanWrite)
   121  	args := params.EntitiesVersion{
   122  		AgentTools: []params.EntityVersion{{
   123  			Tag: "machine-42",
   124  			Tools: &params.Version{
   125  				Version: version.Current,
   126  			},
   127  		}},
   128  	}
   129  	result, err := ts.SetTools(args)
   130  	c.Assert(err, gc.ErrorMatches, "splat")
   131  	c.Assert(result.Results, gc.HasLen, 1)
   132  }