mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 10:20:51 +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) {
|
||||
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 {
|
||||
description string
|
||||
policy Policy
|
||||
activePods []*v1.Pod
|
||||
pspPS v1.PodStatus
|
||||
pspFound bool
|
||||
updateErr error
|
||||
stAssignments state.ContainerCPUAssignments
|
||||
stDefaultCPUSet cpuset.CPUSet
|
||||
updateErr error
|
||||
lastUpdateStAssignments state.ContainerCPUAssignments
|
||||
lastUpdateStDefaultCPUSet cpuset.CPUSet
|
||||
expectStAssignments state.ContainerCPUAssignments
|
||||
expectStDefaultCPUSet cpuset.CPUSet
|
||||
expectSucceededContainerName string
|
||||
expectFailedContainerName string
|
||||
}{
|
||||
{
|
||||
description: "cpu manager reconclie - no error",
|
||||
description: "cpu manager reconcile - no error",
|
||||
policy: testPolicy,
|
||||
activePods: []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -745,18 +772,27 @@ func TestReconcileState(t *testing.T) {
|
||||
},
|
||||
},
|
||||
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),
|
||||
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",
|
||||
expectFailedContainerName: "",
|
||||
},
|
||||
{
|
||||
description: "cpu manager reconcile init container - no error",
|
||||
policy: testPolicy,
|
||||
activePods: []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -784,18 +820,27 @@ func TestReconcileState(t *testing.T) {
|
||||
},
|
||||
},
|
||||
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),
|
||||
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",
|
||||
expectFailedContainerName: "",
|
||||
},
|
||||
{
|
||||
description: "cpu manager reconcile - pod status not found",
|
||||
policy: testPolicy,
|
||||
activePods: []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -813,14 +858,19 @@ func TestReconcileState(t *testing.T) {
|
||||
},
|
||||
pspPS: v1.PodStatus{},
|
||||
pspFound: false,
|
||||
updateErr: nil,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(),
|
||||
updateErr: nil,
|
||||
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||
expectStAssignments: state.ContainerCPUAssignments{},
|
||||
expectStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||
expectSucceededContainerName: "",
|
||||
expectFailedContainerName: "",
|
||||
},
|
||||
{
|
||||
description: "cpu manager reconcile - container state not found",
|
||||
policy: testPolicy,
|
||||
activePods: []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -845,14 +895,19 @@ func TestReconcileState(t *testing.T) {
|
||||
},
|
||||
},
|
||||
pspFound: true,
|
||||
updateErr: nil,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(),
|
||||
updateErr: nil,
|
||||
lastUpdateStAssignments: state.ContainerCPUAssignments{},
|
||||
lastUpdateStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||
expectStAssignments: state.ContainerCPUAssignments{},
|
||||
expectStDefaultCPUSet: cpuset.NewCPUSet(),
|
||||
expectSucceededContainerName: "",
|
||||
expectFailedContainerName: "fakeContainerName",
|
||||
},
|
||||
{
|
||||
description: "cpu manager reconclie - cpuset is empty",
|
||||
policy: testPolicy,
|
||||
activePods: []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -880,18 +935,27 @@ func TestReconcileState(t *testing.T) {
|
||||
},
|
||||
},
|
||||
pspFound: true,
|
||||
updateErr: nil,
|
||||
stAssignments: state.ContainerCPUAssignments{
|
||||
"fakePodUID": map[string]cpuset.CPUSet{
|
||||
"fakeContainerName": cpuset.NewCPUSet(),
|
||||
},
|
||||
},
|
||||
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: "",
|
||||
expectFailedContainerName: "fakeContainerName",
|
||||
},
|
||||
{
|
||||
description: "cpu manager reconclie - container update error",
|
||||
policy: testPolicy,
|
||||
activePods: []*v1.Pod{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -919,23 +983,184 @@ func TestReconcileState(t *testing.T) {
|
||||
},
|
||||
},
|
||||
pspFound: true,
|
||||
updateErr: fmt.Errorf("fake container update error"),
|
||||
stAssignments: state.ContainerCPUAssignments{
|
||||
"fakePodUID": map[string]cpuset.CPUSet{
|
||||
"fakeContainerName": cpuset.NewCPUSet(1, 2),
|
||||
},
|
||||
},
|
||||
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: "",
|
||||
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 {
|
||||
mgr := &manager{
|
||||
policy: &mockPolicy{
|
||||
err: nil,
|
||||
},
|
||||
policy: testCase.policy,
|
||||
state: &mockState{
|
||||
assignments: testCase.stAssignments,
|
||||
defaultCPUSet: testCase.stDefaultCPUSet,
|
||||
@ -956,6 +1181,18 @@ func TestReconcileState(t *testing.T) {
|
||||
mgr.sourcesReady = &sourcesReadyStub{}
|
||||
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 != "" {
|
||||
// Search succeeded reconciled containers for the supplied name.
|
||||
foundSucceededContainer := false
|
||||
|
Loading…
Reference in New Issue
Block a user