kinflate: Add tests and fix some bugs.

This commit is contained in:
Antoine Pelisse 2018-01-31 11:34:54 -08:00
parent c398a3f462
commit b21ff8e2d3
4 changed files with 249 additions and 2 deletions

View File

@ -40,9 +40,13 @@ func (a *addConfigMap) Validate(args []string) error {
return fmt.Errorf("name must be specified once")
}
a.Name = args[0]
if len(a.EnvFileSource) == 0 && len(a.FileSources) == 0 && len(a.LiteralSources) == 0 {
return fmt.Errorf("at least from-env-file, or from-file or from-literal must be set")
}
if len(a.EnvFileSource) > 0 && (len(a.FileSources) > 0 || len(a.LiteralSources) > 0) {
return fmt.Errorf("from-env-file cannot be combined with from-file or from-literal")
}
// TODO: Should we check if the path exists? if it's valid, if it's within the same (sub-)directory?
return nil
}

View File

@ -0,0 +1,89 @@
/*
Copyright 2017 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 (
"testing"
)
func TestNewAddConfigMapIsNotNil(t *testing.T) {
if NewCmdAddConfigMap(nil) == nil {
t.Fatal("NewCmdAddConfigMap shouldn't be nil")
}
}
func TestAddConfigValidation_NoName(t *testing.T) {
config := addConfigMap{}
if config.Validate([]string{}) == nil {
t.Fatal("Validation should fail if no name is specified")
}
}
func TestAddConfigValidation_MoreThanOneName(t *testing.T) {
config := addConfigMap{}
if config.Validate([]string{"name", "othername"}) == nil {
t.Fatal("Validation should fail if more than one name is specified")
}
}
func TestAddConfigValidation_Flags(t *testing.T) {
tests := []struct {
name string
config addConfigMap
shouldFail bool
}{
{
name: "env-file-source and literal are both set",
config: addConfigMap{
LiteralSources: []string{"one", "two"},
EnvFileSource: "three",
},
shouldFail: true,
},
{
name: "env-file-source and from-file are both set",
config: addConfigMap{
FileSources: []string{"one", "two"},
EnvFileSource: "three",
},
shouldFail: true,
},
{
name: "we don't have any option set",
config: addConfigMap{},
shouldFail: true,
},
{
name: "we have from-file and literal ",
config: addConfigMap{
LiteralSources: []string{"one", "two"},
FileSources: []string{"three", "four"},
},
shouldFail: false,
},
}
for _, test := range tests {
if test.config.Validate([]string{"name"}) == nil && test.shouldFail {
t.Fatalf("Validation should fail if %s", test.name)
} else if test.config.Validate([]string{"name"}) != nil && !test.shouldFail {
t.Fatalf("Validation should succeed if %s", test.name)
}
}
}

View File

@ -40,9 +40,13 @@ func (a *addGenericSecret) Validate(args []string) error {
return fmt.Errorf("name must be specified once")
}
a.Name = args[0]
if len(a.EnvFileSource) == 0 && len(a.FileSources) == 0 && len(a.LiteralSources) == 0 {
return fmt.Errorf("at least from-env-file, or from-file or from-literal must be set")
}
if len(a.EnvFileSource) > 0 && (len(a.FileSources) > 0 || len(a.LiteralSources) > 0) {
return fmt.Errorf("from-env-file cannot be combined with from-file or from-literal")
}
// TODO: Should we check if the path exists? if it's valid, if it's within the same (sub-)directory?
return nil
}
@ -85,8 +89,8 @@ type addTLSSecret struct {
// validate validates required fields are set to support structured generation.
func (a *addTLSSecret) Validate(args []string) error {
if len(args) < 0 {
return fmt.Errorf("name must be specified")
if len(args) != 1 {
return fmt.Errorf("name must be specified once")
}
a.Name = args[0]
if len(a.Cert) == 0 {
@ -95,6 +99,7 @@ func (a *addTLSSecret) Validate(args []string) error {
if len(a.Key) == 0 {
return fmt.Errorf("key is required")
}
// TODO: Should we check if the path exists? if it's valid, if it's within the same (sub-)directory?
return nil
}

View File

@ -0,0 +1,149 @@
/*
Copyright 2017 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 (
"testing"
)
func TestNewAddSecretIsNotNil(t *testing.T) {
if NewCmdAddSecret(nil) == nil {
t.Fatal("NewCmdAddSecret shouldn't be nil")
}
}
func TestAddGenericSecretValidation_NoName(t *testing.T) {
config := addGenericSecret{}
if config.Validate([]string{}) == nil {
t.Fatal("Validation should fail if no name is specified")
}
}
func TestAddGenericSecretValidation_MoreThanOneName(t *testing.T) {
config := addGenericSecret{}
if config.Validate([]string{"name", "othername"}) == nil {
t.Fatal("Validation should fail if more than one name is specified")
}
}
func TestAddGenericSecretValidation_Flags(t *testing.T) {
tests := []struct {
name string
config addGenericSecret
shouldFail bool
}{
{
name: "env-file-source and literal are both set",
config: addGenericSecret{
LiteralSources: []string{"one", "two"},
EnvFileSource: "three",
},
shouldFail: true,
},
{
name: "env-file-source and from-file are both set",
config: addGenericSecret{
FileSources: []string{"one", "two"},
EnvFileSource: "three",
},
shouldFail: true,
},
{
name: "we don't have any option set",
config: addGenericSecret{},
shouldFail: true,
},
{
name: "we have from-file and literal ",
config: addGenericSecret{
LiteralSources: []string{"one", "two"},
FileSources: []string{"three", "four"},
},
shouldFail: false,
},
}
for _, test := range tests {
if test.config.Validate([]string{"name"}) == nil && test.shouldFail {
t.Fatalf("Validation should fail if %s", test.name)
} else if test.config.Validate([]string{"name"}) != nil && !test.shouldFail {
t.Fatalf("Validation should succeed if %s", test.name)
}
}
}
func TestAddTLSSecretValidation_NoName(t *testing.T) {
config := addTLSSecret{}
if config.Validate([]string{}) == nil {
t.Fatal("Validation should fail if no name is specified")
}
}
func TestAddTLSSecretValidation_MoreThanOneName(t *testing.T) {
config := addTLSSecret{}
if config.Validate([]string{"name", "othername"}) == nil {
t.Fatal("Validation should fail if more than one name is specified")
}
}
func TestAddTLSSecretValidation_Flags(t *testing.T) {
tests := []struct {
name string
config addTLSSecret
shouldFail bool
}{
{
name: "cert and key are set",
config: addTLSSecret{
Cert: "cert",
Key: "key",
},
shouldFail: false,
},
{
name: "cert is set, but not key",
config: addTLSSecret{
Cert: "cert",
},
shouldFail: true,
},
{
name: "key is set, but not cert",
config: addTLSSecret{
Key: "key",
},
shouldFail: true,
},
{
name: "neither key nor cert is set",
config: addTLSSecret{},
shouldFail: true,
},
}
for _, test := range tests {
if test.config.Validate([]string{"name"}) == nil && test.shouldFail {
t.Fatalf("Validation should fail if %s", test.name)
} else if test.config.Validate([]string{"name"}) != nil && !test.shouldFail {
t.Fatalf("Validation should succeed if %s", test.name)
}
}
}