func (s *filterSuite) TestBuildPredicatesForOkay(c *gc.C) { pl := payload.FullPayloadInfo{ Payload: payload.Payload{ PayloadClass: charm.PayloadClass{ Name: "spam", Type: "docker", }, ID: "idspam", Status: "running", Labels: []string{"tagA", "tagB"}, Unit: "a-application/0", }, Machine: "1", } // Check matching patterns. patterns := []string{ "spam", "docker", "idspam", "running", "tagA", "tagB", "a-application/0", "1", } for _, pattern := range patterns { predicates, err := payload.BuildPredicatesFor([]string{ pattern, }) c.Assert(err, jc.ErrorIsNil) c.Check(predicates, gc.HasLen, 1) matched := predicates[0](pl) c.Check(matched, jc.IsTrue) } // Check a non-matching pattern. predicates, err := payload.BuildPredicatesFor([]string{ "tagC", }) c.Assert(err, jc.ErrorIsNil) c.Check(predicates, gc.HasLen, 1) matched := predicates[0](pl) c.Check(matched, jc.IsFalse) }
func (s *filterSuite) TestBuildPredicatesForMulti(c *gc.C) { predicates, err := payload.BuildPredicatesFor([]string{ "tagC", "spam", "1", "2", "idspam", }) c.Assert(err, jc.ErrorIsNil) c.Check(predicates, gc.HasLen, 5) pl := s.newPayload("spam") var matches []bool for _, pred := range predicates { matched := pred(pl) matches = append(matches, matched) } c.Check(matches, jc.DeepEquals, []bool{ false, true, true, false, true, }) }
// List builds the list of payloads being tracked for // the given unit and IDs. If no IDs are provided then all tracked // payloads for the unit are returned. func (a PublicAPI) List(args api.EnvListArgs) (api.EnvListResults, error) { var r api.EnvListResults payloads, err := a.State.ListAll() if err != nil { return r, errors.Trace(err) } filters, err := payload.BuildPredicatesFor(args.Patterns) if err != nil { return r, errors.Trace(err) } payloads = payload.Filter(payloads, filters...) for _, payload := range payloads { apiInfo := api.Payload2api(payload) r.Results = append(r.Results, apiInfo) } return r, nil }