@@ -1004,97 +1004,200 @@ func TestCreateVolumeWithVolumeSourceFromVolume(t *testing.T) {
1004
1004
testSourceVolumeName := "test-volume-source-name"
1005
1005
testZonalVolumeSourceID := fmt .Sprintf ("projects/%s/zones/%s/disks/%s" , project , zone , testSourceVolumeName )
1006
1006
testRegionalVolumeSourceID := fmt .Sprintf ("projects/%s/regions/%s/disks/%s" , project , region , testSourceVolumeName )
1007
- testVolumeSourceIDDifferentZone := fmt .Sprintf ("projects/%s/zones/%s/disks/%s" , project , "different-zone" , testSourceVolumeName )
1007
+ testSecondZonalVolumeSourceID := fmt .Sprintf ("projects/%s/zones/%s/disks/%s" , project , "different-zone1" , testSourceVolumeName )
1008
+ zonalParams := map [string ]string {
1009
+ common .ParameterKeyType : "test-type" , common .ParameterKeyReplicationType : replicationTypeNone ,
1010
+ common .ParameterKeyDiskEncryptionKmsKey : "encryption-key" ,
1011
+ }
1012
+ regionalParams := map [string ]string {
1013
+ common .ParameterKeyType : "test-type" , common .ParameterKeyReplicationType : replicationTypeRegionalPD ,
1014
+ common .ParameterKeyDiskEncryptionKmsKey : "encryption-key" ,
1015
+ }
1008
1016
topology := & csi.TopologyRequirement {
1009
1017
Requisite : []* csi.Topology {
1010
1018
{
1011
- Segments : map [string ]string {common .TopologyKeyZone : region + "-b" },
1019
+ Segments : map [string ]string {common .TopologyKeyZone : zone },
1012
1020
},
1013
1021
{
1014
- Segments : map [string ]string {common .TopologyKeyZone : region + "-c" },
1022
+ Segments : map [string ]string {common .TopologyKeyZone : secondZone },
1015
1023
},
1016
1024
},
1017
1025
}
1018
- regionalParams := map [string ]string {
1019
- common .ParameterKeyType : "test-type" , common .ParameterKeyReplicationType : "regional-pd" ,
1020
- }
1026
+
1021
1027
// Define test cases
1022
1028
testCases := []struct {
1023
- name string
1024
- volumeOnCloud bool
1025
- expErrCode codes.Code
1026
- sourceVolumeID string
1027
- reqParameters map [string ]string
1028
- sourceReqParameters map [string ]string
1029
- topology * csi.TopologyRequirement
1029
+ name string
1030
+ volumeOnCloud bool
1031
+ expErrCode codes.Code
1032
+ sourceVolumeID string
1033
+ reqParameters map [string ]string
1034
+ sourceReqParameters map [string ]string
1035
+ sourceCapacityRange * csi.CapacityRange
1036
+ requestCapacityRange * csi.CapacityRange
1037
+ sourceTopology * csi.TopologyRequirement
1038
+ requestTopology * csi.TopologyRequirement
1030
1039
}{
1031
1040
{
1032
- name : "success with data source of zonal volume type" ,
1033
- volumeOnCloud : true ,
1034
- sourceVolumeID : testZonalVolumeSourceID ,
1035
- reqParameters : stdParams ,
1036
- sourceReqParameters : stdParams ,
1037
- },
1038
- {
1039
- name : "success with data source of regional volume type" ,
1040
- volumeOnCloud : true ,
1041
- sourceVolumeID : testRegionalVolumeSourceID ,
1042
- reqParameters : regionalParams ,
1043
- sourceReqParameters : regionalParams ,
1044
- topology : topology ,
1045
- },
1046
- {
1047
- name : "fail with with data source of replication-type different from CreateVolumeRequest" ,
1048
- volumeOnCloud : true ,
1049
- expErrCode : codes .InvalidArgument ,
1050
- sourceVolumeID : testZonalVolumeSourceID ,
1051
- reqParameters : stdParams ,
1052
- sourceReqParameters : regionalParams ,
1053
- topology : topology ,
1054
- },
1055
- {
1056
- name : "fail with data source of zonal volume type that doesn't exist" ,
1057
- volumeOnCloud : false ,
1058
- expErrCode : codes .NotFound ,
1059
- sourceVolumeID : testZonalVolumeSourceID ,
1060
- reqParameters : stdParams ,
1061
- sourceReqParameters : stdParams ,
1062
- },
1063
- {
1064
- name : "fail with data source of zonal volume type with invalid volume id format" ,
1065
- volumeOnCloud : false ,
1066
- expErrCode : codes .InvalidArgument ,
1067
- sourceVolumeID : testZonalVolumeSourceID + "invalid/format" ,
1068
- reqParameters : stdParams ,
1069
- sourceReqParameters : stdParams ,
1041
+ name : "success zonal disk clone of zonal source disk" ,
1042
+ volumeOnCloud : true ,
1043
+ sourceVolumeID : testZonalVolumeSourceID ,
1044
+ requestCapacityRange : stdCapRange ,
1045
+ sourceCapacityRange : stdCapRange ,
1046
+ reqParameters : zonalParams ,
1047
+ sourceReqParameters : zonalParams ,
1048
+ sourceTopology : topology ,
1049
+ requestTopology : topology ,
1050
+ },
1051
+ {
1052
+ name : "success regional disk clone of regional source disk" ,
1053
+ volumeOnCloud : true ,
1054
+ sourceVolumeID : testRegionalVolumeSourceID ,
1055
+ requestCapacityRange : stdCapRange ,
1056
+ sourceCapacityRange : stdCapRange ,
1057
+ reqParameters : regionalParams ,
1058
+ sourceReqParameters : regionalParams ,
1059
+ sourceTopology : topology ,
1060
+ requestTopology : topology ,
1061
+ },
1062
+ {
1063
+ name : "success regional disk clone of zonal data source" ,
1064
+ volumeOnCloud : true ,
1065
+ sourceVolumeID : testZonalVolumeSourceID ,
1066
+ requestCapacityRange : stdCapRange ,
1067
+ sourceCapacityRange : stdCapRange ,
1068
+ reqParameters : regionalParams ,
1069
+ sourceReqParameters : zonalParams ,
1070
+ sourceTopology : topology ,
1071
+ requestTopology : topology ,
1072
+ },
1073
+ {
1074
+ name : "fail regional disk clone with no matching replica zone of zonal data source" ,
1075
+ volumeOnCloud : true ,
1076
+ expErrCode : codes .InvalidArgument ,
1077
+ sourceVolumeID : testZonalVolumeSourceID ,
1078
+ requestCapacityRange : stdCapRange ,
1079
+ sourceCapacityRange : stdCapRange ,
1080
+ reqParameters : regionalParams ,
1081
+ sourceReqParameters : zonalParams ,
1082
+ sourceTopology : topology ,
1083
+ requestTopology : & csi.TopologyRequirement {
1084
+ Requisite : []* csi.Topology {
1085
+ {
1086
+ Segments : map [string ]string {common .TopologyKeyZone : "different-zone1" },
1087
+ },
1088
+ {
1089
+ Segments : map [string ]string {common .TopologyKeyZone : "different-zone2" },
1090
+ },
1091
+ },
1092
+ },
1070
1093
},
1071
1094
{
1072
- name : "fail with data source of zonal volume type with invalid disk parameters" ,
1073
- volumeOnCloud : true ,
1074
- expErrCode : codes .InvalidArgument ,
1075
- sourceVolumeID : testVolumeSourceIDDifferentZone ,
1076
- reqParameters : stdParams ,
1095
+ name : "fail zonal disk clone with different disk type" ,
1096
+ volumeOnCloud : true ,
1097
+ expErrCode : codes .InvalidArgument ,
1098
+ sourceVolumeID : testZonalVolumeSourceID ,
1099
+ requestCapacityRange : stdCapRange ,
1100
+ sourceCapacityRange : stdCapRange ,
1101
+ reqParameters : zonalParams ,
1077
1102
sourceReqParameters : map [string ]string {
1078
1103
common .ParameterKeyType : "different-type" ,
1079
1104
},
1105
+ sourceTopology : topology ,
1106
+ requestTopology : topology ,
1080
1107
},
1081
1108
{
1082
- name : "fail with data source of zonal volume type with invalid replication type" ,
1083
- volumeOnCloud : true ,
1084
- expErrCode : codes .InvalidArgument ,
1085
- sourceVolumeID : testZonalVolumeSourceID ,
1086
- reqParameters : regionalParams ,
1087
- sourceReqParameters : stdParams ,
1088
- },
1089
- }
1109
+ name : "fail zonal disk clone with different DiskEncryptionKMSKey" ,
1110
+ volumeOnCloud : true ,
1111
+ expErrCode : codes .InvalidArgument ,
1112
+ sourceVolumeID : testZonalVolumeSourceID ,
1113
+ requestCapacityRange : stdCapRange ,
1114
+ sourceCapacityRange : stdCapRange ,
1115
+ reqParameters : zonalParams ,
1116
+ sourceReqParameters : map [string ]string {
1117
+ common .ParameterKeyType : "test-type" , common .ParameterKeyReplicationType : replicationTypeNone ,
1118
+ common .ParameterKeyDiskEncryptionKmsKey : "different-encryption-key" ,
1119
+ },
1120
+ sourceTopology : topology ,
1121
+ requestTopology : topology ,
1122
+ },
1123
+ {
1124
+ name : "fail zonal disk clone with different zone" ,
1125
+ volumeOnCloud : true ,
1126
+ expErrCode : codes .InvalidArgument ,
1127
+ sourceVolumeID : testSecondZonalVolumeSourceID ,
1128
+ requestCapacityRange : stdCapRange ,
1129
+ sourceCapacityRange : stdCapRange ,
1130
+ reqParameters : zonalParams ,
1131
+ sourceReqParameters : zonalParams ,
1132
+ sourceTopology : & csi.TopologyRequirement {
1133
+ Requisite : []* csi.Topology {
1134
+ {
1135
+ Segments : map [string ]string {common .TopologyKeyZone : "different-zone1" },
1136
+ },
1137
+ {
1138
+ Segments : map [string ]string {common .TopologyKeyZone : "different-zone2" },
1139
+ },
1140
+ },
1141
+ },
1142
+ requestTopology : topology ,
1143
+ },
1144
+ {
1145
+ name : "fail zonal disk clone of regional data source" ,
1146
+ volumeOnCloud : true ,
1147
+ expErrCode : codes .InvalidArgument ,
1148
+ sourceVolumeID : testRegionalVolumeSourceID ,
1149
+ requestCapacityRange : stdCapRange ,
1150
+ sourceCapacityRange : stdCapRange ,
1151
+ reqParameters : zonalParams ,
1152
+ sourceReqParameters : regionalParams ,
1153
+ sourceTopology : topology ,
1154
+ requestTopology : topology ,
1155
+ },
1156
+
1157
+ {
1158
+ name : "fail zonal source disk does not exist" ,
1159
+ volumeOnCloud : false ,
1160
+ expErrCode : codes .NotFound ,
1161
+ sourceVolumeID : testZonalVolumeSourceID ,
1162
+ requestCapacityRange : stdCapRange ,
1163
+ sourceCapacityRange : stdCapRange ,
1164
+ reqParameters : stdParams ,
1165
+ sourceReqParameters : stdParams ,
1166
+ requestTopology : topology ,
1167
+ },
1168
+ {
1169
+ name : "fail invalid source disk volume id format" ,
1170
+ volumeOnCloud : false ,
1171
+ expErrCode : codes .InvalidArgument ,
1172
+ sourceVolumeID : testZonalVolumeSourceID + "/invalid/format" ,
1173
+ requestCapacityRange : stdCapRange ,
1174
+ sourceCapacityRange : stdCapRange ,
1175
+ reqParameters : stdParams ,
1176
+ sourceReqParameters : stdParams ,
1177
+ requestTopology : topology ,
1178
+ },
1179
+ {
1180
+ name : "fail zonal disk clone with smaller disk capacity" ,
1181
+ volumeOnCloud : true ,
1182
+ expErrCode : codes .InvalidArgument ,
1183
+ sourceVolumeID : testZonalVolumeSourceID ,
1184
+ requestCapacityRange : stdCapRange ,
1185
+ sourceCapacityRange : & csi.CapacityRange {
1186
+ RequiredBytes : common .GbToBytes (40 ),
1187
+ },
1188
+ reqParameters : zonalParams ,
1189
+ sourceReqParameters : zonalParams ,
1190
+ sourceTopology : topology ,
1191
+ requestTopology : topology ,
1192
+ }}
1090
1193
1091
1194
for _ , tc := range testCases {
1092
1195
t .Logf ("test case: %s" , tc .name )
1093
1196
gceDriver := initGCEDriver (t , nil )
1094
1197
1095
1198
req := & csi.CreateVolumeRequest {
1096
1199
Name : name ,
1097
- CapacityRange : stdCapRange ,
1200
+ CapacityRange : tc . requestCapacityRange ,
1098
1201
VolumeCapabilities : stdVolCaps ,
1099
1202
Parameters : tc .reqParameters ,
1100
1203
VolumeContentSource : & csi.VolumeContentSource {
@@ -1104,18 +1207,15 @@ func TestCreateVolumeWithVolumeSourceFromVolume(t *testing.T) {
1104
1207
},
1105
1208
},
1106
1209
},
1210
+ AccessibilityRequirements : tc .requestTopology ,
1107
1211
}
1108
1212
1109
1213
sourceVolumeRequest := & csi.CreateVolumeRequest {
1110
- Name : testSourceVolumeName ,
1111
- CapacityRange : stdCapRange ,
1112
- VolumeCapabilities : stdVolCaps ,
1113
- Parameters : tc .sourceReqParameters ,
1114
- }
1115
-
1116
- if tc .topology != nil {
1117
- // req.AccessibilityRequirements = tc.topology
1118
- sourceVolumeRequest .AccessibilityRequirements = tc .topology
1214
+ Name : testSourceVolumeName ,
1215
+ CapacityRange : tc .sourceCapacityRange ,
1216
+ VolumeCapabilities : stdVolCaps ,
1217
+ Parameters : tc .sourceReqParameters ,
1218
+ AccessibilityRequirements : tc .sourceTopology ,
1119
1219
}
1120
1220
1121
1221
if tc .volumeOnCloud {
@@ -1148,7 +1248,6 @@ func TestCreateVolumeWithVolumeSourceFromVolume(t *testing.T) {
1148
1248
1149
1249
// Make sure the response has the source volume.
1150
1250
sourceVolume := resp .GetVolume ()
1151
- t .Logf ("response has source volume: %v " , sourceVolume )
1152
1251
if sourceVolume .ContentSource == nil || sourceVolume .ContentSource .Type == nil ||
1153
1252
sourceVolume .ContentSource .GetVolume () == nil || sourceVolume .ContentSource .GetVolume ().VolumeId == "" {
1154
1253
t .Fatalf ("Expected volume content source to have volume ID, got none" )
0 commit comments