github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/resource/api/server/base_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package server_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-unstable/resource"
    14  
    15  	"github.com/juju/juju/charmstore"
    16  	"github.com/juju/juju/resource"
    17  	"github.com/juju/juju/resource/api"
    18  	"github.com/juju/juju/resource/api/server"
    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() (server.CharmStore, error) {
    39  	s.stub.AddCall("newCSClient")
    40  	if err := s.stub.NextErr(); err != nil {
    41  		return nil, err
    42  	}
    43  
    44  	return s.csClient, nil
    45  }
    46  
    47  func newResource(c *gc.C, name, username, data string) (resource.Resource, api.Resource) {
    48  	opened := resourcetesting.NewResource(c, nil, name, "a-application", data)
    49  	res := opened.Resource
    50  	res.Username = username
    51  	if username == "" {
    52  		res.Timestamp = time.Time{}
    53  	}
    54  
    55  	apiRes := api.Resource{
    56  		CharmResource: api.CharmResource{
    57  			Name:        name,
    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.ServiceResources
    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) ListResources(service string) (resource.ServiceResources, error) {
    86  	s.stub.AddCall("ListResources", service)
    87  	if err := s.stub.NextErr(); err != nil {
    88  		return resource.ServiceResources{}, errors.Trace(err)
    89  	}
    90  
    91  	return s.ReturnListResources, nil
    92  }
    93  
    94  func (s *stubDataStore) AddPendingResource(service, userID string, chRes charmresource.Resource, r io.Reader) (string, error) {
    95  	s.stub.AddCall("AddPendingResource", service, userID, chRes, r)
    96  	if err := s.stub.NextErr(); err != nil {
    97  		return "", errors.Trace(err)
    98  	}
    99  
   100  	return s.ReturnAddPendingResource, nil
   101  }
   102  
   103  func (s *stubDataStore) GetResource(service, name string) (resource.Resource, error) {
   104  	s.stub.AddCall("GetResource", service, name)
   105  	if err := s.stub.NextErr(); err != nil {
   106  		return resource.Resource{}, errors.Trace(err)
   107  	}
   108  
   109  	return s.ReturnGetResource, nil
   110  }
   111  
   112  func (s *stubDataStore) GetPendingResource(service, name, pendingID string) (resource.Resource, error) {
   113  	s.stub.AddCall("GetPendingResource", service, name, pendingID)
   114  	if err := s.stub.NextErr(); err != nil {
   115  		return resource.Resource{}, errors.Trace(err)
   116  	}
   117  
   118  	return s.ReturnGetPendingResource, nil
   119  }
   120  
   121  func (s *stubDataStore) SetResource(applicationID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) {
   122  	s.stub.AddCall("SetResource", applicationID, userID, res, r)
   123  	if err := s.stub.NextErr(); err != nil {
   124  		return resource.Resource{}, errors.Trace(err)
   125  	}
   126  
   127  	return s.ReturnSetResource, nil
   128  }
   129  
   130  func (s *stubDataStore) UpdatePendingResource(applicationID, pendingID, userID string, res charmresource.Resource, r io.Reader) (resource.Resource, error) {
   131  	s.stub.AddCall("UpdatePendingResource", applicationID, pendingID, userID, res, r)
   132  	if err := s.stub.NextErr(); err != nil {
   133  		return resource.Resource{}, errors.Trace(err)
   134  	}
   135  
   136  	return s.ReturnUpdatePendingResource, nil
   137  }
   138  
   139  type stubCSClient struct {
   140  	*testing.Stub
   141  
   142  	ReturnListResources [][]charmresource.Resource
   143  	ReturnResourceInfo  *charmresource.Resource
   144  }
   145  
   146  func (s *stubCSClient) ListResources(charms []charmstore.CharmID) ([][]charmresource.Resource, error) {
   147  	s.AddCall("ListResources", charms)
   148  	if err := s.NextErr(); err != nil {
   149  		return nil, errors.Trace(err)
   150  	}
   151  
   152  	return s.ReturnListResources, nil
   153  }
   154  
   155  func (s *stubCSClient) ResourceInfo(req charmstore.ResourceRequest) (charmresource.Resource, error) {
   156  	s.AddCall("ResourceInfo", req)
   157  	if err := s.NextErr(); err != nil {
   158  		return charmresource.Resource{}, errors.Trace(err)
   159  	}
   160  
   161  	if s.ReturnResourceInfo == nil {
   162  		return charmresource.Resource{}, errors.NotFoundf("resource %q", req.Name)
   163  	}
   164  	return *s.ReturnResourceInfo, nil
   165  }