Skip to content
This repository was archived by the owner on Dec 6, 2024. It is now read-only.

Commit b6505b7

Browse files
committed
test(bucket): added event tests
Signed-off-by: Mateusz Urbanek <[email protected]>
1 parent edad614 commit b6505b7

File tree

2 files changed

+83
-18
lines changed

2 files changed

+83
-18
lines changed

Diff for: pkg/bucket/bucket_controller.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket)
7373
"name", bucket.ObjectMeta.Name)
7474

7575
if bucket.Spec.BucketClassName == "" {
76-
b.recordEvent(inputBucket, v1.EventTypeWarning, events.FailedCreateBucket, "BucketClassName was not defined in the Bucket %v.", bucket.Name)
76+
b.recordEvent(inputBucket, v1.EventTypeWarning, events.FailedCreateBucket, "BucketClassName was not defined in the Bucket %v", bucket.Name)
7777
return fmt.Errorf("%w for Bucket %v", consts.ErrUndefinedBucketClassName, bucket.Name)
7878
}
7979

@@ -302,7 +302,6 @@ func (b *BucketListener) Delete(ctx context.Context, inputBucket *v1alpha1.Bucke
302302
}
303303

304304
return nil
305-
306305
}
307306

308307
// InitializeKubeClient initializes the kubernetes client

Diff for: pkg/bucket/bucket_controller_test.go

+82-16
Original file line numberDiff line numberDiff line change
@@ -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) {
130135
func 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

Comments
 (0)