diff --git a/pkg/scheduler/predicates_test.go b/pkg/scheduler/predicates_test.go index 4a1f8de258a..1768f3f57b2 100644 --- a/pkg/scheduler/predicates_test.go +++ b/pkg/scheduler/predicates_test.go @@ -542,6 +542,33 @@ func TestServiceAffinity(t *testing.T) { labels: []string{"region"}, test: "service pod on different minion, region mismatch", }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: selector, Namespace: "ns1"}}, + pods: []api.Pod{{Status: api.PodStatus{Host: "machine3"}, ObjectMeta: api.ObjectMeta{Labels: selector, Namespace: "ns1"}}}, + node: "machine1", + services: []api.Service{{Spec: api.ServiceSpec{Selector: selector}, ObjectMeta: api.ObjectMeta{Namespace: "ns2"}}}, + fits: true, + labels: []string{"region"}, + test: "service in different namespace, region mismatch", + }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: selector, Namespace: "ns1"}}, + pods: []api.Pod{{Status: api.PodStatus{Host: "machine3"}, ObjectMeta: api.ObjectMeta{Labels: selector, Namespace: "ns2"}}}, + node: "machine1", + services: []api.Service{{Spec: api.ServiceSpec{Selector: selector}, ObjectMeta: api.ObjectMeta{Namespace: "ns1"}}}, + fits: true, + labels: []string{"region"}, + test: "pod in different namespace, region mismatch", + }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: selector, Namespace: "ns1"}}, + pods: []api.Pod{{Status: api.PodStatus{Host: "machine3"}, ObjectMeta: api.ObjectMeta{Labels: selector, Namespace: "ns1"}}}, + node: "machine1", + services: []api.Service{{Spec: api.ServiceSpec{Selector: selector}, ObjectMeta: api.ObjectMeta{Namespace: "ns1"}}}, + fits: false, + labels: []string{"region"}, + test: "service and pod in same namespace, region mismatch", + }, { pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: selector}}, pods: []api.Pod{{Status: api.PodStatus{Host: "machine2"}, ObjectMeta: api.ObjectMeta{Labels: selector}}}, diff --git a/pkg/scheduler/spreading_test.go b/pkg/scheduler/spreading_test.go index 3999d09b5f9..e0b541459a5 100644 --- a/pkg/scheduler/spreading_test.go +++ b/pkg/scheduler/spreading_test.go @@ -78,6 +78,47 @@ func TestServiceSpreadPriority(t *testing.T) { expectedList: []HostPriority{{"machine1", 10}, {"machine2", 0}}, test: "two pods, one service pod", }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}}, + pods: []api.Pod{ + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels2}}, + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: api.NamespaceDefault}}, + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: "ns1"}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels1}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels2}}, + }, + nodes: []string{"machine1", "machine2"}, + services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}}}, + expectedList: []HostPriority{{"machine1", 10}, {"machine2", 0}}, + test: "five pods, one service pod in no namespace", + }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: api.NamespaceDefault}}, + pods: []api.Pod{ + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1}}, + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: "ns1"}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: api.NamespaceDefault}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels2}}, + }, + nodes: []string{"machine1", "machine2"}, + services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}, ObjectMeta: api.ObjectMeta{Namespace: api.NamespaceDefault}}}, + expectedList: []HostPriority{{"machine1", 10}, {"machine2", 0}}, + test: "four pods, one service pod in default namespace", + }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: "ns1"}}, + pods: []api.Pod{ + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1}}, + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: api.NamespaceDefault}}, + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: "ns2"}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: "ns1"}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels2}}, + }, + nodes: []string{"machine1", "machine2"}, + services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}, ObjectMeta: api.ObjectMeta{Namespace: "ns1"}}}, + expectedList: []HostPriority{{"machine1", 10}, {"machine2", 0}}, + test: "five pods, one service pod in specific namespace", + }, { pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}}, pods: []api.Pod{ @@ -223,6 +264,21 @@ func TestZoneSpreadPriority(t *testing.T) { {"machine01", 0}, {"machine02", 0}}, test: "three pods, two service pods on different machines", }, + { + pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: api.NamespaceDefault}}, + pods: []api.Pod{ + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1}}, + {Status: zone1Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: api.NamespaceDefault}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels1}}, + {Status: zone2Status, ObjectMeta: api.ObjectMeta{Labels: labels1, Namespace: "ns1"}}, + }, + nodes: labeledNodes, + services: []api.Service{{Spec: api.ServiceSpec{Selector: labels1}, ObjectMeta: api.ObjectMeta{Namespace: api.NamespaceDefault}}}, + expectedList: []HostPriority{{"machine11", 0}, {"machine12", 0}, + {"machine21", 10}, {"machine22", 10}, + {"machine01", 0}, {"machine02", 0}}, + test: "three service label match pods in different namespaces", + }, { pod: api.Pod{ObjectMeta: api.ObjectMeta{Labels: labels1}}, pods: []api.Pod{