@@ -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,79 @@ 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
+ }{
849
+ {
850
+ name : "no pagination (implicit)" ,
851
+ diskCount : 325 ,
852
+ expectedEntries : []int {325 },
853
+ },
854
+ {
855
+ name : "no pagination (explicit)" ,
856
+ diskCount : 2500 ,
857
+ maxEntries : 2500 ,
858
+ expectedEntries : []int {2500 },
859
+ },
860
+ {
861
+ name : "pagination (implicit)" ,
862
+ diskCount : 1327 ,
863
+ expectedEntries : []int {500 , 500 , 327 },
864
+ },
865
+ {
866
+ name : "pagination (explicit)" ,
867
+ diskCount : 723 ,
868
+ maxEntries : 200 ,
869
+ expectedEntries : []int {200 , 200 , 200 , 123 },
870
+ },
871
+ {
872
+ name : "pagination (explicit)" ,
873
+ diskCount : 3253 ,
874
+ maxEntries : 1000 ,
875
+ expectedEntries : []int {1000 , 1000 , 1000 , 253 },
876
+ },
877
+ }
878
+
879
+ for _ , tc := range testCases {
880
+ t .Run (tc .name , func (t * testing.T ) {
881
+ // Setup new driver each time so no interference
882
+ var d []* gce.CloudDisk
883
+ for i := 0 ; i < tc .diskCount ; i ++ {
884
+ // Create diskCount dummy disks
885
+ d = append (d , gce .CloudDiskFromV1 (& compute.Disk {Name : fmt .Sprintf ("%v" , i )}))
886
+ }
887
+ gceDriver := initGCEDriver (t , d )
888
+ tok := ""
889
+ for i , expectedEntry := range tc .expectedEntries {
890
+ lvr := & csi.ListVolumesRequest {
891
+ MaxEntries : tc .maxEntries ,
892
+ StartingToken : tok ,
893
+ }
894
+ resp , err := gceDriver .cs .ListVolumes (context .TODO (), lvr )
895
+ if err != nil {
896
+ t .Fatalf ("Got error %v" , err )
897
+ return
898
+ }
899
+
900
+ if len (resp .Entries ) != expectedEntry {
901
+ t .Fatalf ("Got %v entries, expected %v on call # %d" , len (resp .Entries ), expectedEntry , i + 1 )
902
+ }
903
+
904
+ tok = resp .NextToken
905
+ }
906
+ if len (tok ) != 0 {
907
+ t .Fatalf ("Expected no more entries, but got NextToken in response: %s" , tok )
908
+ }
909
+ })
910
+ }
911
+ }
912
+
843
913
func TestListVolumeArgs (t * testing.T ) {
844
- diskCount := 600
914
+ diskCount := 500
845
915
testCases := []struct {
846
916
name string
847
917
maxEntries int32
0 commit comments