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, &params.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: &params.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: &params.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  }