@@ -16791,144 +16791,179 @@ func TestValidateReplicationController(t *testing.T) {
16791
16791
}
16792
16792
}
16793
16793
16794
- errorCases := map[string]core.ReplicationController{
16794
+ errorCases := map[string]struct {
16795
+ rc core.ReplicationController
16796
+ expectedOrigin []string
16797
+ }{
16795
16798
"zero-length ID": {
16796
- ObjectMeta: metav1.ObjectMeta{Name: "", Namespace: metav1.NamespaceDefault},
16797
- Spec: core.ReplicationControllerSpec{
16798
- Selector: validSelector,
16799
- Template: &validPodTemplate.Template,
16799
+ rc: core.ReplicationController{
16800
+ ObjectMeta: metav1.ObjectMeta{Name: "", Namespace: metav1.NamespaceDefault},
16801
+ Spec: core.ReplicationControllerSpec{
16802
+ Selector: validSelector,
16803
+ Template: &validPodTemplate.Template,
16804
+ },
16800
16805
},
16801
16806
},
16802
16807
"missing-namespace": {
16803
- ObjectMeta: metav1.ObjectMeta{Name: "abc-123"},
16804
- Spec: core.ReplicationControllerSpec{
16805
- Selector: validSelector,
16806
- Template: &validPodTemplate.Template,
16808
+ rc: core.ReplicationController{
16809
+ ObjectMeta: metav1.ObjectMeta{Name: "abc-123"},
16810
+ Spec: core.ReplicationControllerSpec{
16811
+ Selector: validSelector,
16812
+ Template: &validPodTemplate.Template,
16813
+ },
16807
16814
},
16808
16815
},
16809
16816
"empty selector": {
16810
- ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16811
- Spec: core.ReplicationControllerSpec{
16812
- Template: &validPodTemplate.Template,
16817
+ rc: core.ReplicationController{
16818
+ ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16819
+ Spec: core.ReplicationControllerSpec{
16820
+ Template: &validPodTemplate.Template,
16821
+ },
16813
16822
},
16814
16823
},
16815
16824
"selector_doesnt_match": {
16816
- ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16817
- Spec: core.ReplicationControllerSpec{
16818
- Selector: map[string]string{"foo": "bar"},
16819
- Template: &validPodTemplate.Template,
16825
+ rc: core.ReplicationController{
16826
+ ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16827
+ Spec: core.ReplicationControllerSpec{
16828
+ Selector: map[string]string{"foo": "bar"},
16829
+ Template: &validPodTemplate.Template,
16830
+ },
16820
16831
},
16821
16832
},
16822
16833
"invalid manifest": {
16823
- ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16824
- Spec: core.ReplicationControllerSpec{
16825
- Selector: validSelector,
16834
+ rc: core.ReplicationController{
16835
+ ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16836
+ Spec: core.ReplicationControllerSpec{
16837
+ Selector: validSelector,
16838
+ },
16826
16839
},
16827
16840
},
16828
16841
"read-write persistent disk with > 1 pod": {
16829
- ObjectMeta: metav1.ObjectMeta{Name: "abc"},
16830
- Spec: core.ReplicationControllerSpec{
16831
- Replicas: 2,
16832
- Selector: validSelector,
16833
- Template: &readWriteVolumePodTemplate.Template,
16842
+ rc: core.ReplicationController{
16843
+ ObjectMeta: metav1.ObjectMeta{Name: "abc"},
16844
+ Spec: core.ReplicationControllerSpec{
16845
+ Replicas: 2,
16846
+ Selector: validSelector,
16847
+ Template: &readWriteVolumePodTemplate.Template,
16848
+ },
16834
16849
},
16835
16850
},
16836
16851
"negative_replicas": {
16837
- ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16838
- Spec: core.ReplicationControllerSpec{
16839
- Replicas: -1,
16840
- Selector: validSelector,
16852
+ rc: core.ReplicationController{
16853
+ ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: metav1.NamespaceDefault},
16854
+ Spec: core.ReplicationControllerSpec{
16855
+ Replicas: -1,
16856
+ Selector: validSelector,
16857
+ },
16858
+ },
16859
+ expectedOrigin: []string{
16860
+ "minimum",
16841
16861
},
16842
16862
},
16843
16863
"invalid_label": {
16844
- ObjectMeta: metav1.ObjectMeta{
16845
- Name: "abc-123",
16846
- Namespace: metav1.NamespaceDefault,
16847
- Labels: map[string]string{
16848
- "NoUppercaseOrSpecialCharsLike=Equals": "bar",
16864
+ rc: core.ReplicationController{
16865
+ ObjectMeta: metav1.ObjectMeta{
16866
+ Name: "abc-123",
16867
+ Namespace: metav1.NamespaceDefault,
16868
+ Labels: map[string]string{
16869
+ "NoUppercaseOrSpecialCharsLike=Equals": "bar",
16870
+ },
16871
+ },
16872
+ Spec: core.ReplicationControllerSpec{
16873
+ Selector: validSelector,
16874
+ Template: &validPodTemplate.Template,
16849
16875
},
16850
- },
16851
- Spec: core.ReplicationControllerSpec{
16852
- Selector: validSelector,
16853
- Template: &validPodTemplate.Template,
16854
16876
},
16855
16877
},
16856
16878
"invalid_label 2": {
16857
- ObjectMeta: metav1.ObjectMeta{
16858
- Name: "abc-123",
16859
- Namespace: metav1.NamespaceDefault,
16860
- Labels: map[string]string{
16861
- "NoUppercaseOrSpecialCharsLike=Equals": "bar",
16879
+ rc: core.ReplicationController{
16880
+ ObjectMeta: metav1.ObjectMeta{
16881
+ Name: "abc-123",
16882
+ Namespace: metav1.NamespaceDefault,
16883
+ Labels: map[string]string{
16884
+ "NoUppercaseOrSpecialCharsLike=Equals": "bar",
16885
+ },
16886
+ },
16887
+ Spec: core.ReplicationControllerSpec{
16888
+ Template: &invalidPodTemplate.Template,
16862
16889
},
16863
- },
16864
- Spec: core.ReplicationControllerSpec{
16865
- Template: &invalidPodTemplate.Template,
16866
16890
},
16867
16891
},
16868
16892
"invalid_annotation": {
16869
- ObjectMeta: metav1.ObjectMeta{
16870
- Name: "abc-123",
16871
- Namespace: metav1.NamespaceDefault,
16872
- Annotations: map[string]string{
16873
- "NoUppercaseOrSpecialCharsLike=Equals": "bar",
16893
+ rc: core.ReplicationController{
16894
+ ObjectMeta: metav1.ObjectMeta{
16895
+ Name: "abc-123",
16896
+ Namespace: metav1.NamespaceDefault,
16897
+ Annotations: map[string]string{
16898
+ "NoUppercaseOrSpecialCharsLike=Equals": "bar",
16899
+ },
16900
+ },
16901
+ Spec: core.ReplicationControllerSpec{
16902
+ Selector: validSelector,
16903
+ Template: &validPodTemplate.Template,
16874
16904
},
16875
- },
16876
- Spec: core.ReplicationControllerSpec{
16877
- Selector: validSelector,
16878
- Template: &validPodTemplate.Template,
16879
16905
},
16880
16906
},
16881
16907
"invalid restart policy 1": {
16882
- ObjectMeta: metav1.ObjectMeta{
16883
- Name: "abc-123",
16884
- Namespace: metav1.NamespaceDefault,
16885
- },
16886
- Spec: core.ReplicationControllerSpec{
16887
- Selector: validSelector,
16888
- Template: &core.PodTemplateSpec{
16889
- Spec: podtest.MakePodSpec(podtest.SetRestartPolicy(core.RestartPolicyOnFailure)),
16890
- ObjectMeta: metav1.ObjectMeta{
16891
- Labels: validSelector,
16908
+ rc: core.ReplicationController{
16909
+ ObjectMeta: metav1.ObjectMeta{
16910
+ Name: "abc-123",
16911
+ Namespace: metav1.NamespaceDefault,
16912
+ },
16913
+ Spec: core.ReplicationControllerSpec{
16914
+ Selector: validSelector,
16915
+ Template: &core.PodTemplateSpec{
16916
+ Spec: podtest.MakePodSpec(podtest.SetRestartPolicy(core.RestartPolicyOnFailure)),
16917
+ ObjectMeta: metav1.ObjectMeta{
16918
+ Labels: validSelector,
16919
+ },
16892
16920
},
16893
16921
},
16894
16922
},
16895
16923
},
16896
16924
"invalid restart policy 2": {
16897
- ObjectMeta: metav1.ObjectMeta{
16898
- Name: "abc-123",
16899
- Namespace: metav1.NamespaceDefault,
16900
- },
16901
- Spec: core.ReplicationControllerSpec{
16902
- Selector: validSelector,
16903
- Template: &core.PodTemplateSpec{
16904
- Spec: podtest.MakePodSpec(podtest.SetRestartPolicy(core.RestartPolicyNever)),
16905
- ObjectMeta: metav1.ObjectMeta{
16906
- Labels: validSelector,
16925
+ rc: core.ReplicationController{
16926
+ ObjectMeta: metav1.ObjectMeta{
16927
+ Name: "abc-123",
16928
+ Namespace: metav1.NamespaceDefault,
16929
+ },
16930
+ Spec: core.ReplicationControllerSpec{
16931
+ Selector: validSelector,
16932
+ Template: &core.PodTemplateSpec{
16933
+ Spec: podtest.MakePodSpec(podtest.SetRestartPolicy(core.RestartPolicyNever)),
16934
+ ObjectMeta: metav1.ObjectMeta{
16935
+ Labels: validSelector,
16936
+ },
16907
16937
},
16908
16938
},
16909
16939
},
16910
16940
},
16911
16941
"template may not contain ephemeral containers": {
16912
- ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
16913
- Spec: core.ReplicationControllerSpec{
16914
- Replicas: 1,
16915
- Selector: validSelector,
16916
- Template: &core.PodTemplateSpec{
16917
- ObjectMeta: metav1.ObjectMeta{
16918
- Labels: validSelector,
16942
+ rc: core.ReplicationController{
16943
+ ObjectMeta: metav1.ObjectMeta{Name: "abc-123", Namespace: metav1.NamespaceDefault},
16944
+ Spec: core.ReplicationControllerSpec{
16945
+ Replicas: 1,
16946
+ Selector: validSelector,
16947
+ Template: &core.PodTemplateSpec{
16948
+ ObjectMeta: metav1.ObjectMeta{
16949
+ Labels: validSelector,
16950
+ },
16951
+ Spec: podtest.MakePodSpec(
16952
+ podtest.SetEphemeralContainers(core.EphemeralContainer{EphemeralContainerCommon: core.EphemeralContainerCommon{Name: "debug", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}),
16953
+ ),
16919
16954
},
16920
- Spec: podtest.MakePodSpec(
16921
- podtest.SetEphemeralContainers(core.EphemeralContainer{EphemeralContainerCommon: core.EphemeralContainerCommon{Name: "debug", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}),
16922
- ),
16923
16955
},
16924
16956
},
16925
16957
},
16926
16958
}
16927
16959
for k, v := range errorCases {
16928
- errs := ValidateReplicationController(&v, PodValidationOptions{})
16960
+ errs := ValidateReplicationController(&v.rc , PodValidationOptions{})
16929
16961
if len(errs) == 0 {
16930
16962
t.Errorf("expected failure for %s", k)
16931
16963
}
16964
+
16965
+ expectedOrigins := sets.NewString(v.expectedOrigin...)
16966
+
16932
16967
for i := range errs {
16933
16968
field := errs[i].Field
16934
16969
if !strings.HasPrefix(field, "spec.template.") &&
@@ -16944,6 +16979,16 @@ func TestValidateReplicationController(t *testing.T) {
16944
16979
field != "status.replicas" {
16945
16980
t.Errorf("%s: missing prefix for: %v", k, errs[i])
16946
16981
}
16982
+
16983
+ if len(v.expectedOrigin) > 0 && errs[i].Origin != "" {
16984
+ if !expectedOrigins.Has(errs[i].Origin) {
16985
+ t.Errorf("%s: unexpected origin for: %v, expected one of %v", k, errs[i].Origin, v.expectedOrigin)
16986
+ }
16987
+ expectedOrigins.Delete(errs[i].Origin)
16988
+ }
16989
+ }
16990
+ if len(expectedOrigins) > 0 {
16991
+ t.Errorf("%s: missing errors with origin: %v", k, expectedOrigins.List())
16947
16992
}
16948
16993
}
16949
16994
}
0 commit comments