...
1
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: "resourceslices",
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 validNewResourceSlice(name string) *resource.ResourceSlice {
50 return &resource.ResourceSlice{
51 ObjectMeta: metav1.ObjectMeta{
52 Name: name,
53 },
54 NodeName: name,
55 DriverName: "cdi.example.com",
56 ResourceModel: resource.ResourceModel{
57 NamedResources: &resource.NamedResourcesResources{},
58 },
59 }
60 }
61
62 func TestCreate(t *testing.T) {
63 storage, server := newStorage(t)
64 defer server.Terminate(t)
65 defer storage.Store.DestroyFunc()
66 test := genericregistrytest.New(t, storage.Store).ClusterScope()
67 resourceClass := validNewResourceSlice("foo")
68 resourceClass.ObjectMeta = metav1.ObjectMeta{GenerateName: "foo"}
69 test.TestCreate(
70
71 resourceClass,
72
73 &resource.ResourceSlice{
74 ObjectMeta: metav1.ObjectMeta{Name: "*BadName!"},
75 },
76 )
77 }
78
79 func TestUpdate(t *testing.T) {
80 storage, server := newStorage(t)
81 defer server.Terminate(t)
82 defer storage.Store.DestroyFunc()
83 test := genericregistrytest.New(t, storage.Store).ClusterScope()
84 test.TestUpdate(
85
86 validNewResourceSlice("foo"),
87
88 func(obj runtime.Object) runtime.Object {
89 object := obj.(*resource.ResourceSlice)
90 object.Labels = map[string]string{"foo": "bar"}
91 return object
92 },
93
94 func(obj runtime.Object) runtime.Object {
95 object := obj.(*resource.ResourceSlice)
96 object.DriverName = ""
97 return object
98 },
99 )
100
101 }
102
103 func TestDelete(t *testing.T) {
104 storage, server := newStorage(t)
105 defer server.Terminate(t)
106 defer storage.Store.DestroyFunc()
107 test := genericregistrytest.New(t, storage.Store).ClusterScope().ReturnDeletedObject()
108 test.TestDelete(validNewResourceSlice("foo"))
109 }
110
111 func TestGet(t *testing.T) {
112 storage, server := newStorage(t)
113 defer server.Terminate(t)
114 defer storage.Store.DestroyFunc()
115 test := genericregistrytest.New(t, storage.Store).ClusterScope()
116 test.TestGet(validNewResourceSlice("foo"))
117 }
118
119 func TestList(t *testing.T) {
120 storage, server := newStorage(t)
121 defer server.Terminate(t)
122 defer storage.Store.DestroyFunc()
123 test := genericregistrytest.New(t, storage.Store).ClusterScope()
124 test.TestList(validNewResourceSlice("foo"))
125 }
126
127 func TestWatch(t *testing.T) {
128 storage, server := newStorage(t)
129 defer server.Terminate(t)
130 defer storage.Store.DestroyFunc()
131 test := genericregistrytest.New(t, storage.Store).ClusterScope()
132 test.TestWatch(
133 validNewResourceSlice("foo"),
134
135 []labels.Set{},
136
137 []labels.Set{
138 {"foo": "bar"},
139 },
140
141 []fields.Set{
142 {"metadata.name": "foo"},
143 },
144
145 []fields.Set{
146 {"metadata.name": "bar"},
147 },
148 )
149 }
150
View as plain text