Merge pull request #1909 from derekwaynecarr/service_proxy_needs_namespace

Add unit test for namespace aware proxy
pull/6/head
Clayton Coleman 2014-10-20 17:16:04 -04:00
commit cba76ef1ef
2 changed files with 19 additions and 10 deletions

View File

@ -83,6 +83,7 @@ type SimpleRESTStorage struct {
// The id requested, and location to return for ResourceLocation
requestedResourceLocationID string
resourceLocation string
expectedResourceNamespace string
// If non-nil, called inside the WorkFunc when answering update, delete, create.
// obj receives the original input to the update, delete, or create call.
@ -157,6 +158,11 @@ func (storage *SimpleRESTStorage) Watch(ctx api.Context, label, field labels.Sel
// Implement Redirector.
func (storage *SimpleRESTStorage) ResourceLocation(ctx api.Context, id string) (string, error) {
// validate that the namespace context on the request matches the expected input
requestedResourceNamespace := api.Namespace(ctx)
if storage.expectedResourceNamespace != requestedResourceNamespace {
return "", fmt.Errorf("Expected request namespace %s, but got namespace %s", storage.expectedResourceNamespace, requestedResourceNamespace)
}
storage.requestedResourceLocationID = id
if err := storage.errors["resourceLocation"]; err != nil {
return "", err

View File

@ -132,15 +132,17 @@ func TestProxyTransport_fixLinks(t *testing.T) {
func TestProxy(t *testing.T) {
table := []struct {
method string
path string
reqBody string
respBody string
method string
path string
reqBody string
respBody string
reqNamespace string
}{
{"GET", "/some/dir", "", "answer"},
{"POST", "/some/other/dir", "question", "answer"},
{"PUT", "/some/dir/id", "different question", "answer"},
{"DELETE", "/some/dir/id", "", "ok"},
{"GET", "/some/dir", "", "answer", "default"},
{"POST", "/some/other/dir", "question", "answer", "default"},
{"PUT", "/some/dir/id", "different question", "answer", "default"},
{"DELETE", "/some/dir/id", "", "ok", "default"},
{"GET", "/some/dir/id?namespace=other", "", "answer", "other"},
}
for _, item := range table {
@ -156,8 +158,9 @@ func TestProxy(t *testing.T) {
}))
simpleStorage := &SimpleRESTStorage{
errors: map[string]error{},
resourceLocation: proxyServer.URL,
errors: map[string]error{},
resourceLocation: proxyServer.URL,
expectedResourceNamespace: item.reqNamespace,
}
handler := Handle(map[string]RESTStorage{
"foo": simpleStorage,