mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-05 23:47:50 +00:00
Add MinDomains API to TopologySpreadConstraints field
This commit is contained in:
@@ -33,6 +33,7 @@ import (
|
||||
featuregatetesting "k8s.io/component-base/featuregate/testing"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
"k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
func TestVisitContainers(t *testing.T) {
|
||||
@@ -1519,6 +1520,173 @@ func TestHaveSameExpandedDNSConfig(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropDisabledTopologySpreadConstraintsFields(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
enabled bool
|
||||
podSpec *api.PodSpec
|
||||
oldPodSpec *api.PodSpec
|
||||
wantPodSpec *api.PodSpec
|
||||
}{
|
||||
{
|
||||
name: "TopologySpreadConstraints is nil",
|
||||
podSpec: &api.PodSpec{},
|
||||
oldPodSpec: &api.PodSpec{},
|
||||
wantPodSpec: &api.PodSpec{},
|
||||
},
|
||||
{
|
||||
name: "TopologySpreadConstraints is empty",
|
||||
podSpec: &api.PodSpec{TopologySpreadConstraints: []api.TopologySpreadConstraint{}},
|
||||
oldPodSpec: &api.PodSpec{TopologySpreadConstraints: []api.TopologySpreadConstraint{}},
|
||||
wantPodSpec: &api.PodSpec{TopologySpreadConstraints: []api.TopologySpreadConstraint{}},
|
||||
},
|
||||
{
|
||||
name: "TopologySpreadConstraints is not empty, but all constraints don't have minDomains",
|
||||
podSpec: &api.PodSpec{TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
}},
|
||||
oldPodSpec: &api.PodSpec{TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
}},
|
||||
wantPodSpec: &api.PodSpec{TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "one constraint in podSpec has non-empty minDomains, feature gate is disabled " +
|
||||
"and all constraint in oldPodSpec doesn't have minDomains",
|
||||
enabled: false,
|
||||
podSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: pointer.Int32(2),
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
oldPodSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantPodSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
// cleared.
|
||||
MinDomains: nil,
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "one constraint in podSpec has non-empty minDomains, feature gate is disabled " +
|
||||
"and one constraint in oldPodSpec has minDomains",
|
||||
enabled: false,
|
||||
podSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: pointer.Int32(2),
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
oldPodSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: pointer.Int32(2),
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantPodSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
// not cleared.
|
||||
MinDomains: pointer.Int32(2),
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "one constraint in podSpec has non-empty minDomains, feature gate is enabled" +
|
||||
"and all constraint in oldPodSpec doesn't have minDomains",
|
||||
enabled: true,
|
||||
podSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: pointer.Int32(2),
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
oldPodSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantPodSpec: &api.PodSpec{
|
||||
TopologySpreadConstraints: []api.TopologySpreadConstraint{
|
||||
{
|
||||
// not cleared.
|
||||
MinDomains: pointer.Int32(2),
|
||||
},
|
||||
{
|
||||
MinDomains: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.MinDomainsInPodTopologySpread, tc.enabled)()
|
||||
dropDisabledFields(tc.podSpec, nil, tc.oldPodSpec, nil)
|
||||
if diff := cmp.Diff(tc.wantPodSpec, tc.podSpec); diff != "" {
|
||||
t.Errorf("unexpected pod spec (-want, +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropOSField(t *testing.T) {
|
||||
podWithOSField := func() *api.Pod {
|
||||
osField := api.PodOS{Name: "linux"}
|
||||
|
||||
Reference in New Issue
Block a user