func (s *agentSuite) TestAgentLogin(c *gc.C) { u, err := url.Parse(s.discharger.URL) c.Assert(err, gc.IsNil) for i, test := range agentLoginTests { c.Logf("%d. %s", i, test.about) s.discharger.LoginHandler = test.loginHandler client := httpbakery.NewClient() client.Key, err = bakery.GenerateKey() c.Assert(err, gc.IsNil) err = agent.SetUpAuth(client, u, "test-user") c.Assert(err, gc.IsNil) m, err := s.bakery.NewMacaroon("", nil, []checkers.Caveat{{ Location: s.discharger.URL, Condition: "test condition", }}) c.Assert(err, gc.IsNil) ms, err := client.DischargeAll(m) if test.expectError != "" { c.Assert(err, gc.ErrorMatches, test.expectError) continue } c.Assert(err, gc.IsNil) err = s.bakery.Check(ms, bakery.FirstPartyCheckerFunc( func(caveat string) error { return nil }, )) c.Assert(err, gc.IsNil) } }
c.Assert(err, gc.IsNil) m, err := svc.NewMacaroon("", nil, []checkers.Caveat{{ Location: d.Location(), Condition: "something", }}) c.Assert(err, gc.IsNil) ms, err := s.client.DischargeAll(m) c.Assert(err, gc.IsNil) c.Assert(ms, gc.HasLen, 2) err = svc.Check(ms, failChecker) c.Assert(err, gc.IsNil) } var failChecker = bakery.FirstPartyCheckerFunc(func(s string) error { return fmt.Errorf("fail %s", s) }) func (s *suite) TestDischargerTwoLevels(c *gc.C) { d1checker := func(_ *http.Request, cond, arg string) ([]checkers.Caveat, error) { if cond != "xtrue" { return nil, fmt.Errorf("caveat refused") } return nil, nil } d1 := bakerytest.NewDischarger(nil, d1checker) defer d1.Close() d2checker := func(_ *http.Request, cond, arg string) ([]checkers.Caveat, error) { return []checkers.Caveat{{ Location: d1.Location(), Condition: "x" + cond,