mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-15 06:43:54 +00:00
use table test pattern and replace hardcoded values
This commit is contained in:
parent
960d7fbf09
commit
48b1576980
@ -169,11 +169,6 @@ func makePIDStats(nodeAvailablePIDs string, numberOfRunningProcesses string, pod
|
|||||||
MaxPID: &availablePIDs,
|
MaxPID: &availablePIDs,
|
||||||
NumOfRunningProcesses: &NumberOfRunningProcesses,
|
NumOfRunningProcesses: &NumberOfRunningProcesses,
|
||||||
},
|
},
|
||||||
SystemContainers: []statsapi.ContainerStats{
|
|
||||||
{
|
|
||||||
Name: statsapi.SystemContainerPods,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
Pods: []statsapi.PodStats{},
|
Pods: []statsapi.PodStats{},
|
||||||
}
|
}
|
||||||
@ -402,8 +397,8 @@ func TestPIDPressure_VerifyPodStatus(t *testing.T) {
|
|||||||
podMaker := makePodWithPIDStats
|
podMaker := makePodWithPIDStats
|
||||||
summaryStatsMaker := makePIDStats
|
summaryStatsMaker := makePIDStats
|
||||||
podsToMake := []podToMake{
|
podsToMake := []podToMake{
|
||||||
{name: "below-requests"},
|
{},
|
||||||
{name: "above-requests"},
|
{},
|
||||||
}
|
}
|
||||||
pods := []*v1.Pod{}
|
pods := []*v1.Pod{}
|
||||||
podStats := map[*v1.Pod]statsapi.PodStats{}
|
podStats := map[*v1.Pod]statsapi.PodStats{}
|
||||||
@ -924,26 +919,47 @@ func makeContainersByQOS(class v1.PodQOSClass) []v1.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPIDPressure(t *testing.T) {
|
func TestPIDPressure(t *testing.T) {
|
||||||
podMaker := makePodWithPIDStats
|
|
||||||
summaryStatsMaker := makePIDStats
|
// Define test cases
|
||||||
podsToMake := []podToMake{
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
podsToMake []podToMake
|
||||||
|
evictPodIndex int
|
||||||
|
noPressurePIDUsage string
|
||||||
|
pressurePIDUsageWithGracePeriod string
|
||||||
|
pressurePIDUsageWithoutGracePeriod string
|
||||||
|
totalPID string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "eviction due to pid pressure",
|
||||||
|
podsToMake: []podToMake{
|
||||||
{name: "high-priority-high-usage", priority: highPriority, pidUsage: 900},
|
{name: "high-priority-high-usage", priority: highPriority, pidUsage: 900},
|
||||||
{name: "default-priority-low-usage", priority: defaultPriority, pidUsage: 100},
|
{name: "default-priority-low-usage", priority: defaultPriority, pidUsage: 100},
|
||||||
{name: "default-priority-medium-usage", priority: defaultPriority, pidUsage: 400},
|
{name: "default-priority-medium-usage", priority: defaultPriority, pidUsage: 400},
|
||||||
{name: "low-priority-high-usage", priority: lowPriority, pidUsage: 600},
|
{name: "low-priority-high-usage", priority: lowPriority, pidUsage: 600},
|
||||||
{name: "low-priority-low-usage", priority: lowPriority, pidUsage: 50},
|
{name: "low-priority-low-usage", priority: lowPriority, pidUsage: 50},
|
||||||
|
},
|
||||||
|
evictPodIndex: 3, // we expect the low-priority-high-usage pod to be evicted
|
||||||
|
noPressurePIDUsage: "300",
|
||||||
|
pressurePIDUsageWithGracePeriod: "700",
|
||||||
|
pressurePIDUsageWithoutGracePeriod: "1200",
|
||||||
|
totalPID: "2000",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
podMaker := makePodWithPIDStats
|
||||||
|
summaryStatsMaker := makePIDStats
|
||||||
pods := []*v1.Pod{}
|
pods := []*v1.Pod{}
|
||||||
podStats := map[*v1.Pod]statsapi.PodStats{}
|
podStats := map[*v1.Pod]statsapi.PodStats{}
|
||||||
for _, podToMake := range podsToMake {
|
for _, podToMake := range tc.podsToMake {
|
||||||
pod, podStat := podMaker(podToMake.name, podToMake.priority, podToMake.pidUsage)
|
pod, podStat := podMaker(podToMake.name, podToMake.priority, podToMake.pidUsage)
|
||||||
pods = append(pods, pod)
|
pods = append(pods, pod)
|
||||||
podStats[pod] = podStat
|
podStats[pod] = podStat
|
||||||
}
|
}
|
||||||
podToEvict := pods[3]
|
podToEvict := pods[tc.evictPodIndex]
|
||||||
activePodsFunc := func() []*v1.Pod {
|
activePodsFunc := func() []*v1.Pod { return pods }
|
||||||
return pods
|
|
||||||
}
|
|
||||||
|
|
||||||
fakeClock := testingclock.NewFakeClock(time.Now())
|
fakeClock := testingclock.NewFakeClock(time.Now())
|
||||||
podKiller := &mockPodKiller{}
|
podKiller := &mockPodKiller{}
|
||||||
@ -972,7 +988,8 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
summaryProvider := &fakeSummaryProvider{result: summaryStatsMaker("2000", "300", podStats)}
|
|
||||||
|
summaryProvider := &fakeSummaryProvider{result: summaryStatsMaker(tc.totalPID, tc.noPressurePIDUsage, podStats)}
|
||||||
manager := &managerImpl{
|
manager := &managerImpl{
|
||||||
clock: fakeClock,
|
clock: fakeClock,
|
||||||
killPodFunc: podKiller.killPodNow,
|
killPodFunc: podKiller.killPodNow,
|
||||||
@ -986,7 +1003,7 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
thresholdsFirstObservedAt: thresholdsObservedAt{},
|
thresholdsFirstObservedAt: thresholdsObservedAt{},
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a best effort pod to test admission
|
// create a pod to test admission
|
||||||
podToAdmit, _ := podMaker("pod-to-admit", defaultPriority, 50)
|
podToAdmit, _ := podMaker("pod-to-admit", defaultPriority, 50)
|
||||||
|
|
||||||
// synchronize
|
// synchronize
|
||||||
@ -996,9 +1013,9 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
t.Fatalf("Manager expects no error but got %v", err)
|
t.Fatalf("Manager expects no error but got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// we should not have disk pressure
|
// we should not have PID pressure
|
||||||
if manager.IsUnderDiskPressure() {
|
if manager.IsUnderPIDPressure() {
|
||||||
t.Fatalf("Manager should not report disk pressure")
|
t.Fatalf("Manager should not report PID pressure")
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to admit our pod (should succeed)
|
// try to admit our pod (should succeed)
|
||||||
@ -1008,7 +1025,7 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
|
|
||||||
// induce soft threshold for PID pressure
|
// induce soft threshold for PID pressure
|
||||||
fakeClock.Step(1 * time.Minute)
|
fakeClock.Step(1 * time.Minute)
|
||||||
summaryProvider.result = summaryStatsMaker("2000", "700", podStats)
|
summaryProvider.result = summaryStatsMaker(tc.totalPID, tc.pressurePIDUsageWithGracePeriod, podStats)
|
||||||
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1057,7 +1074,7 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
|
|
||||||
// remove PID pressure by simulating increased PID availability
|
// remove PID pressure by simulating increased PID availability
|
||||||
fakeClock.Step(20 * time.Minute)
|
fakeClock.Step(20 * time.Minute)
|
||||||
summaryProvider.result = summaryStatsMaker("2000", "300", podStats) // Simulate increased PID availability
|
summaryProvider.result = summaryStatsMaker(tc.totalPID, tc.noPressurePIDUsage, podStats) // Simulate increased PID availability
|
||||||
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1071,7 +1088,7 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
|
|
||||||
// re-induce PID pressure
|
// re-induce PID pressure
|
||||||
fakeClock.Step(1 * time.Minute)
|
fakeClock.Step(1 * time.Minute)
|
||||||
summaryProvider.result = summaryStatsMaker("2000", "1200", podStats)
|
summaryProvider.result = summaryStatsMaker(tc.totalPID, tc.pressurePIDUsageWithoutGracePeriod, podStats)
|
||||||
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1102,7 +1119,7 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
|
|
||||||
// reduce PID pressure
|
// reduce PID pressure
|
||||||
fakeClock.Step(1 * time.Minute)
|
fakeClock.Step(1 * time.Minute)
|
||||||
summaryProvider.result = summaryStatsMaker("2000", "300", podStats)
|
summaryProvider.result = summaryStatsMaker(tc.totalPID, tc.noPressurePIDUsage, podStats)
|
||||||
podKiller.pod = nil // reset state
|
podKiller.pod = nil // reset state
|
||||||
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
||||||
|
|
||||||
@ -1127,7 +1144,7 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
|
|
||||||
// move the clock past the transition period
|
// move the clock past the transition period
|
||||||
fakeClock.Step(5 * time.Minute)
|
fakeClock.Step(5 * time.Minute)
|
||||||
summaryProvider.result = summaryStatsMaker("2000", "300", podStats)
|
summaryProvider.result = summaryStatsMaker(tc.totalPID, tc.noPressurePIDUsage, podStats)
|
||||||
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
_, err = manager.synchronize(diskInfoProvider, activePodsFunc)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1148,6 +1165,8 @@ func TestPIDPressure(t *testing.T) {
|
|||||||
if result := manager.Admit(&lifecycle.PodAdmitAttributes{Pod: podToAdmit}); !result.Admit {
|
if result := manager.Admit(&lifecycle.PodAdmitAttributes{Pod: podToAdmit}); !result.Admit {
|
||||||
t.Fatalf("Admit pod: %v, expected: %v, actual: %v", podToAdmit, true, result.Admit)
|
t.Fatalf("Admit pod: %v, expected: %v, actual: %v", podToAdmit, true, result.Admit)
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAdmitUnderNodeConditions(t *testing.T) {
|
func TestAdmitUnderNodeConditions(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user