Add more parameters to Watch

* Add labels selector (same as List)
* Add fields selector
 * Plan to let you select pods by Host and/or Status
* Add resourceVersion to let you resume a watch where you left off.
This commit is contained in:
Daniel Smith
2014-08-05 13:33:25 -07:00
parent d52492111f
commit 283fdba6ab
11 changed files with 182 additions and 46 deletions

View File

@@ -148,3 +148,70 @@ func TestWatchHTTP(t *testing.T) {
t.Errorf("Unexpected non-error")
}
}
func TestWatchParamParsing(t *testing.T) {
simpleStorage := &SimpleRESTStorage{}
handler := New(map[string]RESTStorage{
"foo": simpleStorage,
}, "/prefix/version")
server := httptest.NewServer(handler)
dest, _ := url.Parse(server.URL)
dest.Path = "/prefix/version/watch/foo"
table := []struct {
rawQuery string
resourceVersion uint64
labelSelector string
fieldSelector string
id string
}{
{
rawQuery: "id=myID&resourceVersion=1234",
resourceVersion: 1234,
labelSelector: "",
fieldSelector: "",
id: "myID",
}, {
rawQuery: "resourceVersion=314159&fields=Host%3D&labels=name%3Dfoo",
resourceVersion: 314159,
labelSelector: "name=foo",
fieldSelector: "Host=",
id: "",
}, {
rawQuery: "",
resourceVersion: 0,
labelSelector: "",
fieldSelector: "",
id: "",
},
}
for _, item := range table {
simpleStorage.requestedLabelSelector = nil
simpleStorage.requestedFieldSelector = nil
simpleStorage.requestedResourceVersion = 5 // Prove this is set in all cases
simpleStorage.requestedID = ""
dest.RawQuery = item.rawQuery
resp, err := http.Get(dest.String())
if err != nil {
t.Errorf("%v: unexpected error: %v", item.rawQuery, err)
continue
}
resp.Body.Close()
if e, a := item.id, simpleStorage.requestedID; e != a {
t.Errorf("%v: expected %v, got %v", item.rawQuery, e, a)
}
if e, a := item.resourceVersion, simpleStorage.requestedResourceVersion; e != a {
t.Errorf("%v: expected %v, got %v", item.rawQuery, e, a)
}
if simpleStorage.requestedID == "" {
if e, a := item.labelSelector, simpleStorage.requestedLabelSelector.String(); e != a {
t.Errorf("%v: expected %v, got %v", item.rawQuery, e, a)
}
if e, a := item.fieldSelector, simpleStorage.requestedFieldSelector.String(); e != a {
t.Errorf("%v: expected %v, got %v", item.rawQuery, e, a)
}
}
}
}