package validation
import (
"testing"
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/util/validation/field"
configapi "github.com/openshift/origin/pkg/cmd/server/api"
)
func TestFailingKubeletArgs(t *testing.T) {
args := configapi.ExtendedArguments{}
args["port"] = []string{"invalid-value"}
args["missing-key"] = []string{"value"}
// [port: invalid value '[invalid-value]': could not be set: strconv.ParseUint: parsing "invalid-value": invalid syntax flag: invalid value 'missing-key': is not a valid flag]
errs := ValidateKubeletExtendedArguments(args, nil)
if len(errs) != 2 {
t.Fatalf("expected 2 errors, not %v", errs)
}
var (
portErr *field.Error
missingErr *field.Error
)
for _, err := range errs {
switch err.Field {
case "port":
portErr = err
case "flag":
missingErr = err
}
}
if portErr == nil {
t.Fatalf("missing port")
}
if missingErr == nil {
t.Fatalf("missing missing-key")
}
if e, a := "port", portErr.Field; e != a {
t.Errorf("expected %v, got %v", e, a)
}
if e, a := "invalid-value", portErr.BadValue.(string); e != a {
t.Errorf("expected %v, got %v", e, a)
}
if e, a := `could not be set: strconv.ParseUint: parsing "invalid-value": invalid syntax`, portErr.Detail; e != a {
t.Errorf("expected %v, got %v", e, a)
}
if e, a := "flag", missingErr.Field; e != a {
t.Errorf("expected %v, got %v", e, a)
}
if e, a := "missing-key", missingErr.BadValue.(string); e != a {
t.Errorf("expected %v, got %v", e, a)
}
if e, a := `is not a valid flag`, missingErr.Detail; e != a {
t.Errorf("expected %v, got %v", e, a)
}
}
func TestInvalidProjectEmptyDirQuota(t *testing.T) {
negQuota := resource.MustParse("-1000Mi")
nodeCfg := configapi.NodeConfig{
VolumeConfig: configapi.NodeVolumeConfig{
LocalQuota: configapi.LocalQuota{
PerFSGroup: &negQuota,
},
},
}
errs := ValidateNodeConfig(&nodeCfg, nil)
// This will result in several errors, one of them should be related to the
// project empty dir quota:
var emptyDirQuotaError *field.Error
for _, err := range errs.Errors {
t.Logf("Found error: %s", err.Field)
if err.Field == "volumeConfig.localQuota.perFSGroup" {
emptyDirQuotaError = err
}
}
if emptyDirQuotaError == nil {
t.Fatalf("expected volumeConfig.localQuota.perFSGroup error but got none")
}
if emptyDirQuotaError.Type != field.ErrorTypeInvalid {
t.Errorf("unexpected error for negative volumeConfig.localQuota.perFSGroup: %s", emptyDirQuotaError.Detail)
}
}