github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/modelmanager/modelinfo_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package modelmanager_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	"gopkg.in/juju/names.v2"
    10  
    11  	basetesting "github.com/juju/juju/api/base/testing"
    12  	"github.com/juju/juju/api/modelmanager"
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/testing"
    15  	"github.com/juju/juju/version"
    16  )
    17  
    18  type modelInfoSuite struct {
    19  	testing.BaseSuite
    20  }
    21  
    22  var _ = gc.Suite(&modelInfoSuite{})
    23  
    24  func (s *modelInfoSuite) checkCall(c *gc.C, objType string, id, request string) {
    25  	c.Check(objType, gc.Equals, "ModelManager")
    26  	c.Check(id, gc.Equals, "")
    27  	c.Check(request, gc.Equals, "ModelInfo")
    28  }
    29  
    30  func (s *modelInfoSuite) assertResponse(c *gc.C, result interface{}) *params.ModelInfoResults {
    31  	c.Assert(result, gc.FitsTypeOf, &params.ModelInfoResults{})
    32  	return result.(*params.ModelInfoResults)
    33  }
    34  
    35  func (s *modelInfoSuite) assertExpectedModelInfo(c *gc.C, expectedInfo params.ModelInfoResults) {
    36  	apiCaller := basetesting.APICallerFunc(
    37  		func(objType string, version int, id, request string, a, result interface{}) error {
    38  			s.checkCall(c, objType, id, request)
    39  			resp := s.assertResponse(c, result)
    40  			*resp = expectedInfo
    41  			return nil
    42  		})
    43  	client := modelmanager.NewClient(apiCaller)
    44  	input := []names.ModelTag{}
    45  	for i := 0; i < len(expectedInfo.Results); i++ {
    46  		input = append(input, testing.ModelTag)
    47  	}
    48  	info, err := client.ModelInfo(input)
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	c.Assert(info, jc.DeepEquals, expectedInfo.Results)
    51  }
    52  
    53  func (s *modelInfoSuite) TestModelInfo(c *gc.C) {
    54  	results := params.ModelInfoResults{
    55  		Results: []params.ModelInfoResult{{
    56  			Result: &params.ModelInfo{Name: "name", UUID: "etc.", Type: "foo"},
    57  		}, {
    58  			Error: &params.Error{Message: "woop"},
    59  		}},
    60  	}
    61  	s.assertExpectedModelInfo(c, results)
    62  }
    63  
    64  func (s *modelInfoSuite) TestModelInfoOldController(c *gc.C) {
    65  	results := params.ModelInfoResults{
    66  		Results: []params.ModelInfoResult{{
    67  			Result: &params.ModelInfo{Name: "name", UUID: "etc."},
    68  		}, {
    69  			Error: &params.Error{Message: "woop"},
    70  		}},
    71  	}
    72  	s.assertExpectedModelInfo(c, results)
    73  	c.Assert(results.Results[0].Result.Type, gc.Equals, "iaas")
    74  }
    75  
    76  func (s *modelInfoSuite) TestModelInfoWithAgentVersion(c *gc.C) {
    77  	results := params.ModelInfoResults{
    78  		Results: []params.ModelInfoResult{{
    79  			Result: &params.ModelInfo{Name: "name", UUID: "etc.", Type: "foo", AgentVersion: &version.Current},
    80  		}},
    81  	}
    82  	s.assertExpectedModelInfo(c, results)
    83  }
    84  
    85  func (s *modelInfoSuite) TestInvalidResultCount(c *gc.C) {
    86  	apiCaller := basetesting.APICallerFunc(
    87  		func(objType string, version int, id, request string, a, result interface{}) error {
    88  			s.checkCall(c, objType, id, request)
    89  			c.Assert(a, jc.DeepEquals, params.Entities{
    90  				Entities: []params.Entity{{testing.ModelTag.String()}, {testing.ModelTag.String()}},
    91  			})
    92  			resp := s.assertResponse(c, result)
    93  			*resp = params.ModelInfoResults{Results: []params.ModelInfoResult{{}}}
    94  			return nil
    95  		},
    96  	)
    97  	client := modelmanager.NewClient(apiCaller)
    98  	_, err := client.ModelInfo([]names.ModelTag{testing.ModelTag, testing.ModelTag})
    99  	c.Assert(err, gc.ErrorMatches, "expected 2 result\\(s\\), got 1")
   100  }