Skip to content

Commit 3c4b654

Browse files
committed
chore: combine case insensitive key/value setting in parameters
fix
1 parent 2832df4 commit 3c4b654

File tree

4 files changed

+74
-5
lines changed

4 files changed

+74
-5
lines changed

pkg/blob/blob.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -803,3 +803,18 @@ func createStorageAccountSecret(account, key string) map[string]string {
803803
secret[defaultSecretAccountKey] = key
804804
return secret
805805
}
806+
807+
// setKeyValueInMap set key/value pair in map
808+
// key in the map is case insensitive, if key already exists, overwrite existing value
809+
func setKeyValueInMap(m map[string]string, key, value string) {
810+
if m == nil {
811+
return
812+
}
813+
for k := range m {
814+
if strings.EqualFold(k, key) {
815+
m[k] = value
816+
return
817+
}
818+
}
819+
m[key] = value
820+
}

pkg/blob/blob_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,3 +950,57 @@ func TestCreateStorageAccountSecret(t *testing.T) {
950950
t.Errorf("Expected account name(%s), Actual account name(%s); Expected account key(%s), Actual account key(%s)", "TestAccountName", result[defaultSecretAccountName], "TestAccountKey", result[defaultSecretAccountKey])
951951
}
952952
}
953+
954+
func TestSetKeyValueInMap(t *testing.T) {
955+
tests := []struct {
956+
desc string
957+
m map[string]string
958+
key string
959+
value string
960+
expected map[string]string
961+
}{
962+
{
963+
desc: "nil map",
964+
key: "key",
965+
value: "value",
966+
},
967+
{
968+
desc: "empty map",
969+
m: map[string]string{},
970+
key: "key",
971+
value: "value",
972+
expected: map[string]string{"key": "value"},
973+
},
974+
{
975+
desc: "non-empty map",
976+
m: map[string]string{"k": "v"},
977+
key: "key",
978+
value: "value",
979+
expected: map[string]string{
980+
"k": "v",
981+
"key": "value",
982+
},
983+
},
984+
{
985+
desc: "same key already exists",
986+
m: map[string]string{"subDir": "value2"},
987+
key: "subDir",
988+
value: "value",
989+
expected: map[string]string{"subDir": "value"},
990+
},
991+
{
992+
desc: "case insentive key already exists",
993+
m: map[string]string{"subDir": "value2"},
994+
key: "subdir",
995+
value: "value",
996+
expected: map[string]string{"subDir": "value"},
997+
},
998+
}
999+
1000+
for _, test := range tests {
1001+
setKeyValueInMap(test.m, test.key, test.value)
1002+
if !reflect.DeepEqual(test.m, test.expected) {
1003+
t.Errorf("test[%s]: unexpected output: %v, expected result: %v", test.desc, test.m, test.expected)
1004+
}
1005+
}
1006+
}

pkg/blob/controllerserver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
296296
validContainerName = containerNamePrefix + "-" + volName
297297
}
298298
validContainerName = getValidContainerName(validContainerName, protocol)
299-
parameters[containerNameField] = validContainerName
299+
setKeyValueInMap(parameters, containerNameField, validContainerName)
300300
}
301301

302302
var volumeID string
@@ -343,7 +343,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
343343

344344
isOperationSucceeded = true
345345
// reset secretNamespace field in VolumeContext
346-
parameters[secretNamespaceField] = secretNamespace
346+
setKeyValueInMap(parameters, secretNamespaceField, secretNamespace)
347347
return &csi.CreateVolumeResponse{
348348
Volume: &csi.Volume{
349349
VolumeId: volumeID,

pkg/blob/nodeserver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ func (d *Driver) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolu
7676
context := req.GetVolumeContext()
7777
if context != nil {
7878
if strings.EqualFold(context[ephemeralField], trueValue) {
79-
context[secretNamespaceField] = context[podNamespaceField]
79+
setKeyValueInMap(context, secretNamespaceField, context[podNamespaceField])
8080
if !d.allowInlineVolumeKeyAccessWithIdentity {
8181
// only get storage account from secret
82-
context[getAccountKeyFromSecretField] = trueValue
83-
context[storageAccountField] = ""
82+
setKeyValueInMap(context, getAccountKeyFromSecretField, trueValue)
83+
setKeyValueInMap(context, storageAccountField, "")
8484
}
8585
klog.V(2).Infof("NodePublishVolume: ephemeral volume(%s) mount on %s, VolumeContext: %v", volumeID, target, context)
8686
_, err := d.NodeStageVolume(ctx, &csi.NodeStageVolumeRequest{

0 commit comments

Comments
 (0)