mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
test: Add Origin field support to ReplicationController spec.Replicas validation test
This commit is contained in:
parent
07477c656e
commit
c7cf852086
@ -6266,7 +6266,7 @@ func ValidateReplicationControllerSpec(spec, oldSpec *core.ReplicationController
|
|||||||
allErrs := field.ErrorList{}
|
allErrs := field.ErrorList{}
|
||||||
allErrs = append(allErrs, ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...)
|
allErrs = append(allErrs, ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...)
|
||||||
allErrs = append(allErrs, ValidateNonEmptySelector(spec.Selector, fldPath.Child("selector"))...)
|
allErrs = append(allErrs, ValidateNonEmptySelector(spec.Selector, fldPath.Child("selector"))...)
|
||||||
allErrs = append(allErrs, ValidateNonnegativeField(int64(spec.Replicas), fldPath.Child("replicas"))...)
|
allErrs = append(allErrs, ValidateNonnegativeField(int64(spec.Replicas), fldPath.Child("replicas")).WithOrigin("minimum")...)
|
||||||
allErrs = append(allErrs, ValidatePodTemplateSpecForRC(spec.Template, spec.Selector, spec.Replicas, fldPath.Child("template"), opts)...)
|
allErrs = append(allErrs, ValidatePodTemplateSpecForRC(spec.Template, spec.Selector, spec.Replicas, fldPath.Child("template"), opts)...)
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
@ -16791,41 +16791,55 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
errorCases := map[string]core.ReplicationController{
|
errorCases := map[string]struct {
|
||||||
|
rc core.ReplicationController
|
||||||
|
expectedOrigin []string
|
||||||
|
}{
|
||||||
"zero-length ID": {
|
"zero-length ID": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "", Namespace: metav1.NamespaceDefault},
|
ObjectMeta: metav1.ObjectMeta{Name: "", Namespace: metav1.NamespaceDefault},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Selector: validSelector,
|
Selector: validSelector,
|
||||||
Template: &validPodTemplate.Template,
|
Template: &validPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"missing-namespace": {
|
"missing-namespace": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123"},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc-123"},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Selector: validSelector,
|
Selector: validSelector,
|
||||||
Template: &validPodTemplate.Template,
|
Template: &validPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"empty selector": {
|
"empty selector": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Template: &validPodTemplate.Template,
|
Template: &validPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"selector_doesnt_match": {
|
"selector_doesnt_match": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Selector: map[string]string{"foo": "bar"},
|
Selector: map[string]string{"foo": "bar"},
|
||||||
Template: &validPodTemplate.Template,
|
Template: &validPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"invalid manifest": {
|
"invalid manifest": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Selector: validSelector,
|
Selector: validSelector,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"read-write persistent disk with > 1 pod": {
|
"read-write persistent disk with > 1 pod": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc"},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc"},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Replicas: 2,
|
Replicas: 2,
|
||||||
@ -16833,14 +16847,21 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
Template: &readWriteVolumePodTemplate.Template,
|
Template: &readWriteVolumePodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"negative_replicas": {
|
"negative_replicas": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Replicas: -1,
|
Replicas: -1,
|
||||||
Selector: validSelector,
|
Selector: validSelector,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
expectedOrigin: []string{
|
||||||
|
"minimum",
|
||||||
|
},
|
||||||
|
},
|
||||||
"invalid_label": {
|
"invalid_label": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "abc-123",
|
Name: "abc-123",
|
||||||
Namespace: metav1.NamespaceDefault,
|
Namespace: metav1.NamespaceDefault,
|
||||||
@ -16853,7 +16874,9 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
Template: &validPodTemplate.Template,
|
Template: &validPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"invalid_label 2": {
|
"invalid_label 2": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "abc-123",
|
Name: "abc-123",
|
||||||
Namespace: metav1.NamespaceDefault,
|
Namespace: metav1.NamespaceDefault,
|
||||||
@ -16865,7 +16888,9 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
Template: &invalidPodTemplate.Template,
|
Template: &invalidPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"invalid_annotation": {
|
"invalid_annotation": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "abc-123",
|
Name: "abc-123",
|
||||||
Namespace: metav1.NamespaceDefault,
|
Namespace: metav1.NamespaceDefault,
|
||||||
@ -16878,7 +16903,9 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
Template: &validPodTemplate.Template,
|
Template: &validPodTemplate.Template,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"invalid restart policy 1": {
|
"invalid restart policy 1": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "abc-123",
|
Name: "abc-123",
|
||||||
Namespace: metav1.NamespaceDefault,
|
Namespace: metav1.NamespaceDefault,
|
||||||
@ -16893,7 +16920,9 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"invalid restart policy 2": {
|
"invalid restart policy 2": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "abc-123",
|
Name: "abc-123",
|
||||||
Namespace: metav1.NamespaceDefault,
|
Namespace: metav1.NamespaceDefault,
|
||||||
@ -16908,7 +16937,9 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"template may not contain ephemeral containers": {
|
"template may not contain ephemeral containers": {
|
||||||
|
rc: core.ReplicationController{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
|
||||||
Spec: core.ReplicationControllerSpec{
|
Spec: core.ReplicationControllerSpec{
|
||||||
Replicas: 1,
|
Replicas: 1,
|
||||||
@ -16923,12 +16954,16 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for k, v := range errorCases {
|
for k, v := range errorCases {
|
||||||
errs := ValidateReplicationController(&v, PodValidationOptions{})
|
errs := ValidateReplicationController(&v.rc, PodValidationOptions{})
|
||||||
if len(errs) == 0 {
|
if len(errs) == 0 {
|
||||||
t.Errorf("expected failure for %s", k)
|
t.Errorf("expected failure for %s", k)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expectedOrigins := sets.NewString(v.expectedOrigin...)
|
||||||
|
|
||||||
for i := range errs {
|
for i := range errs {
|
||||||
field := errs[i].Field
|
field := errs[i].Field
|
||||||
if !strings.HasPrefix(field, "spec.template.") &&
|
if !strings.HasPrefix(field, "spec.template.") &&
|
||||||
@ -16944,6 +16979,16 @@ func TestValidateReplicationController(t *testing.T) {
|
|||||||
field != "status.replicas" {
|
field != "status.replicas" {
|
||||||
t.Errorf("%s: missing prefix for: %v", k, errs[i])
|
t.Errorf("%s: missing prefix for: %v", k, errs[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(v.expectedOrigin) > 0 && errs[i].Origin != "" {
|
||||||
|
if !expectedOrigins.Has(errs[i].Origin) {
|
||||||
|
t.Errorf("%s: unexpected origin for: %v, expected one of %v", k, errs[i].Origin, v.expectedOrigin)
|
||||||
|
}
|
||||||
|
expectedOrigins.Delete(errs[i].Origin)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(expectedOrigins) > 0 {
|
||||||
|
t.Errorf("%s: missing errors with origin: %v", k, expectedOrigins.List())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user