github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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 gitjujutesting "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.v1" 16 "gopkg.in/juju/charmrepo.v1/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/apiserver/service" 23 "github.com/juju/juju/testcharms" 24 ) 25 26 type CharmStoreSuite struct { 27 gitjujutesting.CleanupSuite 28 29 Session *mgo.Session 30 // DischargeUser holds the identity of the user 31 // that the 3rd party caveat discharger will issue 32 // macaroons for. If it is empty, no caveats will be discharged. 33 DischargeUser string 34 35 discharger *bakerytest.Discharger 36 handler charmstore.HTTPCloseHandler 37 Srv *httptest.Server 38 Client *csclient.Client 39 } 40 41 func (s *CharmStoreSuite) SetUpTest(c *gc.C) { 42 s.CleanupSuite.SetUpTest(c) 43 44 s.discharger = bakerytest.NewDischarger(nil, func(_ *http.Request, cond string, arg string) ([]checkers.Caveat, error) { 45 if s.DischargeUser == "" { 46 return nil, fmt.Errorf("discharge denied") 47 } 48 return []checkers.Caveat{ 49 checkers.DeclaredCaveat("username", s.DischargeUser), 50 }, nil 51 }) 52 db := s.Session.DB("juju-testing") 53 params := charmstore.ServerParams{ 54 AuthUsername: "test-user", 55 AuthPassword: "test-password", 56 IdentityLocation: s.discharger.Location(), 57 PublicKeyLocator: s.discharger, 58 } 59 handler, err := charmstore.NewServer(db, nil, "", params, charmstore.V4) 60 c.Assert(err, jc.ErrorIsNil) 61 s.handler = handler 62 s.Srv = httptest.NewServer(handler) 63 s.Client = csclient.New(csclient.Params{ 64 URL: s.Srv.URL, 65 User: params.AuthUsername, 66 Password: params.AuthPassword, 67 }) 68 69 s.PatchValue(&charmrepo.CacheDir, c.MkDir()) 70 s.PatchValue(&service.NewCharmStore, func(p charmrepo.NewCharmStoreParams) charmrepo.Interface { 71 p.URL = s.Srv.URL 72 return charmrepo.NewCharmStore(p) 73 }) 74 } 75 76 func (s *CharmStoreSuite) TearDownTest(c *gc.C) { 77 s.discharger.Close() 78 s.handler.Close() 79 s.Srv.Close() 80 s.CleanupSuite.TearDownTest(c) 81 } 82 83 func (s *CharmStoreSuite) UploadCharm(c *gc.C, url, name string) (*charm.URL, charm.Charm) { 84 return testcharms.UploadCharm(c, s.Client, url, name) 85 }