func (s *charmStoreSuite) SetUpTest(c *gc.C) { s.JujuConnSuite.SetUpTest(c) // Set up the third party discharger. s.discharger = bakerytest.NewDischarger(nil, func(req *http.Request, cond string, arg string) ([]checkers.Caveat, error) { cookie, err := req.Cookie(clientUserCookie) if err != nil { return nil, errors.New("discharge denied to non-clients") } return []checkers.Caveat{ checkers.DeclaredCaveat("username", cookie.Value), }, nil }) // Set up the charm store testing server. s.srv = charmstoretesting.OpenServer(c, s.Session, charmstore.ServerParams{ IdentityLocation: s.discharger.Location(), PublicKeyLocator: s.discharger, }) // Initialize the charm cache dir. s.PatchValue(&charmrepo.CacheDir, c.MkDir()) // Point the CLI to the charm store testing server. original := newCharmStoreClient s.PatchValue(&newCharmStoreClient, func() (*csClient, error) { csclient, err := original() if err != nil { return nil, err } csclient.params.URL = s.srv.URL() // Add a cookie so that the discharger can detect whether the // HTTP client is the juju environment or the juju client. lurl, err := url.Parse(s.discharger.Location()) if err != nil { panic(err) } csclient.params.HTTPClient.Jar.SetCookies(lurl, []*http.Cookie{{ Name: clientUserCookie, Value: clientUserName, }}) return csclient, nil }) // Point the Juju API server to the charm store testing server. s.PatchValue(&csclient.ServerURL, s.srv.URL()) }
func (s *CharmStoreSuite) SetUpTest(c *gc.C) { s.CleanupSuite.SetUpTest(c) s.discharger = bakerytest.NewDischarger(nil, func(_ *http.Request, cond string, arg string) ([]checkers.Caveat, error) { if s.DischargeUser == "" { return nil, fmt.Errorf("discharge denied") } return []checkers.Caveat{ checkers.DeclaredCaveat("username", s.DischargeUser), }, nil }) s.Srv = charmstoretesting.OpenServer(c, s.Session, charmstore.ServerParams{ IdentityLocation: s.discharger.Location(), PublicKeyLocator: s.discharger, }) s.PatchValue(&charmrepo.CacheDir, c.MkDir()) s.PatchValue(&service.NewCharmStore, func(p charmrepo.NewCharmStoreParams) charmrepo.Interface { p.URL = s.Srv.URL() return charmrepo.NewCharmStore(p) }) }