@@ -20,16 +20,21 @@ import (
20
20
"errors"
21
21
"fmt"
22
22
"testing"
23
+ "time"
23
24
24
25
"google.golang.org/grpc"
26
+ "google.golang.org/grpc/codes"
27
+ "google.golang.org/grpc/status"
25
28
v1 "k8s.io/api/core/v1"
29
+ kubeerrors "k8s.io/apimachinery/pkg/api/errors"
26
30
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
31
"k8s.io/apimachinery/pkg/runtime"
28
32
fakekubeclientset "k8s.io/client-go/kubernetes/fake"
29
33
"k8s.io/client-go/tools/record"
30
34
"sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage/v1alpha1"
31
35
fakebucketclientset "sigs.k8s.io/container-object-storage-interface-api/client/clientset/versioned/fake"
32
36
"sigs.k8s.io/container-object-storage-interface-api/controller/events"
37
+ "sigs.k8s.io/container-object-storage-interface-provisioner-sidecar/pkg/consts"
33
38
cosi "sigs.k8s.io/container-object-storage-interface-spec"
34
39
fakespec "sigs.k8s.io/container-object-storage-interface-spec/fake"
35
40
)
@@ -130,6 +135,34 @@ func TestMissingBucketClassName(t *testing.T) {
130
135
func TestRecordEvents (t * testing.T ) {
131
136
t .Parallel ()
132
137
138
+ var (
139
+ bucketClass = & v1alpha1.BucketClass {
140
+ ObjectMeta : metav1.ObjectMeta {
141
+ Name : "bucket-class" ,
142
+ },
143
+ }
144
+ bucketClaim = & v1alpha1.BucketClaim {
145
+ ObjectMeta : metav1.ObjectMeta {
146
+ Name : "bucket-claim" ,
147
+ },
148
+ }
149
+ bucket = & v1alpha1.Bucket {
150
+ ObjectMeta : metav1.ObjectMeta {
151
+ Name : "bucket" ,
152
+ Finalizers : []string {
153
+ consts .BucketFinalizer ,
154
+ },
155
+ },
156
+ Spec : v1alpha1.BucketSpec {
157
+ DriverName : "test" ,
158
+ DeletionPolicy : v1alpha1 .DeletionPolicyDelete ,
159
+ BucketClaim : & v1.ObjectReference {
160
+ Name : bucketClaim .GetObjectMeta ().GetName (),
161
+ },
162
+ },
163
+ }
164
+ )
165
+
133
166
for _ , tc := range []struct {
134
167
name string
135
168
expectedEvent string
@@ -138,10 +171,15 @@ func TestRecordEvents(t *testing.T) {
138
171
eventTrigger func (* testing.T , * BucketListener )
139
172
}{
140
173
{
141
- name : "" ,
142
- expectedEvent : newEvent (v1 .EventTypeWarning , events .FailedCreateBucket , "" ),
174
+ name : "BucketClassNameNotDefined" ,
175
+ expectedEvent : newEvent (
176
+ v1 .EventTypeWarning ,
177
+ events .FailedCreateBucket ,
178
+ "BucketClassName was not defined in the Bucket bucket" ),
143
179
eventTrigger : func (t * testing.T , bl * BucketListener ) {
144
- panic ("unimplemented" )
180
+ if err := bl .Add (context .TODO (), bucket .DeepCopy ()); ! errors .Is (err , consts .ErrUndefinedBucketClassName ) {
181
+ t .Errorf ("expected %v error got %v" , consts .ErrUndefinedBucketClassName , err )
182
+ }
145
183
},
146
184
driver : struct { fakespec.FakeProvisionerClient }{
147
185
FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -150,16 +188,25 @@ func TestRecordEvents(t *testing.T) {
150
188
_ * cosi.DriverCreateBucketRequest ,
151
189
_ ... grpc.CallOption ,
152
190
) (* cosi.DriverCreateBucketResponse , error ) {
153
- panic ("unimplemented " )
191
+ panic ("should not be reached, bucket class name is not defined " )
154
192
},
155
193
},
156
194
},
157
195
},
158
196
{
159
- name : "" ,
160
- expectedEvent : newEvent (v1 .EventTypeWarning , events .FailedCreateBucket , "" ),
197
+ name : "BucketClassNotFound" ,
198
+ expectedEvent : newEvent (
199
+ v1 .EventTypeWarning ,
200
+ events .FailedCreateBucket ,
201
+ "bucketclasses.objectstorage.k8s.io \" bucket-class\" not found" ),
161
202
eventTrigger : func (t * testing.T , bl * BucketListener ) {
162
- panic ("unimplemented" )
203
+ bucket := bucket .DeepCopy ()
204
+ bucket .Spec .ExistingBucketID = "existing"
205
+ bucket .Spec .BucketClassName = bucketClass .GetObjectMeta ().GetName ()
206
+
207
+ if err := bl .Add (context .TODO (), bucket ); ! kubeerrors .IsNotFound (err ) {
208
+ t .Errorf ("expected Not Found error got %v" , err )
209
+ }
163
210
},
164
211
driver : struct { fakespec.FakeProvisionerClient }{
165
212
FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -168,16 +215,25 @@ func TestRecordEvents(t *testing.T) {
168
215
_ * cosi.DriverCreateBucketRequest ,
169
216
_ ... grpc.CallOption ,
170
217
) (* cosi.DriverCreateBucketResponse , error ) {
171
- panic ("unimplemented " )
218
+ panic ("should not be reached, bucket class does not exist " )
172
219
},
173
220
},
174
221
},
175
222
},
176
223
{
177
- name : "" ,
178
- expectedEvent : newEvent (v1 .EventTypeWarning , events .FailedCreateBucket , "" ),
224
+ name : "UnknownCreateError" ,
225
+ expectedEvent : newEvent (
226
+ v1 .EventTypeWarning ,
227
+ events .FailedCreateBucket ,
228
+ "Failed to create Bucket bucket: rpc error: code = Unknown desc = unknown error test" ),
229
+ cosiObjects : []runtime.Object {bucketClass },
179
230
eventTrigger : func (t * testing.T , bl * BucketListener ) {
180
- panic ("unimplemented" )
231
+ bucket := bucket .DeepCopy ()
232
+ bucket .Spec .BucketClassName = bucketClass .GetObjectMeta ().GetName ()
233
+
234
+ if err := bl .Add (context .TODO (), bucket ); status .Code (err ) != codes .Unknown {
235
+ t .Errorf ("expected Unknown got %v" , err )
236
+ }
181
237
},
182
238
driver : struct { fakespec.FakeProvisionerClient }{
183
239
FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -186,16 +242,26 @@ func TestRecordEvents(t *testing.T) {
186
242
_ * cosi.DriverCreateBucketRequest ,
187
243
_ ... grpc.CallOption ,
188
244
) (* cosi.DriverCreateBucketResponse , error ) {
189
- panic ( "unimplemented " )
245
+ return nil , status . Error ( codes . Unknown , "unknown error test " )
190
246
},
191
247
},
192
248
},
193
249
},
194
250
{
195
- name : "" ,
196
- expectedEvent : newEvent (v1 .EventTypeWarning , events .FailedDeleteBucket , "" ),
251
+ name : "UnknownDeleteError" ,
252
+ expectedEvent : newEvent (
253
+ v1 .EventTypeWarning ,
254
+ events .FailedDeleteBucket ,
255
+ "rpc error: code = Unknown desc = unknown error test" ),
256
+ cosiObjects : []runtime.Object {bucketClaim },
197
257
eventTrigger : func (t * testing.T , bl * BucketListener ) {
198
- panic ("unimplemented" )
258
+ bucket := bucket .DeepCopy ()
259
+ time , _ := time .Parse (time .DateTime , "2006-01-02 15:04:05" )
260
+ bucket .ObjectMeta .DeletionTimestamp = & metav1.Time {Time : time }
261
+
262
+ if err := bl .Update (context .TODO (), bucket , bucket ); status .Code (err ) != codes .Unknown {
263
+ t .Errorf ("expected Unknown got %v" , err )
264
+ }
199
265
},
200
266
driver : struct { fakespec.FakeProvisionerClient }{
201
267
FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -204,7 +270,7 @@ func TestRecordEvents(t *testing.T) {
204
270
_ * cosi.DriverDeleteBucketRequest ,
205
271
_ ... grpc.CallOption ,
206
272
) (* cosi.DriverDeleteBucketResponse , error ) {
207
- panic ( "unimplemented " )
273
+ return nil , status . Error ( codes . Unknown , "unknown error test " )
208
274
},
209
275
},
210
276
},
0 commit comments