Merge pull request #82465 from hprateek43/MoveGetPodPriority

Move GetPodPriority from /scheduler/util to /api/pod
This commit is contained in:
Kubernetes Prow Robot 2019-09-25 11:06:00 -07:00 committed by GitHub
commit 8ad1aba7f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 91 additions and 85 deletions

View File

@ -20,7 +20,7 @@ import (
"fmt" "fmt"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
@ -323,3 +323,14 @@ func UpdatePodCondition(status *v1.PodStatus, condition *v1.PodCondition) bool {
// Return true if one of the fields have changed. // Return true if one of the fields have changed.
return !isEqual return !isEqual
} }
// GetPodPriority returns priority of the given pod.
func GetPodPriority(pod *v1.Pod) int32 {
if pod.Spec.Priority != nil {
return *pod.Spec.Priority
}
// When priority of a running pod is nil, it means it was created at a time
// that there was no global default priority class and the priority class
// name of the pod was empty. So, we resolve to the static default priority.
return 0
}

View File

@ -23,7 +23,7 @@ import (
"time" "time"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
@ -770,3 +770,39 @@ func TestUpdatePodCondition(t *testing.T) {
assert.Equal(t, test.expected, resultStatus, test.desc) assert.Equal(t, test.expected, resultStatus, test.desc)
} }
} }
// TestGetPodPriority tests GetPodPriority function.
func TestGetPodPriority(t *testing.T) {
p := int32(20)
tests := []struct {
name string
pod *v1.Pod
expectedPriority int32
}{
{
name: "no priority pod resolves to static default priority",
pod: &v1.Pod{
Spec: v1.PodSpec{Containers: []v1.Container{
{Name: "container", Image: "image"}},
},
},
expectedPriority: 0,
},
{
name: "pod with priority resolves correctly",
pod: &v1.Pod{
Spec: v1.PodSpec{Containers: []v1.Container{
{Name: "container", Image: "image"}},
Priority: &p,
},
},
expectedPriority: p,
},
}
for _, test := range tests {
if GetPodPriority(test.pod) != test.expectedPriority {
t.Errorf("expected pod priority: %v, got %v", test.expectedPriority, GetPodPriority(test.pod))
}
}
}

View File

