github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/imagemetadata/client_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package imagemetadata_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/api/base/testing"
    12  	"github.com/juju/juju/api/imagemetadata"
    13  	"github.com/juju/juju/apiserver/params"
    14  	coretesting "github.com/juju/juju/testing"
    15  )
    16  
    17  type imagemetadataSuite struct {
    18  	coretesting.BaseSuite
    19  }
    20  
    21  var _ = gc.Suite(&imagemetadataSuite{})
    22  
    23  func (s *imagemetadataSuite) TestList(c *gc.C) {
    24  	// setup data for test
    25  	imageId := "imageid"
    26  	stream := "stream"
    27  	region := "region"
    28  	series := "series"
    29  	arch := "arch"
    30  	virtType := "virt-type"
    31  	rootStorageType := "root-storage-type"
    32  	rootStorageSize := uint64(1024)
    33  	source := "source"
    34  
    35  	called := false
    36  	apiCaller := testing.APICallerFunc(
    37  		func(objType string,
    38  			version int,
    39  			id, request string,
    40  			a, result interface{},
    41  		) error {
    42  			called = true
    43  			c.Check(objType, gc.Equals, "ImageMetadata")
    44  			c.Check(id, gc.Equals, "")
    45  			c.Check(request, gc.Equals, "List")
    46  
    47  			args, ok := a.(params.ImageMetadataFilter)
    48  			c.Assert(ok, jc.IsTrue)
    49  
    50  			if results, k := result.(*params.ListCloudImageMetadataResult); k {
    51  				instances := []params.CloudImageMetadata{
    52  					params.CloudImageMetadata{
    53  						ImageId:         imageId,
    54  						Stream:          args.Stream,
    55  						Region:          args.Region,
    56  						Series:          args.Series[0],
    57  						Arch:            args.Arches[0],
    58  						VirtType:        args.VirtType,
    59  						RootStorageType: args.RootStorageType,
    60  						RootStorageSize: &rootStorageSize,
    61  						Source:          source,
    62  					},
    63  				}
    64  				results.Result = instances
    65  			}
    66  
    67  			return nil
    68  		})
    69  	client := imagemetadata.NewClient(apiCaller)
    70  	found, err := client.List(
    71  		stream, region,
    72  		[]string{series}, []string{arch},
    73  		virtType, rootStorageType,
    74  	)
    75  	c.Check(err, jc.ErrorIsNil)
    76  
    77  	c.Assert(called, jc.IsTrue)
    78  	expected := []params.CloudImageMetadata{
    79  		params.CloudImageMetadata{
    80  			ImageId:         imageId,
    81  			Stream:          stream,
    82  			Region:          region,
    83  			Series:          series,
    84  			Arch:            arch,
    85  			VirtType:        virtType,
    86  			RootStorageType: rootStorageType,
    87  			RootStorageSize: &rootStorageSize,
    88  			Source:          source,
    89  		},
    90  	}
    91  	c.Assert(found, jc.DeepEquals, expected)
    92  }
    93  
    94  func (s *imagemetadataSuite) TestListFacadeCallError(c *gc.C) {
    95  	msg := "facade failure"
    96  	called := false
    97  	apiCaller := testing.APICallerFunc(
    98  		func(objType string,
    99  			version int,
   100  			id, request string,
   101  			a, result interface{},
   102  		) error {
   103  			called = true
   104  			c.Check(objType, gc.Equals, "ImageMetadata")
   105  			c.Check(id, gc.Equals, "")
   106  			c.Check(request, gc.Equals, "List")
   107  
   108  			return errors.New(msg)
   109  		})
   110  	client := imagemetadata.NewClient(apiCaller)
   111  	found, err := client.List("", "", nil, nil, "", "")
   112  	c.Assert(errors.Cause(err), gc.ErrorMatches, msg)
   113  	c.Assert(found, gc.HasLen, 0)
   114  	c.Assert(called, jc.IsTrue)
   115  }
   116  
   117  func (s *imagemetadataSuite) TestSave(c *gc.C) {
   118  	m := params.CloudImageMetadata{}
   119  	called := false
   120  
   121  	msg := "save failure"
   122  	expected := []params.ErrorResult{
   123  		params.ErrorResult{},
   124  		params.ErrorResult{&params.Error{Message: msg}},
   125  	}
   126  
   127  	apiCaller := testing.APICallerFunc(
   128  		func(objType string,
   129  			version int,
   130  			id, request string,
   131  			a, result interface{},
   132  		) error {
   133  			called = true
   134  			c.Check(objType, gc.Equals, "ImageMetadata")
   135  			c.Check(id, gc.Equals, "")
   136  			c.Check(request, gc.Equals, "Save")
   137  
   138  			args, ok := a.(params.MetadataSaveParams)
   139  			c.Assert(ok, jc.IsTrue)
   140  			c.Assert(args.Metadata, gc.HasLen, 2)
   141  			c.Assert(args.Metadata, gc.DeepEquals, []params.CloudImageMetadata{m, m})
   142  
   143  			if results, k := result.(*params.ErrorResults); k {
   144  				results.Results = expected
   145  			}
   146  
   147  			return nil
   148  		})
   149  
   150  	client := imagemetadata.NewClient(apiCaller)
   151  	errs, err := client.Save([]params.CloudImageMetadata{m, m})
   152  	c.Check(err, jc.ErrorIsNil)
   153  	c.Assert(called, jc.IsTrue)
   154  	c.Assert(errs, jc.DeepEquals, expected)
   155  }
   156  
   157  func (s *imagemetadataSuite) TestSaveFacadeCallError(c *gc.C) {
   158  	m := []params.CloudImageMetadata{{}}
   159  	called := false
   160  	msg := "facade failure"
   161  	apiCaller := testing.APICallerFunc(
   162  		func(objType string,
   163  			version int,
   164  			id, request string,
   165  			a, result interface{},
   166  		) error {
   167  			called = true
   168  			c.Check(objType, gc.Equals, "ImageMetadata")
   169  			c.Check(id, gc.Equals, "")
   170  			c.Check(request, gc.Equals, "Save")
   171  			return errors.New(msg)
   172  		})
   173  	client := imagemetadata.NewClient(apiCaller)
   174  	found, err := client.Save(m)
   175  	c.Assert(errors.Cause(err), gc.ErrorMatches, msg)
   176  	c.Assert(found, gc.HasLen, 0)
   177  	c.Assert(called, jc.IsTrue)
   178  }
   179  
   180  func (s *imagemetadataSuite) TestUpdateFromPublishedImages(c *gc.C) {
   181  	called := false
   182  
   183  	apiCaller := testing.APICallerFunc(
   184  		func(objType string,
   185  			version int,
   186  			id, request string,
   187  			a, result interface{},
   188  		) error {
   189  			called = true
   190  			c.Check(objType, gc.Equals, "ImageMetadata")
   191  			c.Check(id, gc.Equals, "")
   192  			c.Check(request, gc.Equals, "UpdateFromPublishedImages")
   193  			return nil
   194  		})
   195  
   196  	client := imagemetadata.NewClient(apiCaller)
   197  	err := client.UpdateFromPublishedImages()
   198  	c.Check(err, jc.ErrorIsNil)
   199  	c.Assert(called, jc.IsTrue)
   200  }
   201  
   202  func (s *imagemetadataSuite) TestUpdateFromPublishedImagesFacadeCallError(c *gc.C) {
   203  	called := false
   204  	msg := "facade failure"
   205  	apiCaller := testing.APICallerFunc(
   206  		func(objType string,
   207  			version int,
   208  			id, request string,
   209  			a, result interface{},
   210  		) error {
   211  			called = true
   212  			c.Check(objType, gc.Equals, "ImageMetadata")
   213  			c.Check(id, gc.Equals, "")
   214  			c.Check(request, gc.Equals, "UpdateFromPublishedImages")
   215  			return errors.New(msg)
   216  		})
   217  	client := imagemetadata.NewClient(apiCaller)
   218  	err := client.UpdateFromPublishedImages()
   219  	c.Assert(errors.Cause(err), gc.ErrorMatches, msg)
   220  	c.Assert(called, jc.IsTrue)
   221  }