@@ -20,16 +20,21 @@ import (
2020 "errors"
2121 "fmt"
2222 "testing"
23+ "time"
2324
2425 "google.golang.org/grpc"
26+ "google.golang.org/grpc/codes"
27+ "google.golang.org/grpc/status"
2528 v1 "k8s.io/api/core/v1"
29+ kubeerrors "k8s.io/apimachinery/pkg/api/errors"
2630 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2731 "k8s.io/apimachinery/pkg/runtime"
2832 fakekubeclientset "k8s.io/client-go/kubernetes/fake"
2933 "k8s.io/client-go/tools/record"
3034 "sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage/v1alpha1"
3135 fakebucketclientset "sigs.k8s.io/container-object-storage-interface-api/client/clientset/versioned/fake"
3236 "sigs.k8s.io/container-object-storage-interface-api/controller/events"
37+ "sigs.k8s.io/container-object-storage-interface-provisioner-sidecar/pkg/consts"
3338 cosi "sigs.k8s.io/container-object-storage-interface-spec"
3439 fakespec "sigs.k8s.io/container-object-storage-interface-spec/fake"
3540)
@@ -130,6 +135,34 @@ func TestMissingBucketClassName(t *testing.T) {
130135func TestRecordEvents (t * testing.T ) {
131136 t .Parallel ()
132137
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+
133166 for _ , tc := range []struct {
134167 name string
135168 expectedEvent string
@@ -138,10 +171,15 @@ func TestRecordEvents(t *testing.T) {
138171 eventTrigger func (* testing.T , * BucketListener )
139172 }{
140173 {
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" ),
143179 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+ }
145183 },
146184 driver : struct { fakespec.FakeProvisionerClient }{
147185 FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -150,16 +188,25 @@ func TestRecordEvents(t *testing.T) {
150188 _ * cosi.DriverCreateBucketRequest ,
151189 _ ... grpc.CallOption ,
152190 ) (* cosi.DriverCreateBucketResponse , error ) {
153- panic ("unimplemented " )
191+ panic ("should not be reached, bucket class name is not defined " )
154192 },
155193 },
156194 },
157195 },
158196 {
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" ),
161202 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+ }
163210 },
164211 driver : struct { fakespec.FakeProvisionerClient }{
165212 FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -168,16 +215,25 @@ func TestRecordEvents(t *testing.T) {
168215 _ * cosi.DriverCreateBucketRequest ,
169216 _ ... grpc.CallOption ,
170217 ) (* cosi.DriverCreateBucketResponse , error ) {
171- panic ("unimplemented " )
218+ panic ("should not be reached, bucket class does not exist " )
172219 },
173220 },
174221 },
175222 },
176223 {
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 },
179230 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+ }
181237 },
182238 driver : struct { fakespec.FakeProvisionerClient }{
183239 FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -186,16 +242,26 @@ func TestRecordEvents(t *testing.T) {
186242 _ * cosi.DriverCreateBucketRequest ,
187243 _ ... grpc.CallOption ,
188244 ) (* cosi.DriverCreateBucketResponse , error ) {
189- panic ( "unimplemented " )
245+ return nil , status . Error ( codes . Unknown , "unknown error test " )
190246 },
191247 },
192248 },
193249 },
194250 {
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 },
197257 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+ }
199265 },
200266 driver : struct { fakespec.FakeProvisionerClient }{
201267 FakeProvisionerClient : fakespec.FakeProvisionerClient {
@@ -204,7 +270,7 @@ func TestRecordEvents(t *testing.T) {
204270 _ * cosi.DriverDeleteBucketRequest ,
205271 _ ... grpc.CallOption ,
206272 ) (* cosi.DriverDeleteBucketResponse , error ) {
207- panic ( "unimplemented " )
273+ return nil , status . Error ( codes . Unknown , "unknown error test " )
208274 },
209275 },
210276 },
0 commit comments