@ -48,6 +48,7 @@ go_library(
], ],
importpath = "k8s.io/kubernetes/pkg/kubelet/eviction", importpath = "k8s.io/kubernetes/pkg/kubelet/eviction",
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library",
"//pkg/api/v1/resource:go_default_library", "//pkg/api/v1/resource:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library", "//pkg/apis/core/v1/helper:go_default_library",
"//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/apis/core/v1/helper/qos:go_default_library",
@ -61,7 +62,6 @@ go_library(
"//pkg/kubelet/types:go_default_library", "//pkg/kubelet/types:go_default_library",
"//pkg/kubelet/util/format:go_default_library", "//pkg/kubelet/util/format:go_default_library",
"//pkg/scheduler/api:go_default_library", "//pkg/scheduler/api:go_default_library",
"//pkg/scheduler/util:go_default_library",
"//pkg/volume/util:go_default_library", "//pkg/volume/util:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",

View File

@ -23,14 +23,14 @@ import (
"strings" "strings"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
"k8s.io/klog" "k8s.io/klog"
"k8s.io/kubernetes/pkg/api/v1/pod"
v1resource "k8s.io/kubernetes/pkg/api/v1/resource" v1resource "k8s.io/kubernetes/pkg/api/v1/resource"
statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api" evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
schedulerutils "k8s.io/kubernetes/pkg/scheduler/util"
volumeutils "k8s.io/kubernetes/pkg/volume/util" volumeutils "k8s.io/kubernetes/pkg/volume/util"
) )
@ -512,8 +512,8 @@ func (ms *multiSorter) Less(i, j int) bool {
// priority compares pods by Priority, if priority is enabled. // priority compares pods by Priority, if priority is enabled.
func priority(p1, p2 *v1.Pod) int { func priority(p1, p2 *v1.Pod) int {
priority1 := schedulerutils.GetPodPriority(p1) priority1 := pod.GetPodPriority(p1)
priority2 := schedulerutils.GetPodPriority(p2) priority2 := pod.GetPodPriority(p2)
if priority1 == priority2 { if priority1 == priority2 {
return 0 return 0
} }

View File

@ -9,6 +9,7 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/scheduler/core", importpath = "k8s.io/kubernetes/pkg/scheduler/core",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library",
"//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/algorithm/priorities:go_default_library",
@ -43,6 +44,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library",
"//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/algorithm/priorities:go_default_library",

View File

@ -22,11 +22,12 @@ import (
"testing" "testing"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
@ -210,9 +211,9 @@ func (f *FakeExtender) selectVictimsOnNodeByExtender(
} }
// As the first step, remove all the lower priority pods from the node and // As the first step, remove all the lower priority pods from the node and
// check if the given pod can be scheduled. // check if the given pod can be scheduled.
podPriority := util.GetPodPriority(pod) podPriority := podutil.GetPodPriority(pod)
for _, p := range nodeInfoCopy.Pods() { for _, p := range nodeInfoCopy.Pods() {
if util.GetPodPriority(p) < podPriority { if podutil.GetPodPriority(p) < podPriority {
potentialVictims.Items = append(potentialVictims.Items, p) potentialVictims.Items = append(potentialVictims.Items, p)
removePod(p) removePod(p)
} }

View File

@ -36,6 +36,7 @@ import (
"k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/errors"
corelisters "k8s.io/client-go/listers/core/v1" corelisters "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
@ -434,9 +435,9 @@ func (g *genericScheduler) getLowerPriorityNominatedPods(pod *v1.Pod, nodeName s
} }
var lowerPriorityPods []*v1.Pod var lowerPriorityPods []*v1.Pod
podPriority := util.GetPodPriority(pod) podPriority := podutil.GetPodPriority(pod)
for _, p := range pods { for _, p := range pods {
if util.GetPodPriority(p) < podPriority { if podutil.GetPodPriority(p) < podPriority {
lowerPriorityPods = append(lowerPriorityPods, p) lowerPriorityPods = append(lowerPriorityPods, p)
} }
} }
@ -593,7 +594,7 @@ func addNominatedPods(pod *v1.Pod, meta predicates.PredicateMetadata,
nodeInfoOut := nodeInfo.Clone() nodeInfoOut := nodeInfo.Clone()
podsAdded := false podsAdded := false
for _, p := range nominatedPods { for _, p := range nominatedPods {
if util.GetPodPriority(p) >= util.GetPodPriority(pod) && p.UID != pod.UID { if podutil.GetPodPriority(p) >= podutil.GetPodPriority(pod) && p.UID != pod.UID {
nodeInfoOut.AddPod(p) nodeInfoOut.AddPod(p)
if metaOut != nil { if metaOut != nil {
if err := metaOut.AddPod(p, nodeInfoOut); err != nil { if err := metaOut.AddPod(p, nodeInfoOut); err != nil {
@ -912,7 +913,7 @@ func pickOneNodeForPreemption(nodesToVictims map[*v1.Node]*schedulerapi.Victims)
node := minNodes1[i] node := minNodes1[i]
victims := nodesToVictims[node] victims := nodesToVictims[node]
// highestPodPriority is the highest priority among the victims on this node. // highestPodPriority is the highest priority among the victims on this node.
highestPodPriority := util.GetPodPriority(victims.Pods[0]) highestPodPriority := podutil.GetPodPriority(victims.Pods[0])
if highestPodPriority < minHighestPriority { if highestPodPriority < minHighestPriority {
minHighestPriority = highestPodPriority minHighestPriority = highestPodPriority
lenNodes2 = 0 lenNodes2 = 0
@ -938,7 +939,7 @@ func pickOneNodeForPreemption(nodesToVictims map[*v1.Node]*schedulerapi.Victims)
// needed so that a node with a few pods with negative priority is not // needed so that a node with a few pods with negative priority is not
// picked over a node with a smaller number of pods with the same negative // picked over a node with a smaller number of pods with the same negative
// priority (and similar scenarios). // priority (and similar scenarios).
sumPriorities += int64(util.GetPodPriority(pod)) + int64(math.MaxInt32+1) sumPriorities += int64(podutil.GetPodPriority(pod)) + int64(math.MaxInt32+1)
} }
if sumPriorities < minSumPriorities { if sumPriorities < minSumPriorities {
minSumPriorities = sumPriorities minSumPriorities = sumPriorities
@ -1129,9 +1130,9 @@ func (g *genericScheduler) selectVictimsOnNode(
} }
// As the first step, remove all the lower priority pods from the node and // As the first step, remove all the lower priority pods from the node and
// check if the given pod can be scheduled. // check if the given pod can be scheduled.
podPriority := util.GetPodPriority(pod) podPriority := podutil.GetPodPriority(pod)
for _, p := range nodeInfoCopy.Pods() { for _, p := range nodeInfoCopy.Pods() {
if util.GetPodPriority(p) < podPriority { if podutil.GetPodPriority(p) < podPriority {
potentialVictims.Items = append(potentialVictims.Items, p) potentialVictims.Items = append(potentialVictims.Items, p)
if err := removePod(p); err != nil { if err := removePod(p); err != nil {
return nil, 0, false return nil, 0, false
@ -1236,9 +1237,9 @@ func podEligibleToPreemptOthers(pod *v1.Pod, nodeNameToInfo map[string]*schedule
nomNodeName := pod.Status.NominatedNodeName nomNodeName := pod.Status.NominatedNodeName
if len(nomNodeName) > 0 { if len(nomNodeName) > 0 {
if nodeInfo, found := nodeNameToInfo[nomNodeName]; found { if nodeInfo, found := nodeNameToInfo[nomNodeName]; found {
podPriority := util.GetPodPriority(pod) podPriority := podutil.GetPodPriority(pod)
for _, p := range nodeInfo.Pods() { for _, p := range nodeInfo.Pods() {
if p.DeletionTimestamp != nil && util.GetPodPriority(p) < podPriority { if p.DeletionTimestamp != nil && podutil.GetPodPriority(p) < podPriority {
// There is a terminating pod on the nominated node. // There is a terminating pod on the nominated node.
return false return false
} }

View File

@ -9,6 +9,7 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/scheduler/internal/queue", importpath = "k8s.io/kubernetes/pkg/scheduler/internal/queue",
visibility = ["//pkg/scheduler:__subpackages__"], visibility = ["//pkg/scheduler:__subpackages__"],
deps = [ deps = [
"//pkg/api/v1/pod:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library",
"//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library",

View File

@ -15,7 +15,7 @@ limitations under the License.
*/ */
// This file contains structures that implement scheduling queue types. // This file contains structures that implement scheduling queue types.
// Scheduling queues hold pods waiting to be scheduled. This file implements a // Scheduling queues hold pods waiting to be scheduled. This file implements a/
// priority queue which has two sub queues. One sub-queue holds pods that are // priority queue which has two sub queues. One sub-queue holds pods that are
// being considered for scheduling. This is called activeQ. Another queue holds // being considered for scheduling. This is called activeQ. Another queue holds
// pods that are already tried and are determined to be unschedulable. The latter // pods that are already tried and are determined to be unschedulable. The latter
@ -31,11 +31,12 @@ import (
"k8s.io/klog" "k8s.io/klog"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
ktypes "k8s.io/apimachinery/pkg/types" ktypes "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
"k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
@ -154,8 +155,8 @@ func newPodInfoNoTimestamp(pod *v1.Pod) *framework.PodInfo {
func activeQComp(podInfo1, podInfo2 interface{}) bool { func activeQComp(podInfo1, podInfo2 interface{}) bool {
pInfo1 := podInfo1.(*framework.PodInfo) pInfo1 := podInfo1.(*framework.PodInfo)
pInfo2 := podInfo2.(*framework.PodInfo) pInfo2 := podInfo2.(*framework.PodInfo)
prio1 := util.GetPodPriority(pInfo1.Pod) prio1 := pod.GetPodPriority(pInfo1.Pod)
prio2 := util.GetPodPriority(pInfo2.Pod) prio2 := pod.GetPodPriority(pInfo2.Pod)
return (prio1 > prio2) || (prio1 == prio2 && pInfo1.Timestamp.Before(pInfo2.Timestamp)) return (prio1 > prio2) || (prio1 == prio2 && pInfo1.Timestamp.Before(pInfo2.Timestamp))
} }

View File

@ -157,8 +157,8 @@ type fakeFramework struct{}
func (*fakeFramework) QueueSortFunc() framework.LessFunc { func (*fakeFramework) QueueSortFunc() framework.LessFunc {
return func(podInfo1, podInfo2 *framework.PodInfo) bool { return func(podInfo1, podInfo2 *framework.PodInfo) bool {
prio1 := util.GetPodPriority(podInfo1.Pod) prio1 := podutil.GetPodPriority(podInfo1.Pod)
prio2 := util.GetPodPriority(podInfo2.Pod) prio2 := podutil.GetPodPriority(podInfo2.Pod)
return prio1 < prio2 return prio1 < prio2
} }
} }
@ -855,7 +855,7 @@ func TestPodFailedSchedulingMultipleTimesDoesNotBlockNewerPod(t *testing.T) {
// Add an unschedulable pod to a priority queue. // Add an unschedulable pod to a priority queue.
// This makes a situation that the pod was tried to schedule // This makes a situation that the pod was tried to schedule
// and had been determined unschedulable so far. // and had been determined unschedulable so far
unschedulablePod := v1.Pod{ unschedulablePod := v1.Pod{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "test-pod-unscheduled", Name: "test-pod-unscheduled",

View File

@ -15,7 +15,7 @@ go_test(
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/apis/scheduling:go_default_library", "//pkg/api/v1/pod:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
], ],
@ -31,7 +31,7 @@ go_library(
], ],
importpath = "k8s.io/kubernetes/pkg/scheduler/util", importpath = "k8s.io/kubernetes/pkg/scheduler/util",
deps = [ deps = [
"//pkg/apis/scheduling:go_default_library", "//pkg/api/v1/pod:go_default_library",
"//pkg/scheduler/api:go_default_library", "//pkg/scheduler/api:go_default_library",
"//pkg/scheduler/metrics:go_default_library", "//pkg/scheduler/metrics:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",

View File

@ -20,10 +20,10 @@ import (
"sort" "sort"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog" "k8s.io/klog"
"k8s.io/kubernetes/pkg/apis/scheduling" podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/api"
) )
@ -49,17 +49,6 @@ func GetPodFullName(pod *v1.Pod) string {
return pod.Name + "_" + pod.Namespace return pod.Name + "_" + pod.Namespace
} }
// GetPodPriority returns priority of the given pod.
func GetPodPriority(pod *v1.Pod) int32 {
if pod.Spec.Priority != nil {
return *pod.Spec.Priority
}
// When priority of a running pod is nil, it means it was created at a time
// that there was no global default priority class and the priority class
// name of the pod was empty. So, we resolve to the static default priority.
return scheduling.DefaultPriorityWhenNoDefaultClassExists
}
// GetPodStartTime returns start time of the given pod. // GetPodStartTime returns start time of the given pod.
func GetPodStartTime(pod *v1.Pod) *metav1.Time { func GetPodStartTime(pod *v1.Pod) *metav1.Time {
if pod.Status.StartTime != nil { if pod.Status.StartTime != nil {
@ -83,15 +72,15 @@ func GetEarliestPodStartTime(victims *api.Victims) *metav1.Time {
} }
earliestPodStartTime := GetPodStartTime(victims.Pods[0]) earliestPodStartTime := GetPodStartTime(victims.Pods[0])
highestPriority := GetPodPriority(victims.Pods[0]) maxPriority := podutil.GetPodPriority(victims.Pods[0])
for _, pod := range victims.Pods { for _, pod := range victims.Pods {
if GetPodPriority(pod) == highestPriority { if podutil.GetPodPriority(pod) == maxPriority {
if GetPodStartTime(pod).Before(earliestPodStartTime) { if GetPodStartTime(pod).Before(earliestPodStartTime) {
earliestPodStartTime = GetPodStartTime(pod) earliestPodStartTime = GetPodStartTime(pod)
} }
} else if GetPodPriority(pod) > highestPriority { } else if podutil.GetPodPriority(pod) > maxPriority {
highestPriority = GetPodPriority(pod) maxPriority = podutil.GetPodPriority(pod)
earliestPodStartTime = GetPodStartTime(pod) earliestPodStartTime = GetPodStartTime(pod)
} }
} }
@ -132,8 +121,8 @@ func (l *SortableList) Sort() {
// It takes arguments of the type "interface{}" to be used with SortableList, // It takes arguments of the type "interface{}" to be used with SortableList,
// but expects those arguments to be *v1.Pod. // but expects those arguments to be *v1.Pod.
func MoreImportantPod(pod1, pod2 interface{}) bool { func MoreImportantPod(pod1, pod2 interface{}) bool {
p1 := GetPodPriority(pod1.(*v1.Pod)) p1 := podutil.GetPodPriority(pod1.(*v1.Pod))
p2 := GetPodPriority(pod2.(*v1.Pod)) p2 := podutil.GetPodPriority(pod2.(*v1.Pod))
if p1 != p2 { if p1 != p2 {
return p1 > p2 return p1 > p2
} }

View File

@ -22,50 +22,14 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
"k8s.io/kubernetes/pkg/apis/scheduling" "k8s.io/kubernetes/pkg/api/v1/pod"
) )
// TestGetPodPriority tests GetPodPriority function.
func TestGetPodPriority(t *testing.T) {
p := int32(20)
tests := []struct {
name string
pod *v1.Pod
expectedPriority int32
}{
{
name: "no priority pod resolves to static default priority",
pod: &v1.Pod{
Spec: v1.PodSpec{Containers: []v1.Container{
{Name: "container", Image: "image"}},
},
},
expectedPriority: scheduling.DefaultPriorityWhenNoDefaultClassExists,
},
{
name: "pod with priority resolves correctly",
pod: &v1.Pod{
Spec: v1.PodSpec{Containers: []v1.Container{
{Name: "container", Image: "image"}},
Priority: &p,
},
},
expectedPriority: p,
},
}
for _, test := range tests {
if GetPodPriority(test.pod) != test.expectedPriority {
t.Errorf("expected pod priority: %v, got %v", test.expectedPriority, GetPodPriority(test.pod))
}
}
}
// TestSortableList tests SortableList by storing pods in the list and sorting // TestSortableList tests SortableList by storing pods in the list and sorting
// them by their priority. // them by their priority.
func TestSortableList(t *testing.T) { func TestSortableList(t *testing.T) {
higherPriority := func(pod1, pod2 interface{}) bool { higherPriority := func(pod1, pod2 interface{}) bool {
return GetPodPriority(pod1.(*v1.Pod)) > GetPodPriority(pod2.(*v1.Pod)) return pod.GetPodPriority(pod1.(*v1.Pod)) > pod.GetPodPriority(pod2.(*v1.Pod))
} }
podList := SortableList{CompFunc: higherPriority} podList := SortableList{CompFunc: higherPriority}
// Add a few Pods with different priorities from lowest to highest priority. // Add a few Pods with different priorities from lowest to highest priority.