Skip to content

Commit

Permalink
Fix for #818 - Added support for quoted values
Browse files Browse the repository at this point in the history
  • Loading branch information
narayanan committed Mar 2, 2019
1 parent 16d1b20 commit ea3d5e6
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 5 deletions.
21 changes: 18 additions & 3 deletions pkg/commands/edit/add/addmetadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,28 @@ func (o *addMetadataOptions) convertToMap(arg string) (map[string]string, error)
return nil, o.makeError(input, "empty key")
}
if len(kv) > 2 {
return nil, o.makeError(input, "too many colons")
}
if len(kv) > 1 {
// more than one colon found
// check if value is quoted
qc := strings.Index(input, ":\"")
if qc >= 1 && input[len(input)-1:] == "\"" {
//value is quoted
result[kv[0]] = input[qc+1:]
} else {
// value is not quoted, return error
return nil, o.makeError(input, "too many colons, quote the values")
}
} else if len(kv) == 2 {
result[kv[0]] = kv[1]
} else {
result[kv[0]] = ""
}

// remove quotes if value is quoted
if len(result[kv[0]]) > 0 &&
result[kv[0]][:1] == "\"" &&
result[kv[0]][len(result[kv[0]])-1:] == "\"" {
result[kv[0]] = result[kv[0]][1 : len(result[kv[0]])-1]
}
}
return result, nil
}
Expand Down
63 changes: 61 additions & 2 deletions pkg/commands/edit/add/addmetadata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package add

import (
"reflect"
"testing"

"sigs.k8s.io/kustomize/pkg/commands/kustfile"
Expand Down Expand Up @@ -103,6 +104,32 @@ func TestAddAnnotationManyArgs(t *testing.T) {
}
}

func TestAddAnnotationValueQuoted(t *testing.T) {
fakeFS := fs.MakeFakeFS()
fakeFS.WriteTestKustomization()
v := validators.MakeHappyMapValidator(t)
cmd := newCmdAddAnnotation(fakeFS, v.Validator)
args := []string{"k1:\"v1\""}
err := cmd.RunE(cmd, args)
v.VerifyCall()
if err != nil {
t.Errorf("unexpected error: %v", err.Error())
}
}

func TestAddAnnotationValueWithColon(t *testing.T) {
fakeFS := fs.MakeFakeFS()
fakeFS.WriteTestKustomization()
v := validators.MakeHappyMapValidator(t)
cmd := newCmdAddAnnotation(fakeFS, v.Validator)
args := []string{"k1:\"v1:v2\""}
err := cmd.RunE(cmd, args)
v.VerifyCall()
if err != nil {
t.Errorf("unexpected error: %v", err.Error())
}
}

func TestAddAnnotationNoKey(t *testing.T) {
fakeFS := fs.MakeFakeFS()
v := validators.MakeHappyMapValidator(t)
Expand All @@ -128,7 +155,7 @@ func TestAddAnnotationTooManyColons(t *testing.T) {
if err == nil {
t.Errorf("expected an error")
}
if err.Error() != "invalid annotation: key:v1:v2 (too many colons)" {
if err.Error() != "invalid annotation: key:v1:v2 (too many colons, quote the values)" {
t.Errorf("incorrect error: %v", err.Error())
}
}
Expand Down Expand Up @@ -238,7 +265,7 @@ func TestAddLabelTooManyColons(t *testing.T) {
if err == nil {
t.Errorf("expected an error")
}
if err.Error() != "invalid label: key:v1:v2 (too many colons)" {
if err.Error() != "invalid label: key:v1:v2 (too many colons, quote the values)" {
t.Errorf("incorrect error: %v", err.Error())
}
}
Expand Down Expand Up @@ -271,3 +298,35 @@ func TestAddLabelMultipleArgs(t *testing.T) {
t.Errorf("incorrect error: %v", err.Error())
}
}

func TestConvertToMap(t *testing.T) {
var o addMetadataOptions
args := "a:b,c:\"d\",e:\"f:g\""
expected := make(map[string]string)
expected["a"] = "b"
expected["c"] = "d"
expected["e"] = "f:g"

result, err := o.convertToMap(args)
if err != nil {
t.Errorf("unexpected error: %v", err.Error())
}

eq := reflect.DeepEqual(expected, result)
if !eq {
t.Errorf("Converted map does not match expected, expected: %v, result: %v\n", expected, result)
}
}

func TestConvertToMapError(t *testing.T) {
var o addMetadataOptions
args := "a:b,c:\"d\",e:f:g"

_, err := o.convertToMap(args)
if err == nil {
t.Errorf("expected an error")
}
if err.Error() != "invalid annotation: e:f:g (too many colons, quote the values)" {
t.Errorf("incorrect error: %v", err.Error())
}
}

0 comments on commit ea3d5e6

Please sign in to comment.