github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/client/resources/base_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package resources_test
     5  
     6  import (
     7  	"io"
     8  	"time"
     9  
    10  	"github.com/juju/errors"
    11  	"github.com/juju/testing"
    12  	gc "gopkg.in/check.v1"
    13  	charmresource "gopkg.in/juju/charm.v6/resource"
    14  
    15  	"github.com/juju/juju/apiserver/facades/client/resources"
    16  	"github.com/juju/juju/apiserver/params"
    17  	"github.com/juju/juju/charmstore"
    18  	"github.com/juju/juju/resource"
    19  	"github.com/juju/juju/resource/resourcetesting"
    20  )
    21  
    22  type BaseSuite struct {
    23  	testing.IsolationSuite
    24  
    25  	stub     *testing.Stub
    26  	data     *stubDataStore
    27  	csClient *stubCSClient
    28  }
    29  
    30  func (s *BaseSuite) SetUpTest(c *gc.C) {
    31  	s.IsolationSuite.SetUpTest(c)
    32  
    33  	s.stub = &testing.Stub{}
    34  	s.data = &stubDataStore{stub: s.stub}
    35  	s.csClient = &stubCSClient{Stub: s.stub}
    36  }
    37  
    38  func (s *BaseSuite) newCSClient() (resources.CharmStore, error) {
    39  	s.stub.AddCall("newCSClient")
    40  	if err := s.stub.NextErr(); err != nil {
    41  		return nil, err
    42  	}
    43  	return s.csClient, nil
    44  }
    45  
    46  func newResource(c *gc.C, name, username, data string) (resource.Resource, params.Resource) {
    47  	opened := resourcetesting.NewResource(c, nil, name, "a-application", data)
    48  	res := opened.Resource
    49  	res.Username = username
    50  	if username == "" {
    51  		res.Timestamp = time.Time{}
    52  	}
    53  
    54  	apiRes := params.Resource{
    55  		CharmResource: params.CharmResource{
    56  			Name:        name,
    57  			Description: name + " description",
    58  			Type:        "file",
    59  			Path:        res.Path,
    60  			Origin:      "upload",
    61  			Revision:    0,
    62  			Fingerprint: res.Fingerprint.Bytes(),
    63  			Size:        res.Size,
    64  		},
    65  		ID:            res.ID,
    66  		ApplicationID: res.ApplicationID,
    67  		Username:      username,
    68  		Timestamp:     res.Timestamp,
    69  	}
    70  
    71  	return res, apiRes
    72  }
    73  
    74  type stubDataStore struct {
    75  	stub *testing.Stub
    76  
    77  	ReturnListResources         resource.ApplicationResources
    78  	ReturnAddPendingResource    string
    79  	ReturnGetResource           resource.Resource
    80  	ReturnGetPendingResource    resource.Resource
    81  	ReturnSetResource           resource.Resource
    82  	ReturnUpdatePendingResource resource.Resource
    83  }
    84  
    85  func (s *stubDataStore) OpenResource(application, name string) (resource.Resource, io.ReadCloser, error) {
    86  	s.stub.AddCall("OpenResource", application, name)
    87  	if err := s.stub.NextErr(); err != nil {
    88  		return resource.Resource{}, nil, errors.Trace(err)
    89  	}
    90  	return s.ReturnGetResource, nil, nil
    91  }
    92  
    93  func (s *stubDataStore) ListResources(application string) (resource.ApplicationResources, error) {
    94  	s.stub.AddCall("ListResources", application)
    95  	if err := s.stub.NextErr(); err != nil {
    96  		return resource.ApplicationResources{}, errors.Trace(err)
    97  	}
    98  
    99  	return s.ReturnListResources, nil
   100  }
   101  
   102  func (s *stubDataStore) AddPendingResource(application, userID string, chRes charmresource.Resource) (string, error) {
   103  	s.stub.AddCall("AddPendingResource", application, userID, chRes)
   104  	if err := s.stub.NextErr(); err != nil {
   105  		return "", errors.Trace(err)
   106  	}
   107  
   108  	return s.ReturnAddPendingResource, nil
   109  }
   110  
   111  func (s *stubDataStore) GetResource(application, name string) (resource.Resource, error) {
   112  	s.stub.AddCall("GetResource", application, name)
   113  	if err := s.stub.NextErr(); err != nil {
   114  		return resource.Resource{}, errors.Trace(err)
   115  	}
   116  
   117  	return s.ReturnGetResource, nil
   118  }
   119  
   120  func (s *stubDataStore) GetPendingResource(application, name, pendingID string) (resource.Resource, error) {
   121  	s.stub.AddCall("GetPendingResource", application, name, pendingID)
   122  	if err := s.stub.NextErr(); err != nil {
   123  		return resource.Resource{}, errors.Trace(err)
   124  	}
   125  
   126  	return s.ReturnGetPendingResource, nil
   127  }
   128  
   129  func (s *stubDataStore) SetResource(applicationID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) {
   130  	s.stub.AddCall("SetResource", applicationID, userID, res, r)
   131  	if err := s.stub.NextErr(); err != nil {
   132  		return resource.Resource{}, errors.Trace(err)
   133  	}
   134  
   135  	return s.ReturnSetResource, nil
   136  }
   137  
   138  func (s *stubDataStore) UpdatePendingResource(applicationID, pendingID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) {
   139  	s.stub.AddCall("UpdatePendingResource", applicationID, pendingID, userID, res, r)
   140  	if err := s.stub.NextErr(); err != nil {
   141  		return resource.Resource{}, errors.Trace(err)
   142  	}
   143  
   144  	return s.ReturnUpdatePendingResource, nil
   145  }
   146  
   147  type stubCSClient struct {
   148  	*testing.Stub
   149  
   150  	ReturnListResources [][]charmresource.Resource
   151  	ReturnResourceInfo  *charmresource.Resource
   152  }
   153  
   154  func (s *stubCSClient) ListResources(charms []charmstore.CharmID) ([][]charmresource.Resource, error) {
   155  	s.AddCall("ListResources", charms)
   156  	if err := s.NextErr(); err != nil {
   157  		return nil, errors.Trace(err)
   158  	}
   159  
   160  	return s.ReturnListResources, nil
   161  }
   162  
   163  func (s *stubCSClient) ResourceInfo(req charmstore.ResourceRequest) (charmresource.Resource, error) {
   164  	s.AddCall("ResourceInfo", req)
   165  	if err := s.NextErr(); err != nil {
   166  		return charmresource.Resource{}, errors.Trace(err)
   167  	}
   168  
   169  	if s.ReturnResourceInfo == nil {
   170  		return charmresource.Resource{}, errors.NotFoundf("resource %q", req.Name)
   171  	}
   172  	return *s.ReturnResourceInfo, nil
   173  }