func (s *suite) TestInteractiveDischargerURL(c *gc.C) { var d *bakerytest.InteractiveDischarger d = bakerytest.NewInteractiveDischarger(nil, http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, d.URL("/redirect", r), http.StatusFound) }, )) defer d.Close() d.Mux.Handle("/redirect", http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { d.FinishInteraction(w, r, nil, nil) }, )) svc, err := bakery.NewService(bakery.NewServiceParams{ Location: "here", Locator: d, }) c.Assert(err, gc.IsNil) m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: d.Location(), Condition: "something", }}) c.Assert(err, gc.IsNil) client := httpbakery.NewClient() client.VisitWebPage = func(u *url.URL) error { var c httprequest.Client return c.Get(u.String(), nil) } ms, err := client.DischargeAll(m) c.Assert(err, gc.IsNil) c.Assert(ms, gc.HasLen, 2) err = svc.Check(ms, failChecker) c.Assert(err, gc.IsNil) }
func (s *suite) TestLoginDischargerError(c *gc.C) { var d *bakerytest.InteractiveDischarger d = bakerytest.NewInteractiveDischarger(nil, http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { d.FinishInteraction(w, r, nil, errors.New("test error")) }, )) defer d.Close() svc, err := bakery.NewService(bakery.NewServiceParams{ Location: "here", Locator: d, }) c.Assert(err, gc.IsNil) m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: d.Location(), Condition: "something", }}) c.Assert(err, gc.IsNil) client := httpbakery.NewClient() client.VisitWebPage = func(u *url.URL) error { c.Logf("visiting %s", u) var c httprequest.Client return c.Get(u.String(), nil) } _, err = client.DischargeAll(m) c.Assert(err, gc.ErrorMatches, `cannot get discharge from ".*": failed to acquire macaroon after waiting: third party refused discharge: test error`) }
func (s *formSuite) TestFormTitle(c *gc.C) { d := &formDischarger{} d.discharger = bakerytest.NewInteractiveDischarger(nil, http.HandlerFunc(d.login)) defer d.discharger.Close() d.discharger.Mux.Handle("/form", http.HandlerFunc(d.form)) svc, err := bakery.NewService(bakery.NewServiceParams{ Locator: testLocator{ loc: d.discharger.Location(), locator: d.discharger, }, }) c.Assert(err, gc.IsNil) for i, test := range formTitleTests { c.Logf("%d. %s", i, test.host) m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: "https://" + test.host, Condition: "test condition", }}) c.Assert(err, gc.Equals, nil) client := httpbakery.NewClient() client.Client.Transport = httptesting.URLRewritingTransport{ MatchPrefix: "https://" + test.host, Replace: d.discharger.Location(), RoundTripper: http.DefaultTransport, } f := new(titleTestFiller) form.SetUpAuth(client, f) ms, err := client.DischargeAll(m) c.Assert(err, gc.IsNil) c.Assert(len(ms), gc.Equals, 2) c.Assert(f.title, gc.Equals, test.expect) } }
func (s *formSuite) TestFormLogin(c *gc.C) { d := &formDischarger{} d.discharger = bakerytest.NewInteractiveDischarger(nil, http.HandlerFunc(d.login)) defer d.discharger.Close() d.discharger.Mux.Handle("/form", http.HandlerFunc(d.form)) svc, err := bakery.NewService(bakery.NewServiceParams{ Locator: d.discharger, }) c.Assert(err, gc.IsNil) for i, test := range formLoginTests { c.Logf("%d. %s", i, test.about) d.dischargeOptions = test.opts m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: d.discharger.Location(), Condition: "test condition", }}) c.Assert(err, gc.Equals, nil) client := httpbakery.NewClient() h := defaultFiller if test.filler != nil { h = test.filler } client.VisitWebPage = test.fallback form.SetUpAuth(client, h) ms, err := client.DischargeAll(m) if test.expectError != "" { c.Assert(err, gc.ErrorMatches, test.expectError) continue } c.Assert(err, gc.IsNil) c.Assert(len(ms), gc.Equals, 2) } }
func (s *formSuite) TestFormLogin(c *gc.C) { d := &formDischarger{} d.discharger = bakerytest.NewInteractiveDischarger(nil, http.HandlerFunc(d.visit)) defer d.discharger.Close() d.discharger.Mux.Handle("/form", http.HandlerFunc(d.form)) svc, err := bakery.NewService(bakery.NewServiceParams{ Locator: d.discharger, }) c.Assert(err, gc.IsNil) for i, test := range formLoginTests { c.Logf("test %d: %s", i, test.about) d.dischargeOptions = test.opts m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: d.discharger.Location(), Condition: "test condition", }}) c.Assert(err, gc.Equals, nil) client := httpbakery.NewClient() filler := defaultFiller if test.filler != nil { filler = test.filler } handlers := []httpbakery.Visitor{ form.Visitor{ Filler: filler, }, } if test.fallback != nil { handlers = append(handlers, test.fallback) } client.WebPageVisitor = httpbakery.NewMultiVisitor(handlers...) ms, err := client.DischargeAll(m) if test.expectError != "" { c.Assert(err, gc.ErrorMatches, test.expectError) continue } c.Assert(err, gc.IsNil) c.Assert(len(ms), gc.Equals, 2) } }
func (s *suite) TestInteractiveDischarger(c *gc.C) { var d *bakerytest.InteractiveDischarger d = bakerytest.NewInteractiveDischarger(nil, http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { d.FinishInteraction(w, r, []checkers.Caveat{ checkers.Caveat{ Condition: "test pass", }, }, nil) }, )) defer d.Close() svc, err := bakery.NewService(bakery.NewServiceParams{ Location: "here", Locator: d, }) c.Assert(err, gc.IsNil) m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: d.Location(), Condition: "something", }}) c.Assert(err, gc.IsNil) client := httpbakery.NewClient() client.VisitWebPage = func(u *url.URL) error { var c httprequest.Client return c.Get(u.String(), nil) } ms, err := client.DischargeAll(m) c.Assert(err, gc.IsNil) c.Assert(ms, gc.HasLen, 2) var r recordingChecker err = svc.Check(ms, &r) c.Assert(err, gc.IsNil) c.Assert(r.caveats, gc.HasLen, 1) c.Assert(r.caveats[0], gc.Equals, "test pass") }