1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
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"
22
"github.com/juju/juju/testcharms"
25
type CharmStoreSuite struct {
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.
34
discharger *bakerytest.Discharger
35
handler charmstore.HTTPCloseHandler
37
Client *csclient.Client
40
func (s *CharmStoreSuite) SetUpTest(c *gc.C) {
41
s.CleanupSuite.SetUpTest(c)
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")
47
return []checkers.Caveat{
48
checkers.DeclaredCaveat("username", s.DischargeUser),
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,
58
handler, err := charmstore.NewServer(db, nil, "", params, charmstore.V5)
59
c.Assert(err, jc.ErrorIsNil)
61
s.Srv = httptest.NewServer(handler)
62
s.Client = csclient.New(csclient.Params{
64
User: params.AuthUsername,
65
Password: params.AuthPassword,
68
s.PatchValue(&charmrepo.CacheDir, c.MkDir())
69
s.PatchValue(&csclient.ServerURL, s.Srv.URL)
72
func (s *CharmStoreSuite) TearDownTest(c *gc.C) {
76
s.CleanupSuite.TearDownTest(c)
79
func (s *CharmStoreSuite) UploadCharm(c *gc.C, url, name string) (*charm.URL, charm.Charm) {
80
return testcharms.UploadCharm(c, s.Client, url, name)
83
func (s *CharmStoreSuite) UploadCharmMultiSeries(c *gc.C, url, name string) (*charm.URL, charm.Charm) {
84
return testcharms.UploadCharmMultiSeries(c, s.Client, url, name)