github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/apiserver/testing/fakecharmstore.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package testing
     5  
     6  import (
     7  	"fmt"
     8  	"net/http"
     9  	"net/http/httptest"
    10  
    11  	"github.com/juju/testing"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  	"gopkg.in/juju/charm.v6-unstable"
    15  	"gopkg.in/juju/charmrepo.v2-unstable"
    16  	"gopkg.in/juju/charmrepo.v2-unstable/csclient"
    17  	"gopkg.in/juju/charmstore.v5-unstable"
    18  	"gopkg.in/macaroon-bakery.v1/bakery/checkers"
    19  	"gopkg.in/macaroon-bakery.v1/bakerytest"
    20  	"gopkg.in/mgo.v2"
    21  
    22  	"github.com/juju/juju/testcharms"
    23  )
    24  
    25  type CharmStoreSuite struct {
    26  	testing.CleanupSuite
    27  
    28  	Session *mgo.Session
    29  	// DischargeUser holds the identity of the user
    30  	// that the 3rd party caveat discharger will issue
    31  	// macaroons for. If it is empty, no caveats will be discharged.
    32  	DischargeUser string
    33  
    34  	discharger *bakerytest.Discharger
    35  	handler    charmstore.HTTPCloseHandler
    36  	Srv        *httptest.Server
    37  	Client     *csclient.Client
    38  }
    39  
    40  func (s *CharmStoreSuite) SetUpTest(c *gc.C) {
    41  	s.CleanupSuite.SetUpTest(c)
    42  
    43  	s.discharger = bakerytest.NewDischarger(nil, func(_ *http.Request, cond string, arg string) ([]checkers.Caveat, error) {
    44  		if s.DischargeUser == "" {
    45  			return nil, fmt.Errorf("discharge denied")
    46  		}
    47  		return []checkers.Caveat{
    48  			checkers.DeclaredCaveat("username", s.DischargeUser),
    49  		}, nil
    50  	})
    51  	db := s.Session.DB("juju-testing")
    52  	params := charmstore.ServerParams{
    53  		AuthUsername:     "test-user",
    54  		AuthPassword:     "test-password",
    55  		IdentityLocation: s.discharger.Location(),
    56  		PublicKeyLocator: s.discharger,
    57  	}
    58  	handler, err := charmstore.NewServer(db, nil, "", params, charmstore.V5)
    59  	c.Assert(err, jc.ErrorIsNil)
    60  	s.handler = handler
    61  	s.Srv = httptest.NewServer(handler)
    62  	s.Client = csclient.New(csclient.Params{
    63  		URL:      s.Srv.URL,
    64  		User:     params.AuthUsername,
    65  		Password: params.AuthPassword,
    66  	})
    67  
    68  	s.PatchValue(&charmrepo.CacheDir, c.MkDir())
    69  	s.PatchValue(&csclient.ServerURL, s.Srv.URL)
    70  }
    71  
    72  func (s *CharmStoreSuite) TearDownTest(c *gc.C) {
    73  	s.discharger.Close()
    74  	s.handler.Close()
    75  	s.Srv.Close()
    76  	s.CleanupSuite.TearDownTest(c)
    77  }
    78  
    79  func (s *CharmStoreSuite) UploadCharm(c *gc.C, url, name string) (*charm.URL, charm.Charm) {
    80  	return testcharms.UploadCharm(c, s.Client, url, name)
    81  }
    82  
    83  func (s *CharmStoreSuite) UploadCharmMultiSeries(c *gc.C, url, name string) (*charm.URL, charm.Charm) {
    84  	return testcharms.UploadCharmMultiSeries(c, s.Client, url, name)
    85  }