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

     1  // Copyright 2018 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package bundle_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	basetesting "github.com/juju/juju/api/base/testing"
    12  	"github.com/juju/juju/api/bundle"
    13  	"github.com/juju/juju/apiserver/common"
    14  	"github.com/juju/juju/apiserver/params"
    15  	coretesting "github.com/juju/juju/testing"
    16  )
    17  
    18  type bundleMockSuite struct {
    19  	coretesting.BaseSuite
    20  	bundleClient *bundle.Client
    21  }
    22  
    23  var _ = gc.Suite(&bundleMockSuite{})
    24  
    25  func newClient(f basetesting.APICallerFunc, ver int) *bundle.Client {
    26  	return bundle.NewClient(basetesting.BestVersionCaller{f, ver})
    27  }
    28  
    29  func (s *bundleMockSuite) TestFailExportBundlev1(c *gc.C) {
    30  	client := newClient(
    31  		func(objType string,
    32  			version int,
    33  			id,
    34  			request string,
    35  			args,
    36  			response interface{},
    37  		) error {
    38  			c.Check(objType, gc.Equals, "Bundle")
    39  			c.Check(id, gc.Equals, "")
    40  			c.Check(request, gc.Equals, "ExportBundle")
    41  			c.Assert(args, gc.Equals, nil)
    42  			result := response.(*params.StringResult)
    43  			result.Result = ""
    44  			return nil
    45  		}, 1,
    46  	)
    47  	result, err := client.ExportBundle()
    48  	c.Assert(err, gc.NotNil)
    49  	c.Assert(err.Error(), gc.Equals, "this controller version does not support bundle export feature.")
    50  	c.Assert(result, jc.DeepEquals, "")
    51  }
    52  
    53  func (s *bundleMockSuite) TestExportBundlev2(c *gc.C) {
    54  	client := newClient(
    55  		func(objType string, version int,
    56  			id,
    57  			request string,
    58  			args,
    59  			response interface{},
    60  		) error {
    61  			result := response.(*params.StringResult)
    62  			result.Result = "applications:\n  " +
    63  				"ubuntu:\n    " +
    64  				"charm: cs:trusty/ubuntu\n    " +
    65  				"series: trusty\n    " +
    66  				"num_units: 1\n    " +
    67  				"to:\n    " +
    68  				"- \"0\"\n    " +
    69  				"options:\n      " +
    70  				"key: value\n" +
    71  				"series: xenial\n" +
    72  				"relations:\n" +
    73  				"- []\n"
    74  			return nil
    75  		}, 2,
    76  	)
    77  	result, err := client.ExportBundle()
    78  	c.Assert(err, jc.ErrorIsNil)
    79  	c.Assert(result, jc.DeepEquals, "applications:\n  "+
    80  		"ubuntu:\n    "+
    81  		"charm: cs:trusty/ubuntu\n    "+
    82  		"series: trusty\n    "+
    83  		"num_units: 1\n    "+
    84  		"to:\n    "+
    85  		"- \"0\"\n    "+
    86  		"options:\n      "+
    87  		"key: value\n"+
    88  		"series: xenial\n"+
    89  		"relations:\n"+
    90  		"- []\n")
    91  }
    92  
    93  func (s *bundleMockSuite) TestExportBundleNotNilParamsErrorv2(c *gc.C) {
    94  	client := newClient(
    95  		func(objType string, version int,
    96  			id,
    97  			request string,
    98  			args,
    99  			response interface{},
   100  		) error {
   101  			result := response.(*params.StringResult)
   102  			result.Result = ""
   103  			*(response.(*params.StringResult)) = params.StringResult{Error: common.ServerError(
   104  				errors.New("export failed nothing to export as there are no applications"))}
   105  			return result.Error
   106  		}, 2,
   107  	)
   108  	result, err := client.ExportBundle()
   109  	c.Assert(err, gc.NotNil)
   110  	c.Assert(result, jc.DeepEquals, "")
   111  	c.Check(err.Error(), gc.Matches, "export failed nothing to export as there are no applications")
   112  }
   113  
   114  func (s *bundleMockSuite) TestExportBundleFailNoParamsErrorv2(c *gc.C) {
   115  	client := newClient(
   116  		func(objType string, version int,
   117  			id,
   118  			request string,
   119  			args,
   120  			response interface{},
   121  		) error {
   122  			result := response.(*params.StringResult)
   123  			result.Result = ""
   124  			return errors.New("foo")
   125  		}, 2,
   126  	)
   127  	result, err := client.ExportBundle()
   128  	c.Assert(err, gc.NotNil)
   129  	c.Assert(result, jc.DeepEquals, "")
   130  	c.Check(err.Error(), gc.Matches, "foo")
   131  }