mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 10:19:50 +00:00
add: add a test case for Activate
This commit is contained in:
parent
a95b8b5085
commit
102d79ec93
@ -1292,13 +1292,17 @@ func TestPriorityQueue_Delete(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPriorityQueue_Activate(t *testing.T) {
|
func TestPriorityQueue_Activate(t *testing.T) {
|
||||||
|
metrics.Register()
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
qPodInfoInUnschedulablePods []*framework.QueuedPodInfo
|
qPodInfoInUnschedulablePods []*framework.QueuedPodInfo
|
||||||
qPodInfoInPodBackoffQ []*framework.QueuedPodInfo
|
qPodInfoInPodBackoffQ []*framework.QueuedPodInfo
|
||||||
qPodInActiveQ []*v1.Pod
|
qPodInActiveQ []*v1.Pod
|
||||||
qPodInfoToActivate *framework.QueuedPodInfo
|
qPodInfoToActivate *framework.QueuedPodInfo
|
||||||
|
qPodInInFlightPod *v1.Pod
|
||||||
|
expectedInFlightEvent *clusterEvent
|
||||||
want []*framework.QueuedPodInfo
|
want []*framework.QueuedPodInfo
|
||||||
|
qHintEnabled bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "pod already in activeQ",
|
name: "pod already in activeQ",
|
||||||
@ -1311,6 +1315,21 @@ func TestPriorityQueue_Activate(t *testing.T) {
|
|||||||
qPodInfoToActivate: &framework.QueuedPodInfo{PodInfo: highPriNominatedPodInfo},
|
qPodInfoToActivate: &framework.QueuedPodInfo{PodInfo: highPriNominatedPodInfo},
|
||||||
want: []*framework.QueuedPodInfo{},
|
want: []*framework.QueuedPodInfo{},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "[QHint] pod not in unschedulablePods/podBackoffQ but in-flight",
|
||||||
|
qPodInfoToActivate: &framework.QueuedPodInfo{PodInfo: highPriNominatedPodInfo},
|
||||||
|
qPodInInFlightPod: highPriNominatedPodInfo.Pod,
|
||||||
|
expectedInFlightEvent: &clusterEvent{oldObj: (*v1.Pod)(nil), newObj: highPriNominatedPodInfo.Pod, event: framework.EventForceActivate},
|
||||||
|
want: []*framework.QueuedPodInfo{},
|
||||||
|
qHintEnabled: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "[QHint] pod not in unschedulablePods/podBackoffQ and not in-flight",
|
||||||
|
qPodInfoToActivate: &framework.QueuedPodInfo{PodInfo: highPriNominatedPodInfo},
|
||||||
|
qPodInInFlightPod: medPriorityPodInfo.Pod, // different pod is in-flight
|
||||||
|
want: []*framework.QueuedPodInfo{},
|
||||||
|
qHintEnabled: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "pod in unschedulablePods",
|
name: "pod in unschedulablePods",
|
||||||
qPodInfoInUnschedulablePods: []*framework.QueuedPodInfo{{PodInfo: highPriNominatedPodInfo}},
|
qPodInfoInUnschedulablePods: []*framework.QueuedPodInfo{{PodInfo: highPriNominatedPodInfo}},
|
||||||
@ -1327,12 +1346,30 @@ func TestPriorityQueue_Activate(t *testing.T) {
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.SchedulerQueueingHints, tt.qHintEnabled)
|
||||||
var objs []runtime.Object
|
var objs []runtime.Object
|
||||||
logger, ctx := ktesting.NewTestContext(t)
|
logger, ctx := ktesting.NewTestContext(t)
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
q := NewTestQueueWithObjects(ctx, newDefaultQueueSort(), objs)
|
q := NewTestQueueWithObjects(ctx, newDefaultQueueSort(), objs)
|
||||||
|
|
||||||
|
if tt.qPodInInFlightPod != nil {
|
||||||
|
// Put -> Pop the Pod to make it registered in inFlightPods.
|
||||||
|
q.activeQ.underLock(func(unlockedActiveQ unlockedActiveQueuer) {
|
||||||
|
unlockedActiveQ.AddOrUpdate(newQueuedPodInfoForLookup(tt.qPodInInFlightPod))
|
||||||
|
})
|
||||||
|
p, err := q.activeQ.pop(logger)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Pop failed: %v", err)
|
||||||
|
}
|
||||||
|
if p.Pod.Name != tt.qPodInInFlightPod.Name {
|
||||||
|
t.Errorf("Unexpected popped pod: %v", p.Pod.Name)
|
||||||
|
}
|
||||||
|
if len(q.activeQ.listInFlightEvents()) != 1 {
|
||||||
|
t.Fatal("Expected the pod to be recorded in in-flight events, but it doesn't")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Prepare activeQ/unschedulablePods/podBackoffQ according to the table
|
// Prepare activeQ/unschedulablePods/podBackoffQ according to the table
|
||||||
for _, qPod := range tt.qPodInActiveQ {
|
for _, qPod := range tt.qPodInActiveQ {
|
||||||
q.Add(logger, qPod)
|
q.Add(logger, qPod)
|
||||||
@ -1351,7 +1388,29 @@ func TestPriorityQueue_Activate(t *testing.T) {
|
|||||||
|
|
||||||
// Check the result after activation by the length of activeQ
|
// Check the result after activation by the length of activeQ
|
||||||
if wantLen := len(tt.want); q.activeQ.len() != wantLen {
|
if wantLen := len(tt.want); q.activeQ.len() != wantLen {
|
||||||
t.Errorf("length compare: want %v, got %v", wantLen, q.activeQ.len())
|
t.Fatalf("length compare: want %v, got %v", wantLen, q.activeQ.len())
|
||||||
|
}
|
||||||
|
|
||||||
|
if tt.expectedInFlightEvent != nil {
|
||||||
|
if len(q.activeQ.listInFlightEvents()) != 2 {
|
||||||
|
t.Fatalf("Expected two in-flight event to be recorded, but got %v events", len(q.activeQ.listInFlightEvents()))
|
||||||
|
}
|
||||||
|
found := false
|
||||||
|
for _, e := range q.activeQ.listInFlightEvents() {
|
||||||
|
event, ok := e.(*clusterEvent)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if d := cmp.Diff(tt.expectedInFlightEvent, event, cmpopts.EquateComparable(clusterEvent{})); d != "" {
|
||||||
|
t.Fatalf("Unexpected in-flight event (-want, +got):\n%s", d)
|
||||||
|
}
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
t.Fatalf("Expected in-flight event to be recorded, but it wasn't.")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the specific pod exists in activeQ
|
// Check if the specific pod exists in activeQ
|
||||||
|
Loading…
Reference in New Issue
Block a user