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

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package modelupgrader_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	names "gopkg.in/juju/names.v2"
    10  
    11  	"github.com/juju/juju/api/base/testing"
    12  	"github.com/juju/juju/api/modelupgrader"
    13  	"github.com/juju/juju/apiserver/params"
    14  	coretesting "github.com/juju/juju/testing"
    15  )
    16  
    17  var (
    18  	modelTag = names.NewModelTag("e5757df7-c86a-4835-84bc-7174af535d25")
    19  )
    20  
    21  var _ = gc.Suite(&ModelUpgraderSuite{})
    22  
    23  type ModelUpgraderSuite struct {
    24  	coretesting.BaseSuite
    25  }
    26  
    27  var nullAPICaller = testing.APICallerFunc(
    28  	func(objType string, version int, id, request string, arg, result interface{}) error {
    29  		return nil
    30  	},
    31  )
    32  
    33  func (s *ModelUpgraderSuite) TestModelEnvironVersion(c *gc.C) {
    34  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    35  		c.Check(objType, gc.Equals, "ModelUpgrader")
    36  		c.Check(version, gc.Equals, 0)
    37  		c.Check(id, gc.Equals, "")
    38  		c.Check(request, gc.Equals, "ModelEnvironVersion")
    39  		c.Check(arg, jc.DeepEquals, &params.Entities{
    40  			Entities: []params.Entity{{Tag: modelTag.String()}},
    41  		})
    42  		c.Assert(result, gc.FitsTypeOf, &params.IntResults{})
    43  		*(result.(*params.IntResults)) = params.IntResults{
    44  			Results: []params.IntResult{{
    45  				Result: 1,
    46  			}},
    47  		}
    48  		return nil
    49  	})
    50  
    51  	client := modelupgrader.NewClient(apiCaller)
    52  	version, err := client.ModelEnvironVersion(modelTag)
    53  	c.Assert(err, jc.ErrorIsNil)
    54  	c.Assert(version, gc.Equals, 1)
    55  }
    56  
    57  func (s *ModelUpgraderSuite) TestModelEnvironVersionError(c *gc.C) {
    58  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    59  		*(result.(*params.IntResults)) = params.IntResults{
    60  			Results: []params.IntResult{{
    61  				Error: &params.Error{Message: "foo"},
    62  			}},
    63  		}
    64  		return nil
    65  	})
    66  
    67  	client := modelupgrader.NewClient(apiCaller)
    68  	_, err := client.ModelEnvironVersion(modelTag)
    69  	c.Assert(err, gc.ErrorMatches, "foo")
    70  }
    71  
    72  func (s *ModelUpgraderSuite) TestModelEnvironArityMismatch(c *gc.C) {
    73  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    74  		*(result.(*params.IntResults)) = params.IntResults{
    75  			Results: []params.IntResult{{}, {}},
    76  		}
    77  		return nil
    78  	})
    79  
    80  	client := modelupgrader.NewClient(apiCaller)
    81  	_, err := client.ModelEnvironVersion(modelTag)
    82  	c.Assert(err, gc.ErrorMatches, "expected 1 result, got 2")
    83  }
    84  
    85  func (s *ModelUpgraderSuite) TestModelTargetEnvironVersion(c *gc.C) {
    86  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    87  		c.Check(objType, gc.Equals, "ModelUpgrader")
    88  		c.Check(version, gc.Equals, 0)
    89  		c.Check(id, gc.Equals, "")
    90  		c.Check(request, gc.Equals, "ModelTargetEnvironVersion")
    91  		c.Check(arg, jc.DeepEquals, &params.Entities{
    92  			Entities: []params.Entity{{Tag: modelTag.String()}},
    93  		})
    94  		c.Assert(result, gc.FitsTypeOf, &params.IntResults{})
    95  		*(result.(*params.IntResults)) = params.IntResults{
    96  			Results: []params.IntResult{{
    97  				Result: 1,
    98  			}},
    99  		}
   100  		return nil
   101  	})
   102  
   103  	client := modelupgrader.NewClient(apiCaller)
   104  	version, err := client.ModelTargetEnvironVersion(modelTag)
   105  	c.Assert(err, jc.ErrorIsNil)
   106  	c.Assert(version, gc.Equals, 1)
   107  }
   108  
   109  func (s *ModelUpgraderSuite) TestModelTargetEnvironVersionError(c *gc.C) {
   110  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   111  		*(result.(*params.IntResults)) = params.IntResults{
   112  			Results: []params.IntResult{{
   113  				Error: &params.Error{Message: "foo"},
   114  			}},
   115  		}
   116  		return nil
   117  	})
   118  
   119  	client := modelupgrader.NewClient(apiCaller)
   120  	_, err := client.ModelTargetEnvironVersion(modelTag)
   121  	c.Assert(err, gc.ErrorMatches, "foo")
   122  }
   123  
   124  func (s *ModelUpgraderSuite) TestModelTargetEnvironArityMismatch(c *gc.C) {
   125  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   126  		*(result.(*params.IntResults)) = params.IntResults{
   127  			Results: []params.IntResult{{}, {}},
   128  		}
   129  		return nil
   130  	})
   131  
   132  	client := modelupgrader.NewClient(apiCaller)
   133  	_, err := client.ModelTargetEnvironVersion(modelTag)
   134  	c.Assert(err, gc.ErrorMatches, "expected 1 result, got 2")
   135  }
   136  
   137  func (s *ModelUpgraderSuite) TestSetModelEnvironVersion(c *gc.C) {
   138  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   139  		c.Check(objType, gc.Equals, "ModelUpgrader")
   140  		c.Check(version, gc.Equals, 0)
   141  		c.Check(id, gc.Equals, "")
   142  		c.Check(request, gc.Equals, "SetModelEnvironVersion")
   143  		c.Check(arg, jc.DeepEquals, &params.SetModelEnvironVersions{
   144  			Models: []params.SetModelEnvironVersion{{
   145  				ModelTag: modelTag.String(),
   146  				Version:  1,
   147  			}},
   148  		})
   149  		c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
   150  		*(result.(*params.ErrorResults)) = params.ErrorResults{
   151  			Results: []params.ErrorResult{{Error: &params.Error{Message: "foo"}}},
   152  		}
   153  		return nil
   154  	})
   155  
   156  	client := modelupgrader.NewClient(apiCaller)
   157  	err := client.SetModelEnvironVersion(modelTag, 1)
   158  	c.Assert(err, gc.ErrorMatches, "foo")
   159  }
   160  
   161  func (s *ModelUpgraderSuite) TestSetModelEnvironVersionArityMismatch(c *gc.C) {
   162  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   163  		*(result.(*params.ErrorResults)) = params.ErrorResults{
   164  			Results: []params.ErrorResult{{}, {}},
   165  		}
   166  		return nil
   167  	})
   168  
   169  	client := modelupgrader.NewClient(apiCaller)
   170  	err := client.SetModelEnvironVersion(modelTag, 1)
   171  	c.Assert(err, gc.ErrorMatches, "expected 1 result, got 2")
   172  }
   173  
   174  func (s *ModelUpgraderSuite) TestSetModelStatus(c *gc.C) {
   175  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   176  		c.Check(objType, gc.Equals, "ModelUpgrader")
   177  		c.Check(version, gc.Equals, 0)
   178  		c.Check(id, gc.Equals, "")
   179  		c.Check(request, gc.Equals, "SetModelStatus")
   180  		c.Check(arg, jc.DeepEquals, params.SetStatus{
   181  			Entities: []params.EntityStatusArgs{{
   182  				Tag:    modelTag.String(),
   183  				Status: "foo",
   184  				Info:   "bar",
   185  				Data: map[string]interface{}{
   186  					"baz": "qux",
   187  				},
   188  			}},
   189  		})
   190  		c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
   191  		*(result.(*params.ErrorResults)) = params.ErrorResults{
   192  			Results: []params.ErrorResult{{Error: &params.Error{Message: "foo"}}},
   193  		}
   194  		return nil
   195  	})
   196  
   197  	client := modelupgrader.NewClient(apiCaller)
   198  	err := client.SetModelStatus(modelTag, "foo", "bar", map[string]interface{}{
   199  		"baz": "qux",
   200  	})
   201  	c.Assert(err, gc.ErrorMatches, "foo")
   202  }
   203  
   204  func (s *ModelUpgraderSuite) TestSetModelStatusArityMismatch(c *gc.C) {
   205  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   206  		*(result.(*params.ErrorResults)) = params.ErrorResults{
   207  			Results: []params.ErrorResult{{}, {}},
   208  		}
   209  		return nil
   210  	})
   211  
   212  	client := modelupgrader.NewClient(apiCaller)
   213  	err := client.SetModelStatus(modelTag, "foo", "bar", nil)
   214  	c.Assert(err, gc.ErrorMatches, "expected 1 result, got 2")
   215  }