github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/api/machinemanager/machinemanager_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package machinemanager_test 5 6 import ( 7 "errors" 8 "fmt" 9 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/api/base/testing" 14 "github.com/juju/juju/api/machinemanager" 15 "github.com/juju/juju/apiserver/params" 16 "github.com/juju/juju/storage" 17 coretesting "github.com/juju/juju/testing" 18 ) 19 20 var _ = gc.Suite(&MachinemanagerSuite{}) 21 22 type MachinemanagerSuite struct { 23 coretesting.BaseSuite 24 } 25 26 func (s *MachinemanagerSuite) TestAddMachines(c *gc.C) { 27 apiResult := []params.AddMachinesResult{ 28 {Machine: "machine-1", Error: nil}, 29 {Machine: "machine-2", Error: nil}, 30 } 31 32 var callCount int 33 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 34 c.Check(objType, gc.Equals, "MachineManager") 35 c.Check(version, gc.Equals, 0) 36 c.Check(id, gc.Equals, "") 37 c.Check(request, gc.Equals, "AddMachines") 38 c.Check(arg, gc.DeepEquals, params.AddMachines{ 39 MachineParams: []params.AddMachineParams{ 40 { 41 Series: "trusty", 42 Disks: []storage.Constraints{{Pool: "loop", Size: 1}}, 43 }, 44 { 45 Series: "precise", 46 }, 47 }, 48 }) 49 c.Assert(result, gc.FitsTypeOf, ¶ms.AddMachinesResults{}) 50 *(result.(*params.AddMachinesResults)) = params.AddMachinesResults{ 51 Machines: apiResult, 52 } 53 callCount++ 54 return nil 55 }) 56 57 st := machinemanager.NewClient(apiCaller) 58 machines := []params.AddMachineParams{{ 59 Series: "trusty", 60 Disks: []storage.Constraints{{Pool: "loop", Size: 1}}, 61 }, { 62 Series: "precise", 63 }} 64 result, err := st.AddMachines(machines) 65 c.Check(err, jc.ErrorIsNil) 66 c.Assert(result, jc.DeepEquals, apiResult) 67 c.Check(callCount, gc.Equals, 1) 68 } 69 70 func (s *MachinemanagerSuite) TestAddMachinesClientError(c *gc.C) { 71 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 72 return errors.New("blargh") 73 }) 74 st := machinemanager.NewClient(apiCaller) 75 _, err := st.AddMachines(nil) 76 c.Check(err, gc.ErrorMatches, "blargh") 77 } 78 79 func (s *MachinemanagerSuite) TestAddMachinesServerError(c *gc.C) { 80 apiResult := []params.AddMachinesResult{{ 81 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 82 }} 83 84 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 85 *(result.(*params.AddMachinesResults)) = params.AddMachinesResults{ 86 Machines: apiResult, 87 } 88 return nil 89 }) 90 st := machinemanager.NewClient(apiCaller) 91 machines := []params.AddMachineParams{{ 92 Series: "trusty", 93 }} 94 results, err := st.AddMachines(machines) 95 c.Check(err, jc.ErrorIsNil) 96 c.Assert(results, jc.DeepEquals, apiResult) 97 } 98 99 func (s *MachinemanagerSuite) TestAddMachinesResultCountInvalid(c *gc.C) { 100 for _, n := range []int{0, 2} { 101 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 102 var results []params.AddMachinesResult 103 for i := 0; i < n; i++ { 104 results = append(results, params.AddMachinesResult{ 105 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 106 }) 107 } 108 *(result.(*params.AddMachinesResults)) = params.AddMachinesResults{Machines: results} 109 return nil 110 }) 111 st := machinemanager.NewClient(apiCaller) 112 machines := []params.AddMachineParams{{ 113 Series: "trusty", 114 }} 115 _, err := st.AddMachines(machines) 116 c.Check(err, gc.ErrorMatches, fmt.Sprintf("expected 1 result, got %d", n)) 117 } 118 }