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, ¶ms.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: ¶ms.ModelInfo{Name: "name", UUID: "etc.", Type: "foo"}, 57 }, { 58 Error: ¶ms.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: ¶ms.ModelInfo{Name: "name", UUID: "etc."}, 68 }, { 69 Error: ¶ms.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: ¶ms.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 }