...

Source file src/k8s.io/kubernetes/pkg/registry/resource/resourceclassparameters/storage/storage_test.go

Documentation: k8s.io/kubernetes/pkg/registry/resource/resourceclassparameters/storage

     1  /*
     2  Copyright 2022 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package storage
    18  
    19  import (
    20  	"testing"
    21  
    22  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    23  	"k8s.io/apimachinery/pkg/fields"
    24  	"k8s.io/apimachinery/pkg/labels"
    25  	"k8s.io/apimachinery/pkg/runtime"
    26  	"k8s.io/apiserver/pkg/registry/generic"
    27  	genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing"
    28  	etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing"
    29  	"k8s.io/kubernetes/pkg/apis/resource"
    30  	_ "k8s.io/kubernetes/pkg/apis/resource/install"
    31  	"k8s.io/kubernetes/pkg/registry/registrytest"
    32  )
    33  
    34  func newStorage(t *testing.T) (*REST, *etcd3testing.EtcdTestServer) {
    35  	etcdStorage, server := registrytest.NewEtcdStorage(t, resource.GroupName)
    36  	restOptions := generic.RESTOptions{
    37  		StorageConfig:           etcdStorage,
    38  		Decorator:               generic.UndecoratedStorage,
    39  		DeleteCollectionWorkers: 1,
    40  		ResourcePrefix:          "resourceclassparameters",
    41  	}
    42  	resourceClassStorage, err := NewREST(restOptions)
    43  	if err != nil {
    44  		t.Fatalf("unexpected error from REST storage: %v", err)
    45  	}
    46  	return resourceClassStorage, server
    47  }
    48  
    49  func validNewResourceClassParameters(name string) *resource.ResourceClassParameters {
    50  	return &resource.ResourceClassParameters{
    51  		ObjectMeta: metav1.ObjectMeta{
    52  			Name:      name,
    53  			Namespace: metav1.NamespaceDefault,
    54  		},
    55  	}
    56  }
    57  
    58  func TestCreate(t *testing.T) {
    59  	storage, server := newStorage(t)
    60  	defer server.Terminate(t)
    61  	defer storage.Store.DestroyFunc()
    62  	test := genericregistrytest.New(t, storage.Store)
    63  	resourceClass := validNewResourceClassParameters("foo")
    64  	resourceClass.ObjectMeta = metav1.ObjectMeta{}
    65  	test.TestCreate(
    66  		// valid
    67  		resourceClass,
    68  		// invalid
    69  		&resource.ResourceClassParameters{
    70  			ObjectMeta: metav1.ObjectMeta{Name: "*BadName!"},
    71  		},
    72  	)
    73  }
    74  
    75  func TestUpdate(t *testing.T) {
    76  	storage, server := newStorage(t)
    77  	defer server.Terminate(t)
    78  	defer storage.Store.DestroyFunc()
    79  	test := genericregistrytest.New(t, storage.Store)
    80  	test.TestUpdate(
    81  		// valid
    82  		validNewResourceClassParameters("foo"),
    83  		// updateFunc
    84  		func(obj runtime.Object) runtime.Object {
    85  			object := obj.(*resource.ResourceClassParameters)
    86  			object.Labels = map[string]string{"foo": "bar"}
    87  			return object
    88  		},
    89  		// invalid update
    90  		func(obj runtime.Object) runtime.Object {
    91  			object := obj.(*resource.ResourceClassParameters)
    92  			object.Labels = map[string]string{"&$^^#%@": "1"}
    93  			return object
    94  		},
    95  	)
    96  
    97  }
    98  
    99  func TestDelete(t *testing.T) {
   100  	storage, server := newStorage(t)
   101  	defer server.Terminate(t)
   102  	defer storage.Store.DestroyFunc()
   103  	test := genericregistrytest.New(t, storage.Store).ReturnDeletedObject()
   104  	test.TestDelete(validNewResourceClassParameters("foo"))
   105  }
   106  
   107  func TestGet(t *testing.T) {
   108  	storage, server := newStorage(t)
   109  	defer server.Terminate(t)
   110  	defer storage.Store.DestroyFunc()
   111  	test := genericregistrytest.New(t, storage.Store)
   112  	test.TestGet(validNewResourceClassParameters("foo"))
   113  }
   114  
   115  func TestList(t *testing.T) {
   116  	storage, server := newStorage(t)
   117  	defer server.Terminate(t)
   118  	defer storage.Store.DestroyFunc()
   119  	test := genericregistrytest.New(t, storage.Store)
   120  	test.TestList(validNewResourceClassParameters("foo"))
   121  }
   122  
   123  func TestWatch(t *testing.T) {
   124  	storage, server := newStorage(t)
   125  	defer server.Terminate(t)
   126  	defer storage.Store.DestroyFunc()
   127  	test := genericregistrytest.New(t, storage.Store)
   128  	test.TestWatch(
   129  		validNewResourceClassParameters("foo"),
   130  		// matching labels
   131  		[]labels.Set{},
   132  		// not matching labels
   133  		[]labels.Set{
   134  			{"foo": "bar"},
   135  		},
   136  		// matching fields
   137  		[]fields.Set{
   138  			{"metadata.name": "foo"},
   139  		},
   140  		// not matching fields
   141  		[]fields.Set{
   142  			{"metadata.name": "bar"},
   143  		},
   144  	)
   145  }
   146  

View as plain text