mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 09:24:23 +00:00
Due to moving some input parsing to the Validate method, it was renamed to reflect this additional purpose. Tests were removed where appropriate.
191 lines
5.3 KiB
Go
191 lines
5.3 KiB
Go
/*
|
|
Copyright 2018 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package commands
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/kubernetes-sigs/kustomize/pkg/constants"
|
|
"github.com/kubernetes-sigs/kustomize/pkg/fs"
|
|
)
|
|
|
|
func TestParseValidateInput(t *testing.T) {
|
|
var testcases = []struct {
|
|
input string
|
|
valid bool
|
|
name string
|
|
expectedData map[string]string
|
|
kind KindOfAdd
|
|
}{
|
|
{
|
|
input: "otters:cute",
|
|
valid: true,
|
|
name: "Adds single input",
|
|
expectedData: map[string]string{
|
|
"otters": "cute",
|
|
},
|
|
kind: label,
|
|
},
|
|
{
|
|
input: "owls:great,unicorns:magical",
|
|
valid: true,
|
|
name: "Adds two items",
|
|
expectedData: map[string]string{
|
|
"owls": "great",
|
|
"unicorns": "magical",
|
|
},
|
|
kind: label,
|
|
},
|
|
{
|
|
input: "123:45",
|
|
valid: true,
|
|
name: "Numeric input is allowed",
|
|
expectedData: map[string]string{
|
|
"123": "45",
|
|
},
|
|
kind: annotation,
|
|
},
|
|
{
|
|
input: " ",
|
|
valid: false,
|
|
name: "Empty space input",
|
|
expectedData: nil,
|
|
kind: annotation,
|
|
},
|
|
}
|
|
var o addMetadataOptions
|
|
for _, tc := range testcases {
|
|
args := []string{tc.input}
|
|
err := o.ValidateAndParse(args, tc.kind)
|
|
if err != nil && tc.valid {
|
|
t.Errorf("for test case %s, unexpected cmd error: %v", tc.name, err)
|
|
}
|
|
if err == nil && !tc.valid {
|
|
t.Errorf("unexpected error: expected invalid format error for test case %v", tc.name)
|
|
}
|
|
//o.metadata should be the same as expectedData
|
|
if tc.valid {
|
|
if !reflect.DeepEqual(o.metadata, tc.expectedData) {
|
|
t.Errorf("unexpected error: for test case %s, unexpected data was added", tc.name)
|
|
}
|
|
} else {
|
|
if len(o.metadata) != 0 {
|
|
t.Errorf("unexpected error: for test case %s, expected no data to be added", tc.name)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRunAddAnnotation(t *testing.T) {
|
|
fakeFS := fs.MakeFakeFS()
|
|
fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent))
|
|
var o addMetadataOptions
|
|
o.metadata = map[string]string{"owls": "cute", "otters": "adorable"}
|
|
|
|
err := o.RunAddAnnotation(fakeFS, annotation)
|
|
if err != nil {
|
|
t.Errorf("unexpected error: could not write to kustomization file")
|
|
}
|
|
// adding the same test input should not work
|
|
err = o.RunAddAnnotation(fakeFS, annotation)
|
|
if err == nil {
|
|
t.Errorf("expected already in kustomization file error")
|
|
}
|
|
// adding new annotations should work
|
|
o.metadata = map[string]string{"new": "annotation"}
|
|
err = o.RunAddAnnotation(fakeFS, annotation)
|
|
if err != nil {
|
|
t.Errorf("unexpected error: could not write to kustomization file")
|
|
}
|
|
}
|
|
|
|
func TestAddAnnotationNoArgs(t *testing.T) {
|
|
fakeFS := fs.MakeFakeFS()
|
|
cmd := newCmdAddAnnotation(fakeFS)
|
|
err := cmd.Execute()
|
|
if err == nil {
|
|
t.Errorf("expected an error but error is %v", err)
|
|
}
|
|
if err != nil && err.Error() != "must specify annotation" {
|
|
t.Errorf("incorrect error: %v", err.Error())
|
|
}
|
|
}
|
|
func TestAddAnnotationMultipleArgs(t *testing.T) {
|
|
fakeFS := fs.MakeFakeFS()
|
|
fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent))
|
|
cmd := newCmdAddAnnotation(fakeFS)
|
|
args := []string{"this:annotation", "has:spaces"}
|
|
err := cmd.RunE(cmd, args)
|
|
if err == nil {
|
|
t.Errorf("expected an error but error is %v", err)
|
|
}
|
|
if err != nil && err.Error() != "annotations must be comma-separated, with no spaces. See help text for example" {
|
|
t.Errorf("incorrect error: %v", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestRunAddLabel(t *testing.T) {
|
|
fakeFS := fs.MakeFakeFS()
|
|
fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent))
|
|
var o addMetadataOptions
|
|
o.metadata = map[string]string{"owls": "cute", "otters": "adorable"}
|
|
|
|
err := o.RunAddLabel(fakeFS, label)
|
|
if err != nil {
|
|
t.Errorf("unexpected error: could not write to kustomization file")
|
|
}
|
|
// adding the same test input should not work
|
|
err = o.RunAddLabel(fakeFS, label)
|
|
if err == nil {
|
|
t.Errorf("expected already in kustomization file error")
|
|
}
|
|
// adding new labels should work
|
|
o.metadata = map[string]string{"new": "label"}
|
|
err = o.RunAddLabel(fakeFS, label)
|
|
if err != nil {
|
|
t.Errorf("unexpected error: could not write to kustomization file")
|
|
}
|
|
}
|
|
|
|
func TestAddLabelNoArgs(t *testing.T) {
|
|
fakeFS := fs.MakeFakeFS()
|
|
|
|
cmd := newCmdAddLabel(fakeFS)
|
|
err := cmd.Execute()
|
|
if err == nil {
|
|
t.Errorf("expected an error but error is: %v", err)
|
|
}
|
|
if err != nil && err.Error() != "must specify label" {
|
|
t.Errorf("incorrect error: %v", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestAddLabelMultipleArgs(t *testing.T) {
|
|
fakeFS := fs.MakeFakeFS()
|
|
fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent))
|
|
cmd := newCmdAddLabel(fakeFS)
|
|
args := []string{"this:input", "has:spaces"}
|
|
err := cmd.RunE(cmd, args)
|
|
if err == nil {
|
|
t.Errorf("expected an error but error is: %v", err)
|
|
}
|
|
if err != nil && err.Error() != "labels must be comma-separated, with no spaces. See help text for example" {
|
|
t.Errorf("incorrect error: %v", err.Error())
|
|
}
|
|
}
|