github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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" 15 "gopkg.in/juju/charmrepo.v3" 16 "gopkg.in/juju/charmrepo.v3/csclient" 17 "gopkg.in/juju/charmstore.v5" 18 "gopkg.in/macaroon-bakery.v2-unstable/bakery/checkers" 19 "gopkg.in/macaroon-bakery.v2-unstable/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 }