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

     1  // Copyright 2018 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package uniter_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  	"gopkg.in/juju/names.v2"
    11  
    12  	basetesting "github.com/juju/juju/api/base/testing"
    13  	"github.com/juju/juju/api/uniter"
    14  	"github.com/juju/juju/apiserver/params"
    15  	coretesting "github.com/juju/juju/testing"
    16  )
    17  
    18  type podSpecSuite struct {
    19  	coretesting.BaseSuite
    20  }
    21  
    22  var _ = gc.Suite(&podSpecSuite{})
    23  
    24  func (s *podSpecSuite) TestSetPodSpec(c *gc.C) {
    25  	expected := params.SetPodSpecParams{
    26  		Specs: []params.EntityString{{
    27  			Tag:   "application-mysql",
    28  			Value: "spec",
    29  		}},
    30  	}
    31  
    32  	apiCaller := basetesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    33  		c.Assert(objType, gc.Equals, "Uniter")
    34  		c.Assert(version, gc.Equals, expectedAPIVersion)
    35  		c.Assert(id, gc.Equals, "")
    36  		c.Assert(request, gc.Equals, "SetPodSpec")
    37  		c.Assert(arg, gc.DeepEquals, expected)
    38  		c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
    39  		*(result.(*params.ErrorResults)) = params.ErrorResults{
    40  			Results: []params.ErrorResult{{
    41  				Error: &params.Error{Message: "yoink"},
    42  			}},
    43  		}
    44  		return nil
    45  	})
    46  	st := uniter.NewState(apiCaller, names.NewUnitTag("mysql/0"))
    47  	err := st.SetPodSpec("mysql", "spec")
    48  	c.Assert(err, gc.ErrorMatches, "yoink")
    49  }
    50  
    51  func (s *podSpecSuite) TestSetPodSpecInvalidApplicationName(c *gc.C) {
    52  	st := uniter.NewState(nil, names.NewUnitTag("mysql/0"))
    53  	err := st.SetPodSpec("", "spec")
    54  	c.Assert(err, gc.ErrorMatches, `application name "" not valid`)
    55  }
    56  
    57  func (s *podSpecSuite) TestSetPodSpecError(c *gc.C) {
    58  	expected := params.SetPodSpecParams{
    59  		Specs: []params.EntityString{{
    60  			Tag:   "application-mysql",
    61  			Value: "spec",
    62  		}},
    63  	}
    64  
    65  	var called bool
    66  	msg := "yoink"
    67  	apiCaller := basetesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    68  		c.Assert(objType, gc.Equals, "Uniter")
    69  		c.Assert(version, gc.Equals, expectedAPIVersion)
    70  		c.Assert(id, gc.Equals, "")
    71  		c.Assert(request, gc.Equals, "SetPodSpec")
    72  		c.Assert(arg, gc.DeepEquals, expected)
    73  		called = true
    74  
    75  		c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
    76  		return errors.New(msg)
    77  	})
    78  
    79  	st := uniter.NewState(apiCaller, names.NewUnitTag("mysql/0"))
    80  	err := st.SetPodSpec("mysql", "spec")
    81  	c.Assert(err, gc.ErrorMatches, msg)
    82  	c.Assert(called, jc.IsTrue)
    83  }