github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/api/imagemanager/client_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package imagemanager_test
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/errors"
    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/imagemanager"
    15  	"github.com/juju/juju/apiserver/params"
    16  	coretesting "github.com/juju/juju/testing"
    17  )
    18  
    19  type imagemanagerSuite struct {
    20  	coretesting.BaseSuite
    21  
    22  	imagemanager *imagemanager.Client
    23  }
    24  
    25  var _ = gc.Suite(&imagemanagerSuite{})
    26  
    27  var dummyTime = time.Now()
    28  
    29  func (s *imagemanagerSuite) TestListImages(c *gc.C) {
    30  	var callCount int
    31  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    32  		c.Check(objType, gc.Equals, "ImageManager")
    33  		c.Check(version, gc.Equals, 0)
    34  		c.Check(id, gc.Equals, "")
    35  		c.Check(request, gc.Equals, "ListImages")
    36  		c.Check(arg, gc.DeepEquals, params.ImageFilterParams{
    37  			Images: []params.ImageSpec{{
    38  				Kind:   "lxc",
    39  				Series: "trusty",
    40  				Arch:   "amd64",
    41  			}},
    42  		})
    43  		c.Assert(result, gc.FitsTypeOf, &params.ListImageResult{})
    44  		*(result.(*params.ListImageResult)) = params.ListImageResult{
    45  			Result: []params.ImageMetadata{{
    46  				Kind:    "lxc",
    47  				Series:  "trusty",
    48  				Arch:    "amd64",
    49  				Created: dummyTime,
    50  				URL:     "http://path",
    51  			}},
    52  		}
    53  		callCount++
    54  		return nil
    55  	})
    56  
    57  	im := imagemanager.NewClient(apiCaller)
    58  	imageMetadata, err := im.ListImages("lxc", "trusty", "amd64")
    59  	c.Check(err, jc.ErrorIsNil)
    60  	c.Check(callCount, gc.Equals, 1)
    61  	c.Check(imageMetadata, gc.HasLen, 1)
    62  	metadata := imageMetadata[0]
    63  	c.Assert(metadata, gc.Equals, params.ImageMetadata{
    64  		Kind:    "lxc",
    65  		Series:  "trusty",
    66  		Arch:    "amd64",
    67  		Created: dummyTime,
    68  		URL:     "http://path",
    69  	})
    70  }
    71  
    72  func (s *imagemanagerSuite) TestDeleteImage(c *gc.C) {
    73  	var callCount int
    74  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    75  		c.Check(objType, gc.Equals, "ImageManager")
    76  		c.Check(version, gc.Equals, 0)
    77  		c.Check(id, gc.Equals, "")
    78  		c.Check(request, gc.Equals, "DeleteImages")
    79  		c.Check(arg, gc.DeepEquals, params.ImageFilterParams{
    80  			Images: []params.ImageSpec{{
    81  				Kind:   "lxc",
    82  				Series: "trusty",
    83  				Arch:   "amd64",
    84  			}},
    85  		})
    86  		c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
    87  		*(result.(*params.ErrorResults)) = params.ErrorResults{
    88  			Results: []params.ErrorResult{{
    89  				Error: nil,
    90  			}},
    91  		}
    92  		callCount++
    93  		return nil
    94  	})
    95  
    96  	im := imagemanager.NewClient(apiCaller)
    97  	err := im.DeleteImage("lxc", "trusty", "amd64")
    98  	c.Check(err, jc.ErrorIsNil)
    99  	c.Check(callCount, gc.Equals, 1)
   100  }
   101  
   102  func (s *imagemanagerSuite) TestDeleteImageCallError(c *gc.C) {
   103  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   104  		return errors.New("an error")
   105  	})
   106  
   107  	im := imagemanager.NewClient(apiCaller)
   108  	err := im.DeleteImage("lxc", "trusty", "amd64")
   109  	c.Check(err, gc.ErrorMatches, "an error")
   110  }
   111  
   112  func (s *imagemanagerSuite) TestDeleteImageError(c *gc.C) {
   113  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   114  		*(result.(*params.ErrorResults)) = params.ErrorResults{
   115  			Results: []params.ErrorResult{{
   116  				Error: &params.Error{Message: "the devil made me do it", Code: "666"},
   117  			}},
   118  		}
   119  		return nil
   120  	})
   121  
   122  	im := imagemanager.NewClient(apiCaller)
   123  	err := im.DeleteImage("lxc", "trusty", "amd64")
   124  	c.Check(err, gc.ErrorMatches, "the devil made me do it")
   125  }