mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #101265 from s-ito-ts/ut_kubelet_topology
Adds unit tests for pkg/kubelet/cm/cpumanager/topology
This commit is contained in:
commit
e259943f7f
@ -21,6 +21,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
cadvisorapi "github.com/google/cadvisor/info/v1"
|
cadvisorapi "github.com/google/cadvisor/info/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_Discover(t *testing.T) {
|
func Test_Discover(t *testing.T) {
|
||||||
@ -204,3 +205,405 @@ func Test_Discover(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsKeepOnly(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {},
|
||||||
|
1: {},
|
||||||
|
2: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
cpus cpuset.CPUSet
|
||||||
|
want CPUDetails
|
||||||
|
}{{
|
||||||
|
name: "cpus is in CPUDetails.",
|
||||||
|
cpus: cpuset.NewCPUSet(0, 1),
|
||||||
|
want: map[int]CPUInfo{
|
||||||
|
0: {},
|
||||||
|
1: {},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
name: "cpus is not in CPUDetails.",
|
||||||
|
cpus: cpuset.NewCPUSet(3),
|
||||||
|
want: CPUDetails{},
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.KeepOnly(tt.cpus)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("KeepOnly() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsNUMANodes(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
details CPUDetails
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Get CPUset of NUMANode IDs",
|
||||||
|
details: map[int]CPUInfo{
|
||||||
|
0: {NUMANodeID: 0},
|
||||||
|
1: {NUMANodeID: 0},
|
||||||
|
2: {NUMANodeID: 1},
|
||||||
|
3: {NUMANodeID: 1},
|
||||||
|
},
|
||||||
|
want: cpuset.NewCPUSet(0, 1),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := tt.details.NUMANodes()
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("NUMANodes() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsNUMANodesInSockets(t *testing.T) {
|
||||||
|
|
||||||
|
var details1 CPUDetails
|
||||||
|
details1 = map[int]CPUInfo{
|
||||||
|
0: {SocketID: 0, NUMANodeID: 0},
|
||||||
|
1: {SocketID: 1, NUMANodeID: 0},
|
||||||
|
2: {SocketID: 2, NUMANodeID: 1},
|
||||||
|
3: {SocketID: 3, NUMANodeID: 1},
|
||||||
|
}
|
||||||
|
|
||||||
|
// poorly designed mainboards
|
||||||
|
var details2 CPUDetails
|
||||||
|
details2 = map[int]CPUInfo{
|
||||||
|
0: {SocketID: 0, NUMANodeID: 0},
|
||||||
|
1: {SocketID: 0, NUMANodeID: 1},
|
||||||
|
2: {SocketID: 1, NUMANodeID: 2},
|
||||||
|
3: {SocketID: 1, NUMANodeID: 3},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
details CPUDetails
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Socket IDs is in CPUDetails.",
|
||||||
|
details: details1,
|
||||||
|
ids: []int{0, 1, 2},
|
||||||
|
want: cpuset.NewCPUSet(0, 1),
|
||||||
|
}, {
|
||||||
|
name: "Socket IDs is not in CPUDetails.",
|
||||||
|
details: details1,
|
||||||
|
ids: []int{4},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}, {
|
||||||
|
name: "Socket IDs is in CPUDetails. (poorly designed mainboards)",
|
||||||
|
details: details2,
|
||||||
|
ids: []int{0},
|
||||||
|
want: cpuset.NewCPUSet(0, 1),
|
||||||
|
}, {
|
||||||
|
name: "Socket IDs is not in CPUDetails. (poorly designed mainboards)",
|
||||||
|
details: details2,
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := tt.details.NUMANodesInSockets(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("NUMANodesInSockets() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsSockets(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
details CPUDetails
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Get CPUset of Socket IDs",
|
||||||
|
details: map[int]CPUInfo{
|
||||||
|
0: {SocketID: 0},
|
||||||
|
1: {SocketID: 0},
|
||||||
|
2: {SocketID: 1},
|
||||||
|
3: {SocketID: 1},
|
||||||
|
},
|
||||||
|
want: cpuset.NewCPUSet(0, 1),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := tt.details.Sockets()
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("Sockets() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCPUsInSockets(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {SocketID: 0},
|
||||||
|
1: {SocketID: 0},
|
||||||
|
2: {SocketID: 1},
|
||||||
|
3: {SocketID: 2},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Socket IDs is in CPUDetails.",
|
||||||
|
ids: []int{0, 1},
|
||||||
|
want: cpuset.NewCPUSet(0, 1, 2),
|
||||||
|
}, {
|
||||||
|
name: "Socket IDs is not in CPUDetails.",
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.CPUsInSockets(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("CPUsInSockets() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsSocketsInNUMANodes(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {NUMANodeID: 0, SocketID: 0},
|
||||||
|
1: {NUMANodeID: 0, SocketID: 1},
|
||||||
|
2: {NUMANodeID: 1, SocketID: 2},
|
||||||
|
3: {NUMANodeID: 2, SocketID: 3},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "NUMANodes IDs is in CPUDetails.",
|
||||||
|
ids: []int{0, 1},
|
||||||
|
want: cpuset.NewCPUSet(0, 1, 2),
|
||||||
|
}, {
|
||||||
|
name: "NUMANodes IDs is not in CPUDetails.",
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.SocketsInNUMANodes(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("SocketsInNUMANodes() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCores(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
details CPUDetails
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Get CPUset of Cores",
|
||||||
|
details: map[int]CPUInfo{
|
||||||
|
0: {CoreID: 0},
|
||||||
|
1: {CoreID: 0},
|
||||||
|
2: {CoreID: 1},
|
||||||
|
3: {CoreID: 1},
|
||||||
|
},
|
||||||
|
want: cpuset.NewCPUSet(0, 1),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := tt.details.Cores()
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("Cores() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCoresInNUMANodes(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {NUMANodeID: 0, CoreID: 0},
|
||||||
|
1: {NUMANodeID: 0, CoreID: 1},
|
||||||
|
2: {NUMANodeID: 1, CoreID: 2},
|
||||||
|
3: {NUMANodeID: 2, CoreID: 3},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "NUMANodes IDs is in CPUDetails.",
|
||||||
|
ids: []int{0, 1},
|
||||||
|
want: cpuset.NewCPUSet(0, 1, 2),
|
||||||
|
}, {
|
||||||
|
name: "NUMANodes IDs is not in CPUDetails.",
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.CoresInNUMANodes(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("CoresInNUMANodes() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCoresInSockets(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {SocketID: 0, CoreID: 0},
|
||||||
|
1: {SocketID: 0, CoreID: 1},
|
||||||
|
2: {SocketID: 1, CoreID: 2},
|
||||||
|
3: {SocketID: 2, CoreID: 3},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Socket IDs is in CPUDetails.",
|
||||||
|
ids: []int{0, 1},
|
||||||
|
want: cpuset.NewCPUSet(0, 1, 2),
|
||||||
|
}, {
|
||||||
|
name: "Socket IDs is not in CPUDetails.",
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.CoresInSockets(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("CoresInSockets() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCPUs(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
details CPUDetails
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Get CPUset of CPUs",
|
||||||
|
details: map[int]CPUInfo{
|
||||||
|
0: {},
|
||||||
|
1: {},
|
||||||
|
},
|
||||||
|
want: cpuset.NewCPUSet(0, 1),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := tt.details.CPUs()
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("CPUs() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCPUsInNUMANodes(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {NUMANodeID: 0},
|
||||||
|
1: {NUMANodeID: 0},
|
||||||
|
2: {NUMANodeID: 1},
|
||||||
|
3: {NUMANodeID: 2},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "NUMANode IDs is in CPUDetails.",
|
||||||
|
ids: []int{0, 1},
|
||||||
|
want: cpuset.NewCPUSet(0, 1, 2),
|
||||||
|
}, {
|
||||||
|
name: "NUMANode IDs is not in CPUDetails.",
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.CPUsInNUMANodes(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("CPUsInNUMANodes() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCPUDetailsCPUsInCores(t *testing.T) {
|
||||||
|
|
||||||
|
var details CPUDetails
|
||||||
|
details = map[int]CPUInfo{
|
||||||
|
0: {CoreID: 0},
|
||||||
|
1: {CoreID: 0},
|
||||||
|
2: {CoreID: 1},
|
||||||
|
3: {CoreID: 2},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ids []int
|
||||||
|
want cpuset.CPUSet
|
||||||
|
}{{
|
||||||
|
name: "Core IDs is in CPUDetails.",
|
||||||
|
ids: []int{0, 1},
|
||||||
|
want: cpuset.NewCPUSet(0, 1, 2),
|
||||||
|
}, {
|
||||||
|
name: "Core IDs is not in CPUDetails.",
|
||||||
|
ids: []int{3},
|
||||||
|
want: cpuset.NewCPUSet(),
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := details.CPUsInCores(tt.ids...)
|
||||||
|
if !reflect.DeepEqual(got, tt.want) {
|
||||||
|
t.Errorf("CPUsInCores() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user