Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions pkg/project/apiserver/registry/project/proxy/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,26 +214,5 @@ func (s *REST) Delete(ctx context.Context, name string, objectFunc rest.Validate
if options != nil {
opts = *options
}
if objectFunc != nil {
obj, err := s.Get(ctx, name, &metav1.GetOptions{})
if err != nil {
return nil, false, err
}
projectObj, ok := obj.(*projectapi.Project)
if !ok || projectObj == nil {
return nil, false, fmt.Errorf("not a project: %#v", obj)
}

// Make sure the object hasn't changed between Get and Delete - pass UID and RV to delete options
if opts.Preconditions == nil {
opts.Preconditions = &metav1.Preconditions{}
}
opts.Preconditions.UID = &projectObj.UID
opts.Preconditions.ResourceVersion = &projectObj.ResourceVersion

if err := objectFunc(ctx, obj); err != nil {
return nil, false, err
}
}
return &metav1.Status{Status: metav1.StatusSuccess}, false, s.client.Delete(ctx, name, opts)
}
44 changes: 2 additions & 42 deletions pkg/project/apiserver/registry/project/proxy/proxy_test.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package proxy

import (
"context"
"strings"
"testing"

corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/authentication/user"
apirequest "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest"
Expand Down Expand Up @@ -103,27 +101,6 @@ func TestCreateProjectOK(t *testing.T) {
}
}

func TestCreateProjectValidation(t *testing.T) {
mockClient := &fake.Clientset{}
storage := NewREST(mockClient.CoreV1().Namespaces(), &mockLister{}, nil, nil)

validationCalled := false
validationFunc := func(ctx context.Context, obj runtime.Object) error {
validationCalled = true
return nil
}

_, err := storage.Create(apirequest.NewContext(), &projectapi.Project{
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
}, validationFunc, &metav1.CreateOptions{})
if err != nil {
t.Errorf("Unexpected non-nil error: %#v", err)
}
if !validationCalled {
t.Errorf("Expected validation function to be called")
}
}

func TestGetProjectOK(t *testing.T) {
mockClient := fake.NewSimpleClientset(&corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})
storage := NewREST(mockClient.CoreV1().Namespaces(), &mockLister{}, nil, nil)
Expand Down Expand Up @@ -159,26 +136,9 @@ func TestDeleteProject(t *testing.T) {
t.Errorf("Expected status=success, got: %#v", status)
}
if len(mockClient.Actions()) != 1 {
t.Errorf("Expected client action for delete, got %v", mockClient.Actions())
t.Errorf("Expected client action for delete")
}
if !mockClient.Actions()[0].Matches("delete", "namespaces") {
t.Errorf("Expected call to delete-namespace, got %#v", mockClient.Actions()[0])
}
}

func TestDeleteProjectValidation(t *testing.T) {
mockClient := &fake.Clientset{}
storage := REST{
client: mockClient.CoreV1().Namespaces(),
}
validationCalled := false
validationFunc := func(ctx context.Context, obj runtime.Object) error {
validationCalled = true
return nil
}

storage.Delete(apirequest.NewContext(), "foo", validationFunc, &metav1.DeleteOptions{})
if !validationCalled {
t.Errorf("Expected validation function to be called")
t.Errorf("Expected call to delete-namespace")
}
}