github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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 10 gitjujutesting "github.com/juju/testing" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/juju/charm.v5" 13 "gopkg.in/juju/charm.v5/charmrepo" 14 "gopkg.in/juju/charmstore.v4" 15 "gopkg.in/juju/charmstore.v4/charmstoretesting" 16 "gopkg.in/macaroon-bakery.v0/bakery/checkers" 17 "gopkg.in/macaroon-bakery.v0/bakerytest" 18 "gopkg.in/mgo.v2" 19 20 "github.com/juju/juju/apiserver/service" 21 "github.com/juju/juju/testcharms" 22 ) 23 24 type CharmStoreSuite struct { 25 gitjujutesting.CleanupSuite 26 27 Session *mgo.Session 28 // DischargeUser holds the identity of the user 29 // that the 3rd party caveat discharger will issue 30 // macaroons for. If it is empty, no caveats will be discharged. 31 DischargeUser string 32 33 discharger *bakerytest.Discharger 34 Srv *charmstoretesting.Server 35 } 36 37 func (s *CharmStoreSuite) SetUpTest(c *gc.C) { 38 s.CleanupSuite.SetUpTest(c) 39 40 s.discharger = bakerytest.NewDischarger(nil, func(_ *http.Request, cond string, arg string) ([]checkers.Caveat, error) { 41 if s.DischargeUser == "" { 42 return nil, fmt.Errorf("discharge denied") 43 } 44 return []checkers.Caveat{ 45 checkers.DeclaredCaveat("username", s.DischargeUser), 46 }, nil 47 }) 48 s.Srv = charmstoretesting.OpenServer(c, s.Session, charmstore.ServerParams{ 49 IdentityLocation: s.discharger.Location(), 50 PublicKeyLocator: s.discharger, 51 }) 52 s.PatchValue(&charmrepo.CacheDir, c.MkDir()) 53 s.PatchValue(&service.NewCharmStore, func(p charmrepo.NewCharmStoreParams) charmrepo.Interface { 54 p.URL = s.Srv.URL() 55 return charmrepo.NewCharmStore(p) 56 }) 57 } 58 59 func (s *CharmStoreSuite) TearDownTest(c *gc.C) { 60 s.discharger.Close() 61 s.Srv.Close() 62 s.CleanupSuite.TearDownTest(c) 63 } 64 65 func (s *CharmStoreSuite) UploadCharm(c *gc.C, url, name string) (*charm.URL, charm.Charm) { 66 id := charm.MustParseReference(url) 67 promulgated := false 68 if id.User == "" { 69 id.User = "who" 70 promulgated = true 71 } 72 ch := testcharms.Repo.CharmArchive(c.MkDir(), name) 73 id = s.Srv.UploadCharm(c, ch, id, promulgated) 74 curl := (*charm.URL)(id) 75 return curl, ch 76 }