diff --git a/pkg/labels/selector.go b/pkg/labels/selector.go index 659083d1a05..246bcd5fb14 100644 --- a/pkg/labels/selector.go +++ b/pkg/labels/selector.go @@ -483,3 +483,9 @@ func ParseSelector(selector string) (Selector, error) { } return andTerm(items), nil } + +// OneTermEqualSelector returns an object that matches objects where one label/field equals one value. +// Cannot return an error. +func OneTermEqualSelector(k, v string) Selector { + return &hasTerm{label: k, value: v} +} diff --git a/pkg/labels/selector_test.go b/pkg/labels/selector_test.go index 0f99517251e..54eb0b15fc2 100644 --- a/pkg/labels/selector_test.go +++ b/pkg/labels/selector_test.go @@ -113,6 +113,15 @@ func TestSelectorMatches(t *testing.T) { expectNoMatch(t, "foo=bar,foobar=bar,baz=blah", labelset) } +func TestOneTermEqualSelector(t *testing.T) { + if !OneTermEqualSelector("x", "y").Matches(Set{"x": "y"}) { + t.Errorf("No match when match expected.") + } + if OneTermEqualSelector("x", "y").Matches(Set{"x": "z"}) { + t.Errorf("Match when none expected.") + } +} + func expectMatchDirect(t *testing.T, selector, ls Set) { if !SelectorFromSet(selector).Matches(ls) { t.Errorf("Wanted %s to match '%s', but it did not.\n", selector, ls)