mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 02:41:25 +00:00
Merge pull request #101909 from nolancon/cpu-mgr-testing
Additional cases for reconcileState testing
This commit is contained in:
commit
08bf54678e
@ -705,19 +705,46 @@ func TestCPUManagerRemove(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestReconcileState(t *testing.T) {
|
func TestReconcileState(t *testing.T) {
|
||||||
|
testPolicy, _ := NewStaticPolicy(
|
||||||
|
&topology.CPUTopology{
|
||||||
|
NumCPUs: 8,
|
||||||
|
NumSockets: 2,
|
||||||
|
NumCores: 4,
|
||||||
|
CPUDetails: map[int]topology.CPUInfo{
|
||||||
|
0: {CoreID: 0, SocketID: 0},
|
||||||
|
1: {CoreID: 1, SocketID: 0},
|
||||||
|
2: {CoreID: 2, SocketID: 0},
|
||||||
|
3: {CoreID: 3, SocketID: 0},
|
||||||
|
4: {CoreID: 0, SocketID: 1},
|
||||||
|
5: {CoreID: 1, SocketID: 1},
|
||||||
|
6: {CoreID: 2, SocketID: 1},
|
||||||
|
7: {CoreID: 3, SocketID: 1},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
cpuset.NewCPUSet(),
|
||||||
|
topologymanager.NewFakeManager(),
|
||||||
|
nil)
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
description string
|
description string
|
||||||
|
policy Policy
|
||||||
activePods []*v1.Pod
|
activePods []*v1.Pod
|
||||||
pspPS v1.PodStatus
|
pspPS v1.PodStatus
|
||||||
pspFound bool
|
pspFound bool
|
||||||
|
updateErr error
|
||||||
stAssignments state.ContainerCPUAssignments
|
stAssignments state.ContainerCPUAssignments
|
||||||
stDefaultCPUSet cpuset.CPUSet
|
stDefaultCPUSet cpuset.CPUSet
|
||||||
updateErr error
|
lastUpdateStAssignments state.ContainerCPUAssignments
|
||||||
|
lastUpdateStDefaultCPUSet cpuset.CPUSet
|
||||||
|
expectStAssignments state.ContainerCPUAssignments
|
||||||
|
expectStDefaultCPUSet cpuset.CPUSet
|
||||||
expectSucceededContainerName string
|
expectSucceededContainerName string
|
||||||
expectFailedContainerName string
|
expectFailedContainerName string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
description: "cpu manager reconclie - no error",
|
description: "cpu manager reconcile - no error",
|
||||||
|
policy: testPolicy,
|
||||||
activePods: []*v1.Pod{
|
activePods: []*v1.Pod{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -745,18 +772,27 @@ func TestReconcileState(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
pspFound: true,
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
stAssignments: state.ContainerCPUAssignments{
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
"fakePodUID": map[string]cpuset.CPUSet{
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
updateErr: nil,
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
expectSucceededContainerName: "fakeContainerName",
|
expectSucceededContainerName: "fakeContainerName",
|
||||||
expectFailedContainerName: "",
|
expectFailedContainerName: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cpu manager reconcile init container - no error",
|
description: "cpu manager reconcile init container - no error",
|
||||||
|
policy: testPolicy,
|
||||||
activePods: []*v1.Pod{
|
activePods: []*v1.Pod{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -784,18 +820,27 @@ func TestReconcileState(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
pspFound: true,
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
stAssignments: state.ContainerCPUAssignments{
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
"fakePodUID": map[string]cpuset.CPUSet{
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
updateErr: nil,
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
expectSucceededContainerName: "fakeContainerName",
|
expectSucceededContainerName: "fakeContainerName",
|
||||||
expectFailedContainerName: "",
|
expectFailedContainerName: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cpu manager reconcile - pod status not found",
|
description: "cpu manager reconcile - pod status not found",
|
||||||
|
policy: testPolicy,
|
||||||
activePods: []*v1.Pod{
|
activePods: []*v1.Pod{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -813,14 +858,19 @@ func TestReconcileState(t *testing.T) {
|
|||||||
},
|
},
|
||||||
pspPS: v1.PodStatus{},
|
pspPS: v1.PodStatus{},
|
||||||
pspFound: false,
|
pspFound: false,
|
||||||
|
updateErr: nil,
|
||||||
stAssignments: state.ContainerCPUAssignments{},
|
stAssignments: state.ContainerCPUAssignments{},
|
||||||
stDefaultCPUSet: cpuset.NewCPUSet(),
|
stDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
updateErr: nil,
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
expectSucceededContainerName: "",
|
expectSucceededContainerName: "",
|
||||||
expectFailedContainerName: "",
|
expectFailedContainerName: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cpu manager reconcile - container state not found",
|
description: "cpu manager reconcile - container state not found",
|
||||||
|
policy: testPolicy,
|
||||||
activePods: []*v1.Pod{
|
activePods: []*v1.Pod{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -845,14 +895,19 @@ func TestReconcileState(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
pspFound: true,
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
stAssignments: state.ContainerCPUAssignments{},
|
stAssignments: state.ContainerCPUAssignments{},
|
||||||
stDefaultCPUSet: cpuset.NewCPUSet(),
|
stDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
updateErr: nil,
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
expectSucceededContainerName: "",
|
expectSucceededContainerName: "",
|
||||||
expectFailedContainerName: "fakeContainerName",
|
expectFailedContainerName: "fakeContainerName",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cpu manager reconclie - cpuset is empty",
|
description: "cpu manager reconclie - cpuset is empty",
|
||||||
|
policy: testPolicy,
|
||||||
activePods: []*v1.Pod{
|
activePods: []*v1.Pod{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -880,18 +935,27 @@ func TestReconcileState(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
pspFound: true,
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
stAssignments: state.ContainerCPUAssignments{
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
"fakePodUID": map[string]cpuset.CPUSet{
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
"fakeContainerName": cpuset.NewCPUSet(),
|
"fakeContainerName": cpuset.NewCPUSet(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
stDefaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7),
|
stDefaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7),
|
||||||
updateErr: nil,
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7),
|
||||||
expectSucceededContainerName: "",
|
expectSucceededContainerName: "",
|
||||||
expectFailedContainerName: "fakeContainerName",
|
expectFailedContainerName: "fakeContainerName",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "cpu manager reconclie - container update error",
|
description: "cpu manager reconclie - container update error",
|
||||||
|
policy: testPolicy,
|
||||||
activePods: []*v1.Pod{
|
activePods: []*v1.Pod{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -919,23 +983,184 @@ func TestReconcileState(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
pspFound: true,
|
pspFound: true,
|
||||||
|
updateErr: fmt.Errorf("fake container update error"),
|
||||||
stAssignments: state.ContainerCPUAssignments{
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
"fakePodUID": map[string]cpuset.CPUSet{
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
updateErr: fmt.Errorf("fake container update error"),
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
expectSucceededContainerName: "",
|
expectSucceededContainerName: "",
|
||||||
expectFailedContainerName: "fakeContainerName",
|
expectFailedContainerName: "fakeContainerName",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
description: "cpu manager reconcile - state has inactive container",
|
||||||
|
policy: testPolicy,
|
||||||
|
activePods: []*v1.Pod{
|
||||||
|
{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "fakePodName",
|
||||||
|
UID: "fakePodUID",
|
||||||
|
},
|
||||||
|
Spec: v1.PodSpec{
|
||||||
|
Containers: []v1.Container{
|
||||||
|
{
|
||||||
|
Name: "fakeContainerName",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pspPS: v1.PodStatus{
|
||||||
|
ContainerStatuses: []v1.ContainerStatus{
|
||||||
|
{
|
||||||
|
Name: "fakeContainerName",
|
||||||
|
ContainerID: "docker://fakeContainerID",
|
||||||
|
State: v1.ContainerState{
|
||||||
|
Running: &v1.ContainerStateRunning{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
"secondfakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"secondfakeContainerName": cpuset.NewCPUSet(3, 4),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stDefaultCPUSet: cpuset.NewCPUSet(5, 6, 7),
|
||||||
|
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
|
expectSucceededContainerName: "fakeContainerName",
|
||||||
|
expectFailedContainerName: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "cpu manager reconcile - last update state is current",
|
||||||
|
policy: testPolicy,
|
||||||
|
activePods: []*v1.Pod{
|
||||||
|
{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "fakePodName",
|
||||||
|
UID: "fakePodUID",
|
||||||
|
},
|
||||||
|
Spec: v1.PodSpec{
|
||||||
|
Containers: []v1.Container{
|
||||||
|
{
|
||||||
|
Name: "fakeContainerName",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pspPS: v1.PodStatus{
|
||||||
|
ContainerStatuses: []v1.ContainerStatus{
|
||||||
|
{
|
||||||
|
Name: "fakeContainerName",
|
||||||
|
ContainerID: "docker://fakeContainerID",
|
||||||
|
State: v1.ContainerState{
|
||||||
|
Running: &v1.ContainerStateRunning{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stDefaultCPUSet: cpuset.NewCPUSet(5, 6, 7),
|
||||||
|
lastUpdateStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(5, 6, 7),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(5, 6, 7),
|
||||||
|
expectSucceededContainerName: "fakeContainerName",
|
||||||
|
expectFailedContainerName: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "cpu manager reconcile - last update state is not current",
|
||||||
|
policy: testPolicy,
|
||||||
|
activePods: []*v1.Pod{
|
||||||
|
{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "fakePodName",
|
||||||
|
UID: "fakePodUID",
|
||||||
|
},
|
||||||
|
Spec: v1.PodSpec{
|
||||||
|
Containers: []v1.Container{
|
||||||
|
{
|
||||||
|
Name: "fakeContainerName",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pspPS: v1.PodStatus{
|
||||||
|
ContainerStatuses: []v1.ContainerStatus{
|
||||||
|
{
|
||||||
|
Name: "fakeContainerName",
|
||||||
|
ContainerID: "docker://fakeContainerID",
|
||||||
|
State: v1.ContainerState{
|
||||||
|
Running: &v1.ContainerStateRunning{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pspFound: true,
|
||||||
|
updateErr: nil,
|
||||||
|
stAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
stDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
|
lastUpdateStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(3, 4),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(1, 2, 5, 6, 7),
|
||||||
|
expectStAssignments: state.ContainerCPUAssignments{
|
||||||
|
"fakePodUID": map[string]cpuset.CPUSet{
|
||||||
|
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectStDefaultCPUSet: cpuset.NewCPUSet(3, 4, 5, 6, 7),
|
||||||
|
expectSucceededContainerName: "fakeContainerName",
|
||||||
|
expectFailedContainerName: "",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
mgr := &manager{
|
mgr := &manager{
|
||||||
policy: &mockPolicy{
|
policy: testCase.policy,
|
||||||
err: nil,
|
|
||||||
},
|
|
||||||
state: &mockState{
|
state: &mockState{
|
||||||
assignments: testCase.stAssignments,
|
assignments: testCase.stAssignments,
|
||||||
defaultCPUSet: testCase.stDefaultCPUSet,
|
defaultCPUSet: testCase.stDefaultCPUSet,
|
||||||
@ -956,6 +1181,18 @@ func TestReconcileState(t *testing.T) {
|
|||||||
mgr.sourcesReady = &sourcesReadyStub{}
|
mgr.sourcesReady = &sourcesReadyStub{}
|
||||||
success, failure := mgr.reconcileState()
|
success, failure := mgr.reconcileState()
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(testCase.expectStAssignments, mgr.state.GetCPUAssignments()) {
|
||||||
|
t.Errorf("%v", testCase.description)
|
||||||
|
t.Errorf("Expected state container cpu assignments: %v, actual: %v", testCase.expectStAssignments, mgr.state.GetCPUAssignments())
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(testCase.expectStDefaultCPUSet, mgr.state.GetDefaultCPUSet()) {
|
||||||
|
t.Errorf("%v", testCase.description)
|
||||||
|
t.Errorf("Expected state default cpuset: %v, actual: %v", testCase.expectStDefaultCPUSet, mgr.state.GetDefaultCPUSet())
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if testCase.expectSucceededContainerName != "" {
|
if testCase.expectSucceededContainerName != "" {
|
||||||
// Search succeeded reconciled containers for the supplied name.
|
// Search succeeded reconciled containers for the supplied name.
|
||||||
foundSucceededContainer := false
|
foundSucceededContainer := false
|
||||||
|
Loading…
Reference in New Issue
Block a user