~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/apiserver/testing/fakecharmstore.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}