@@ -15,6 +15,7 @@ limitations under the License.
15
15
package gceGCEDriver
16
16
17
17
import (
18
+ "context"
18
19
"fmt"
19
20
"math/rand"
20
21
"reflect"
@@ -25,8 +26,6 @@ import (
25
26
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
26
27
"github.com/golang/protobuf/ptypes"
27
28
28
- "context"
29
-
30
29
compute "google.golang.org/api/compute/v1"
31
30
"google.golang.org/grpc/codes"
32
31
"google.golang.org/grpc/status"
@@ -840,8 +839,80 @@ func TestCreateVolumeArguments(t *testing.T) {
840
839
}
841
840
}
842
841
842
+ func TestListVolumePagination (t * testing.T ) {
843
+ testCases := []struct {
844
+ name string
845
+ diskCount int
846
+ maxEntries int32
847
+ expectedEntries []int
848
+ expectedErr bool
849
+ }{
850
+ {
851
+ name : "no pagination (implicit)" ,
852
+ diskCount : 325 ,
853
+ expectedEntries : []int {325 },
854
+ },
855
+ {
856
+ name : "no pagination (explicit)" ,
857
+ diskCount : 2500 ,
858
+ maxEntries : 2500 ,
859
+ expectedEntries : []int {2500 },
860
+ },
861
+ {
862
+ name : "pagination (implicit)" ,
863
+ diskCount : 1327 ,
864
+ expectedEntries : []int {500 , 500 , 327 },
865
+ },
866
+ {
867
+ name : "pagination (explicit)" ,
868
+ diskCount : 723 ,
869
+ maxEntries : 200 ,
870
+ expectedEntries : []int {200 , 200 , 200 , 123 },
871
+ },
872
+ {
873
+ name : "pagination (explicit)" ,
874
+ diskCount : 3253 ,
875
+ maxEntries : 1000 ,
876
+ expectedEntries : []int {1000 , 1000 , 1000 , 253 },
877
+ },
878
+ }
879
+
880
+ for _ , tc := range testCases {
881
+ t .Run (tc .name , func (t * testing.T ) {
882
+ // Setup new driver each time so no interference
883
+ var d []* gce.CloudDisk
884
+ for i := 0 ; i < tc .diskCount ; i ++ {
885
+ // Create diskCount dummy disks
886
+ d = append (d , gce .CloudDiskFromV1 (& compute.Disk {Name : fmt .Sprintf ("%v" , i )}))
887
+ }
888
+ gceDriver := initGCEDriver (t , d )
889
+ tok := ""
890
+ for i , expectedEntry := range tc .expectedEntries {
891
+ lvr := & csi.ListVolumesRequest {
892
+ MaxEntries : tc .maxEntries ,
893
+ StartingToken : tok ,
894
+ }
895
+ resp , err := gceDriver .cs .ListVolumes (context .TODO (), lvr )
896
+ if err != nil {
897
+ t .Fatalf ("Got error %v" , err )
898
+ return
899
+ }
900
+
901
+ if len (resp .Entries ) != expectedEntry {
902
+ t .Fatalf ("Got %v entries, expected %v on call # %d" , len (resp .Entries ), expectedEntry , i + 1 )
903
+ }
904
+
905
+ tok = resp .NextToken
906
+ }
907
+ if len (tok ) != 0 {
908
+ t .Fatalf ("Expected no more entries and. Got next token: %s" , tok )
909
+ }
910
+ })
911
+ }
912
+ }
913
+
843
914
func TestListVolumeArgs (t * testing.T ) {
844
- diskCount := 600
915
+ diskCount := 500
845
916
testCases := []struct {
846
917
name string
847
918
maxEntries int32
0 commit comments