@@ -4,14 +4,19 @@ import (
44 "context"
55 "fmt"
66 "testing"
7+ "time"
78
89 alicloudErr "github.com/aliyun/alibaba-cloud-sdk-go/sdk/errors"
910 "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
1011 "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
1112 gomock "github.com/golang/mock/gomock"
1213 "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/cloud"
14+ "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/disk/batcher"
15+ "github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/disk/desc"
1316 "github.com/stretchr/testify/assert"
1417 "k8s.io/apimachinery/pkg/util/sets"
18+ "k8s.io/klog/v2/ktesting"
19+ "k8s.io/utils/clock"
1520)
1621
1722var (
@@ -31,37 +36,49 @@ func init() {
3136}` ), resizeDiskResponse )
3237}
3338
34- func TestDeleteDisk (t * testing.T ) {
39+ func testCreateDelete (t * testing.T ) ( * cloud. MockECSInterface , * DiskCreateDelete ) {
3540 ctrl := gomock .NewController (t )
3641 c := cloud .NewMockECSInterface (ctrl )
3742
43+ return c , & DiskCreateDelete {
44+ ecs : c ,
45+ createThrottler : defaultThrottler (),
46+ deleteThrottler : defaultThrottler (),
47+ batcher : batcher .NewLowLatency (desc .Disk (c ), clock.RealClock {}, 1 * time .Second , 8 ),
48+ }
49+ }
50+
51+ func TestDeleteDisk (t * testing.T ) {
52+ c , cd := testCreateDelete (t )
53+ _ , ctx := ktesting .NewTestContext (t )
54+
3855 c .EXPECT ().DeleteDisk (gomock .Any ()).Return (deleteDiskResponse , nil )
3956
40- _ , err := deleteDisk (context . Background () , c , "test-disk" )
57+ _ , err := cd . deleteDisk (ctx , c , "test-disk" )
4158 assert .Nil (t , err )
4259}
4360
4461func TestDeleteDiskRetryOnInitError (t * testing.T ) {
4562 t .Parallel ()
46- ctrl := gomock . NewController (t )
47- c := cloud . NewMockECSInterface ( ctrl )
63+ c , cd := testCreateDelete (t )
64+ _ , ctx := ktesting . NewTestContext ( t )
4865
4966 initErr := alicloudErr .NewServerError (400 , `{"Code": "IncorrectDiskStatus.Initializing"}` , "" )
5067 c .EXPECT ().DeleteDisk (gomock .Any ()).Return (nil , initErr )
5168 c .EXPECT ().DeleteDisk (gomock .Any ()).Return (deleteDiskResponse , nil )
5269
53- _ , err := deleteDisk (context . Background () , c , "test-disk" )
70+ _ , err := cd . deleteDisk (ctx , c , "test-disk" )
5471 assert .Nil (t , err )
5572}
5673
5774func TestDeleteDiskPassthroughError (t * testing.T ) {
58- ctrl := gomock . NewController (t )
59- c := cloud . NewMockECSInterface ( ctrl )
75+ c , cd := testCreateDelete (t )
76+ _ , ctx := ktesting . NewTestContext ( t )
6077
6178 serverErr := alicloudErr .NewServerError (400 , `{"Code": "AnyOtherErrors"}` , "" )
6279 c .EXPECT ().DeleteDisk (gomock .Any ()).Return (nil , serverErr )
6380
64- _ , err := deleteDisk (context . Background () , c , "test-disk" )
81+ _ , err := cd . deleteDisk (ctx , c , "test-disk" )
6582 assert .Equal (t , serverErr , err )
6683}
6784
@@ -384,8 +401,8 @@ func TestCreateDisk_Basic(t *testing.T) {
384401 }
385402 for _ , c := range cases {
386403 t .Run (c .name , func (t * testing.T ) {
387- ctrl := gomock . NewController (t )
388- client := cloud . NewMockECSInterface ( ctrl )
404+ client , cd := testCreateDelete (t )
405+ _ , ctx := ktesting . NewTestContext ( t )
389406
390407 if ! c .err {
391408 client .EXPECT ().CreateDisk (gomock .Any ()).Return (& ecs.CreateDiskResponse {
@@ -396,7 +413,7 @@ func TestCreateDisk_Basic(t *testing.T) {
396413 client .EXPECT ().CreateDisk (gomock .Any ()).Return (nil , alicloudErr .NewServerError (400 , `{"Code": "AnyOtherErrors"}` , "" ))
397414 }
398415
399- diskID , attempt , err := createDisk (client , "disk-name" , "" , c .args , c .supports , c .instance , c .isVirtualNode )
416+ diskID , attempt , err := cd . createDisk (ctx , client , "disk-name" , "" , c .args , c .supports , c .instance , c .isVirtualNode )
400417 if c .err {
401418 assert .Error (t , err )
402419 } else {
@@ -409,16 +426,16 @@ func TestCreateDisk_Basic(t *testing.T) {
409426}
410427
411428func TestCreateDisk_ServerFailFallback (t * testing.T ) {
412- ctrl := gomock . NewController (t )
413- client := cloud . NewMockECSInterface ( ctrl )
429+ client , cd := testCreateDelete (t )
430+ _ , ctx := ktesting . NewTestContext ( t )
414431
415432 client .EXPECT ().CreateDisk (gomock .Any ()).Return (nil , alicloudErr .NewServerError (400 , `{"Code": "InvalidDataDiskSize.ValueNotSupported"}` , "" ))
416433 client .EXPECT ().CreateDisk (gomock .Any ()).Return (& ecs.CreateDiskResponse {
417434 DiskId : "d-123" ,
418435 }, nil )
419436
420437 args := & diskVolumeArgs {Type : []Category {DiskESSD , DiskESSDAuto }, RequestGB : 20 }
421- diskID , attempt , err := createDisk (client , "disk-name" , "" , args , nil , "" , false )
438+ diskID , attempt , err := cd . createDisk (ctx , client , "disk-name" , "" , args , nil , "" , false )
422439 assert .NoError (t , err )
423440 assert .Equal (t , "d-123" , diskID )
424441 assert .Equal (t , DiskESSDAuto , attempt .Category )
@@ -456,8 +473,8 @@ func TestCreateDisk_ParameterMismatch(t *testing.T) {
456473 }
457474 for _ , c := range cases {
458475 t .Run (c .name , func (t * testing.T ) {
459- ctrl := gomock . NewController (t )
460- client := cloud . NewMockECSInterface ( ctrl )
476+ client , cd := testCreateDelete (t )
477+ _ , ctx := ktesting . NewTestContext ( t )
461478
462479 r1 := client .EXPECT ().CreateDisk (gomock .Any ()).Return (nil , alicloudErr .NewServerError (400 , `{"Code": "IdempotentParameterMismatch"}` , "" ))
463480 r2 := client .EXPECT ().DescribeDisks (gomock .Any ()).Return (& ecs.DescribeDisksResponse {
@@ -472,7 +489,7 @@ func TestCreateDisk_ParameterMismatch(t *testing.T) {
472489 }
473490
474491 args := & diskVolumeArgs {Type : []Category {DiskESSD , DiskESSDAuto }, RequestGB : 20 }
475- diskID , attempt , err := createDisk (client , "disk-name" , "" , args , nil , "" , false )
492+ diskID , attempt , err := cd . createDisk (ctx , client , "disk-name" , "" , args , nil , "" , false )
476493 if c .err {
477494 assert .Error (t , err )
478495 } else {
@@ -492,8 +509,8 @@ func TestCreateDisk_ParameterMismatch(t *testing.T) {
492509}
493510
494511func TestCreateDisk_NoInfiniteLoop (t * testing.T ) {
495- ctrl := gomock . NewController (t )
496- client := cloud . NewMockECSInterface ( ctrl )
512+ client , cd := testCreateDelete (t )
513+ _ , ctx := ktesting . NewTestContext ( t )
497514
498515 client .EXPECT ().CreateDisk (gomock .Any ()).Return (nil , alicloudErr .NewServerError (400 , `{"Code": "IdempotentParameterMismatch"}` , "" )).Times (2 )
499516 client .EXPECT ().DescribeDisks (gomock .Any ()).Return (& ecs.DescribeDisksResponse {
@@ -503,7 +520,7 @@ func TestCreateDisk_NoInfiniteLoop(t *testing.T) {
503520 }, nil )
504521
505522 args := & diskVolumeArgs {Type : []Category {DiskESSD }, RequestGB : 20 }
506- _ , _ , err := createDisk (client , "disk-name" , "" , args , nil , "" , false )
523+ _ , _ , err := cd . createDisk (ctx , client , "disk-name" , "" , args , nil , "" , false )
507524 assert .Error (t , err )
508525}
509526
0 commit comments