From 5c3e4fab58e982025761c56341ced936fa2a726a Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Mon, 16 Jun 2014 19:17:23 -0700 Subject: [PATCH] add another test --- pkg/labels/labels_test.go | 43 +++++++++++++++++++++++++++++++++++++++ pkg/labels/query.go | 16 +++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 pkg/labels/labels_test.go diff --git a/pkg/labels/labels_test.go b/pkg/labels/labels_test.go new file mode 100644 index 00000000000..a843074a408 --- /dev/null +++ b/pkg/labels/labels_test.go @@ -0,0 +1,43 @@ +/* +Copyright 2014 Google Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package labels + +import ( + "testing" +) + +func matches(t *testing.T, ls LabelSet, want string) { + if ls.String() != want { + t.Errorf("Expected '%s', but got '%s'", want, ls.String()) + } +} + +func TestLabelSetString(t *testing.T) { + matches(t, LabelSet{"x": "y"}, "x=y") + matches(t, LabelSet{"foo": "bar"}, "foo=bar") + matches(t, LabelSet{"foo": "bar", "baz": "qup"}, "foo=bar,baz=qup") + + // TODO: Make our label representation robust enough to handel labels + // with ",=!" characters in their names. +} + +func TestLabelGet(t *testing.T) { + ls := LabelSet{"x": "y"} + if ls.Get("x") != "y" { + t.Errorf("LabelSet.Get is broken") + } +} diff --git a/pkg/labels/query.go b/pkg/labels/query.go index 7755361bc12..0ad1c5d7a41 100644 --- a/pkg/labels/query.go +++ b/pkg/labels/query.go @@ -30,6 +30,11 @@ type Query interface { String() string } +// Everything returns a query that matches all labels. +func Everything() Query { + return &queryTerm{} +} + // A single term of a label query. type queryTerm struct { // Not inverts the meaning of the items in this term. @@ -84,6 +89,17 @@ func try(queryPiece, op string) (lhs, rhs string, ok bool) { return "", "", false } +// Given a LabelSet, return a Query which will match exactly that LabelSet. +func QueryFromSet(ls LabelSet) Query { + var query queryTerm + for l, v := range ls { + // Make a copy, because we're taking the address below + label, value := l, v + query.and = append(query.and, queryTerm{label: &label, value: &value}) + } + return &query +} + // Takes a string repsenting a label query and returns an object suitable for matching, or an error. func ParseQuery(query string) (Query, error) { parts := strings.Split(query, ",")