mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +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"
|
||||
|
||||
cadvisorapi "github.com/google/cadvisor/info/v1"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
||||
)
|
||||
|
||||
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