func TestCreateInvokesAdmissionControl(t *testing.T) { wait := sync.WaitGroup{} wait.Add(1) simpleStorage := &SimpleRESTStorage{ injectedFunction: func(obj runtime.Object) (returnObj runtime.Object, err error) { wait.Wait() return &Simple{}, nil }, } handler := Handle(map[string]RESTStorage{ "foo": simpleStorage, }, codec, "/prefix", testVersion, selfLinker, deny.NewAlwaysDeny()) handler.(*defaultAPIServer).group.handler.asyncOpWait = 0 server := httptest.NewServer(handler) defer server.Close() client := http.Client{} simple := &Simple{ Other: "foo", } data, _ := codec.Encode(simple) request, err := http.NewRequest("POST", server.URL+"/prefix/version/foo", bytes.NewBuffer(data)) if err != nil { t.Errorf("unexpected error: %v", err) } response, err := client.Do(request) if err != nil { t.Errorf("unexpected error: %v", err) } if response.StatusCode != http.StatusForbidden { t.Errorf("Unexpected response %#v", response) } }
func TestUpdateInvokesAdmissionControl(t *testing.T) { storage := map[string]RESTStorage{} simpleStorage := SimpleRESTStorage{} ID := "id" storage["simple"] = &simpleStorage selfLinker := &setTestSelfLinker{ t: t, expectedSet: "/prefix/version/simple/" + ID, } handler := Handle(storage, codec, "/prefix", testVersion, selfLinker, deny.NewAlwaysDeny()) server := httptest.NewServer(handler) defer server.Close() item := &Simple{ Other: "bar", } body, err := codec.Encode(item) if err != nil { // The following cases will fail, so die now t.Fatalf("unexpected error: %v", err) } client := http.Client{} request, err := http.NewRequest("PUT", server.URL+"/prefix/version/simple/"+ID, bytes.NewReader(body)) response, err := client.Do(request) if err != nil { t.Errorf("unexpected error: %v", err) } if response.StatusCode != http.StatusForbidden { t.Errorf("Unexpected response %#v", response) } }
func TestDeleteInvokesAdmissionControl(t *testing.T) { storage := map[string]RESTStorage{} simpleStorage := SimpleRESTStorage{} ID := "id" storage["simple"] = &simpleStorage handler := Handle(storage, codec, "/prefix", testVersion, selfLinker, deny.NewAlwaysDeny()) server := httptest.NewServer(handler) defer server.Close() client := http.Client{} request, err := http.NewRequest("DELETE", server.URL+"/prefix/version/simple/"+ID, nil) response, err := client.Do(request) if err != nil { t.Errorf("unexpected error: %v", err) } if response.StatusCode != http.StatusForbidden { t.Errorf("Unexpected response %#v", response) } }
func TestCreateInvokesAdmissionControl(t *testing.T) { storage := SimpleRESTStorage{ injectedFunction: func(obj runtime.Object) (runtime.Object, error) { time.Sleep(5 * time.Millisecond) return obj, nil }, } selfLinker := &setTestSelfLinker{ t: t, name: "bar", namespace: "other", expectedSet: "/api/version/foo/bar?namespace=other", } handler := handleInternal(map[string]RESTStorage{"foo": &storage}, deny.NewAlwaysDeny(), mapper, selfLinker) server := httptest.NewServer(handler) defer server.Close() client := http.Client{} simple := &Simple{ Other: "bar", } data, _ := codec.Encode(simple) request, err := http.NewRequest("POST", server.URL+"/api/version/foo?namespace=other", bytes.NewBuffer(data)) if err != nil { t.Errorf("unexpected error: %v", err) } wg := sync.WaitGroup{} wg.Add(1) var response *http.Response go func() { response, err = client.Do(request) wg.Done() }() wg.Wait() if err != nil { t.Errorf("unexpected error: %v", err) } if response.StatusCode != http.StatusForbidden { t.Errorf("Unexpected status: %d, Expected: %d, %#v", response.StatusCode, http.StatusForbidden, response) } }
// tests with a deny admission controller func handleDeny(storage map[string]RESTStorage) http.Handler { return handleInternal(storage, deny.NewAlwaysDeny(), mapper, selfLinker) }
// tests with a deny admission controller func handleDeny(storage map[string]rest.Storage) http.Handler { return handleInternal(true, storage, deny.NewAlwaysDeny(), selfLinker) }