mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Modifying cri stats test cases
This commit container modification to cri stats test to verify CPU, Memory, Network stats collected by cadvisor. Signed-off-by: abhi <abhi@docker.com>
This commit is contained in:
parent
84b0e82db4
commit
e19f213027
@ -30,11 +30,39 @@ import (
|
|||||||
statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
|
statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
|
||||||
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
|
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
|
||||||
kubecontainertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
kubecontainertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/leaky"
|
||||||
kubepodtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
|
kubepodtest "k8s.io/kubernetes/pkg/kubelet/pod/testing"
|
||||||
serverstats "k8s.io/kubernetes/pkg/kubelet/server/stats"
|
serverstats "k8s.io/kubernetes/pkg/kubelet/server/stats"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCRIListPodStats(t *testing.T) {
|
func TestCRIListPodStats(t *testing.T) {
|
||||||
|
const (
|
||||||
|
seedRoot = 0
|
||||||
|
seedRuntime = 100
|
||||||
|
seedKubelet = 200
|
||||||
|
seedMisc = 300
|
||||||
|
seedSandbox0 = 1000
|
||||||
|
seedContainer0 = 2000
|
||||||
|
seedSandbox1 = 3000
|
||||||
|
seedContainer1 = 4000
|
||||||
|
seedContainer2 = 5000
|
||||||
|
seedSandbox2 = 6000
|
||||||
|
seedContainer3 = 7000
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
pName0 = "pod0"
|
||||||
|
pName1 = "pod1"
|
||||||
|
pName2 = "pod2"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
cName0 = "container0-name"
|
||||||
|
cName1 = "container1-name"
|
||||||
|
cName2 = "container2-name"
|
||||||
|
cName3 = "container3-name"
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
imageFsStorageUUID = "imagefs-storage-uuid"
|
imageFsStorageUUID = "imagefs-storage-uuid"
|
||||||
unknownStorageUUID = "unknown-storage-uuid"
|
unknownStorageUUID = "unknown-storage-uuid"
|
||||||
@ -42,19 +70,19 @@ func TestCRIListPodStats(t *testing.T) {
|
|||||||
rootFsInfo = getTestFsInfo(1000)
|
rootFsInfo = getTestFsInfo(1000)
|
||||||
|
|
||||||
sandbox0 = makeFakePodSandbox("sandbox0-name", "sandbox0-uid", "sandbox0-ns")
|
sandbox0 = makeFakePodSandbox("sandbox0-name", "sandbox0-uid", "sandbox0-ns")
|
||||||
container0 = makeFakeContainer(sandbox0, "container0-name", 0, false)
|
container0 = makeFakeContainer(sandbox0, cName0, 0, false)
|
||||||
containerStats0 = makeFakeContainerStats(container0, imageFsStorageUUID)
|
containerStats0 = makeFakeContainerStats(container0, imageFsStorageUUID)
|
||||||
container1 = makeFakeContainer(sandbox0, "container1-name", 0, false)
|
container1 = makeFakeContainer(sandbox0, cName1, 0, false)
|
||||||
containerStats1 = makeFakeContainerStats(container1, unknownStorageUUID)
|
containerStats1 = makeFakeContainerStats(container1, unknownStorageUUID)
|
||||||
|
|
||||||
sandbox1 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns")
|
sandbox1 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns")
|
||||||
container2 = makeFakeContainer(sandbox1, "container2-name", 0, false)
|
container2 = makeFakeContainer(sandbox1, cName2, 0, false)
|
||||||
containerStats2 = makeFakeContainerStats(container2, imageFsStorageUUID)
|
containerStats2 = makeFakeContainerStats(container2, imageFsStorageUUID)
|
||||||
|
|
||||||
sandbox2 = makeFakePodSandbox("sandbox2-name", "sandbox2-uid", "sandbox2-ns")
|
sandbox2 = makeFakePodSandbox("sandbox2-name", "sandbox2-uid", "sandbox2-ns")
|
||||||
container3 = makeFakeContainer(sandbox2, "container3-name", 0, true)
|
container3 = makeFakeContainer(sandbox2, cName3, 0, true)
|
||||||
containerStats3 = makeFakeContainerStats(container3, imageFsStorageUUID)
|
containerStats3 = makeFakeContainerStats(container3, imageFsStorageUUID)
|
||||||
container4 = makeFakeContainer(sandbox2, "container3-name", 1, false)
|
container4 = makeFakeContainer(sandbox2, cName3, 1, false)
|
||||||
containerStats4 = makeFakeContainerStats(container4, imageFsStorageUUID)
|
containerStats4 = makeFakeContainerStats(container4, imageFsStorageUUID)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -67,7 +95,27 @@ func TestCRIListPodStats(t *testing.T) {
|
|||||||
fakeImageService = critest.NewFakeImageService()
|
fakeImageService = critest.NewFakeImageService()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
infos := map[string]cadvisorapiv2.ContainerInfo{
|
||||||
|
"/": getTestContainerInfo(seedRoot, "", "", ""),
|
||||||
|
"/kubelet": getTestContainerInfo(seedKubelet, "", "", ""),
|
||||||
|
"/system": getTestContainerInfo(seedMisc, "", "", ""),
|
||||||
|
sandbox0.PodSandboxStatus.Id: getTestContainerInfo(seedSandbox0, pName0, sandbox0.PodSandboxStatus.Metadata.Namespace, leaky.PodInfraContainerName),
|
||||||
|
container0.ContainerStatus.Id: getTestContainerInfo(seedContainer0, pName0, sandbox0.PodSandboxStatus.Metadata.Namespace, cName0),
|
||||||
|
container1.ContainerStatus.Id: getTestContainerInfo(seedContainer1, pName0, sandbox0.PodSandboxStatus.Metadata.Namespace, cName1),
|
||||||
|
sandbox1.PodSandboxStatus.Id: getTestContainerInfo(seedSandbox1, pName1, sandbox1.PodSandboxStatus.Metadata.Namespace, leaky.PodInfraContainerName),
|
||||||
|
container2.ContainerStatus.Id: getTestContainerInfo(seedContainer2, pName1, sandbox1.PodSandboxStatus.Metadata.Namespace, cName2),
|
||||||
|
sandbox2.PodSandboxStatus.Id: getTestContainerInfo(seedSandbox2, pName2, sandbox2.PodSandboxStatus.Metadata.Namespace, leaky.PodInfraContainerName),
|
||||||
|
container4.ContainerStatus.Id: getTestContainerInfo(seedContainer3, pName2, sandbox2.PodSandboxStatus.Metadata.Namespace, cName3),
|
||||||
|
}
|
||||||
|
|
||||||
|
options := cadvisorapiv2.RequestOptions{
|
||||||
|
IdType: cadvisorapiv2.TypeName,
|
||||||
|
Count: 2,
|
||||||
|
Recursive: true,
|
||||||
|
}
|
||||||
|
|
||||||
mockCadvisor.
|
mockCadvisor.
|
||||||
|
On("ContainerInfoV2", "/", options).Return(infos, nil).
|
||||||
On("RootFsInfo").Return(rootFsInfo, nil).
|
On("RootFsInfo").Return(rootFsInfo, nil).
|
||||||
On("GetFsInfoByFsUUID", imageFsStorageUUID).Return(imageFsInfo, nil).
|
On("GetFsInfoByFsUUID", imageFsStorageUUID).Return(imageFsInfo, nil).
|
||||||
On("GetFsInfoByFsUUID", unknownStorageUUID).Return(cadvisorapiv2.FsInfo{}, cadvisorfs.ErrNoSuchDevice)
|
On("GetFsInfoByFsUUID", unknownStorageUUID).Return(cadvisorapiv2.FsInfo{}, cadvisorfs.ErrNoSuchDevice)
|
||||||
@ -116,16 +164,18 @@ func TestCRIListPodStats(t *testing.T) {
|
|||||||
for _, s := range p0.Containers {
|
for _, s := range p0.Containers {
|
||||||
containerStatsMap[s.Name] = s
|
containerStatsMap[s.Name] = s
|
||||||
}
|
}
|
||||||
c0 := containerStatsMap["container0-name"]
|
|
||||||
|
c0 := containerStatsMap[cName0]
|
||||||
assert.Equal(container0.CreatedAt, c0.StartTime.UnixNano())
|
assert.Equal(container0.CreatedAt, c0.StartTime.UnixNano())
|
||||||
checkCRICPUAndMemoryStats(assert, c0, containerStats0)
|
checkCRICPUAndMemoryStats(assert, c0, infos[container0.ContainerStatus.Id].Stats[0])
|
||||||
checkCRIRootfsStats(assert, c0, containerStats0, &imageFsInfo)
|
checkCRIRootfsStats(assert, c0, containerStats0, &imageFsInfo)
|
||||||
checkCRILogsStats(assert, c0, &rootFsInfo)
|
checkCRILogsStats(assert, c0, &rootFsInfo)
|
||||||
c1 := containerStatsMap["container1-name"]
|
c1 := containerStatsMap[cName1]
|
||||||
assert.Equal(container1.CreatedAt, c1.StartTime.UnixNano())
|
assert.Equal(container1.CreatedAt, c1.StartTime.UnixNano())
|
||||||
checkCRICPUAndMemoryStats(assert, c1, containerStats1)
|
checkCRICPUAndMemoryStats(assert, c1, infos[container1.ContainerStatus.Id].Stats[0])
|
||||||
checkCRIRootfsStats(assert, c1, containerStats1, nil)
|
checkCRIRootfsStats(assert, c1, containerStats1, nil)
|
||||||
checkCRILogsStats(assert, c1, &rootFsInfo)
|
checkCRILogsStats(assert, c1, &rootFsInfo)
|
||||||
|
checkCRINetworkStats(assert, p0.Network, infos[sandbox0.PodSandboxStatus.Id].Stats[0].Network)
|
||||||
|
|
||||||
p1 := podStatsMap[statsapi.PodReference{Name: "sandbox1-name", UID: "sandbox1-uid", Namespace: "sandbox1-ns"}]
|
p1 := podStatsMap[statsapi.PodReference{Name: "sandbox1-name", UID: "sandbox1-uid", Namespace: "sandbox1-ns"}]
|
||||||
assert.Equal(sandbox1.CreatedAt, p1.StartTime.UnixNano())
|
assert.Equal(sandbox1.CreatedAt, p1.StartTime.UnixNano())
|
||||||
@ -133,11 +183,12 @@ func TestCRIListPodStats(t *testing.T) {
|
|||||||
|
|
||||||
checkEphemeralStorageStats(assert, p1, ephemeralVolumes, []*runtimeapi.ContainerStats{containerStats2})
|
checkEphemeralStorageStats(assert, p1, ephemeralVolumes, []*runtimeapi.ContainerStats{containerStats2})
|
||||||
c2 := p1.Containers[0]
|
c2 := p1.Containers[0]
|
||||||
assert.Equal("container2-name", c2.Name)
|
assert.Equal(cName2, c2.Name)
|
||||||
assert.Equal(container2.CreatedAt, c2.StartTime.UnixNano())
|
assert.Equal(container2.CreatedAt, c2.StartTime.UnixNano())
|
||||||
checkCRICPUAndMemoryStats(assert, c2, containerStats2)
|
checkCRICPUAndMemoryStats(assert, c2, infos[container2.ContainerStatus.Id].Stats[0])
|
||||||
checkCRIRootfsStats(assert, c2, containerStats2, &imageFsInfo)
|
checkCRIRootfsStats(assert, c2, containerStats2, &imageFsInfo)
|
||||||
checkCRILogsStats(assert, c2, &rootFsInfo)
|
checkCRILogsStats(assert, c2, &rootFsInfo)
|
||||||
|
checkCRINetworkStats(assert, p1.Network, infos[sandbox1.PodSandboxStatus.Id].Stats[0].Network)
|
||||||
|
|
||||||
p2 := podStatsMap[statsapi.PodReference{Name: "sandbox2-name", UID: "sandbox2-uid", Namespace: "sandbox2-ns"}]
|
p2 := podStatsMap[statsapi.PodReference{Name: "sandbox2-name", UID: "sandbox2-uid", Namespace: "sandbox2-ns"}]
|
||||||
assert.Equal(sandbox2.CreatedAt, p2.StartTime.UnixNano())
|
assert.Equal(sandbox2.CreatedAt, p2.StartTime.UnixNano())
|
||||||
@ -146,12 +197,13 @@ func TestCRIListPodStats(t *testing.T) {
|
|||||||
checkEphemeralStorageStats(assert, p2, ephemeralVolumes, []*runtimeapi.ContainerStats{containerStats4})
|
checkEphemeralStorageStats(assert, p2, ephemeralVolumes, []*runtimeapi.ContainerStats{containerStats4})
|
||||||
|
|
||||||
c3 := p2.Containers[0]
|
c3 := p2.Containers[0]
|
||||||
assert.Equal("container3-name", c3.Name)
|
assert.Equal(cName3, c3.Name)
|
||||||
assert.Equal(container4.CreatedAt, c3.StartTime.UnixNano())
|
assert.Equal(container4.CreatedAt, c3.StartTime.UnixNano())
|
||||||
checkCRICPUAndMemoryStats(assert, c3, containerStats4)
|
checkCRICPUAndMemoryStats(assert, c3, infos[container4.ContainerStatus.Id].Stats[0])
|
||||||
checkCRIRootfsStats(assert, c3, containerStats4, &imageFsInfo)
|
checkCRIRootfsStats(assert, c3, containerStats4, &imageFsInfo)
|
||||||
|
|
||||||
checkCRILogsStats(assert, c3, &rootFsInfo)
|
checkCRILogsStats(assert, c3, &rootFsInfo)
|
||||||
|
checkCRINetworkStats(assert, p2.Network, infos[sandbox2.PodSandboxStatus.Id].Stats[0].Network)
|
||||||
|
|
||||||
mockCadvisor.AssertExpectations(t)
|
mockCadvisor.AssertExpectations(t)
|
||||||
}
|
}
|
||||||
@ -305,18 +357,16 @@ func makeFakeVolumeStats(volumeNames []string) []statsapi.VolumeStats {
|
|||||||
return volumes
|
return volumes
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkCRICPUAndMemoryStats(assert *assert.Assertions, actual statsapi.ContainerStats, cs *runtimeapi.ContainerStats) {
|
func checkCRICPUAndMemoryStats(assert *assert.Assertions, actual statsapi.ContainerStats, cs *cadvisorapiv2.ContainerStats) {
|
||||||
assert.Equal(cs.Cpu.Timestamp, actual.CPU.Time.UnixNano())
|
assert.Equal(cs.Timestamp.UnixNano(), actual.CPU.Time.UnixNano())
|
||||||
assert.Equal(cs.Cpu.UsageCoreNanoSeconds.Value, *actual.CPU.UsageCoreNanoSeconds)
|
assert.Equal(cs.Cpu.Usage.Total, *actual.CPU.UsageCoreNanoSeconds)
|
||||||
assert.Zero(*actual.CPU.UsageNanoCores)
|
assert.Equal(cs.CpuInst.Usage.Total, *actual.CPU.UsageNanoCores)
|
||||||
|
|
||||||
assert.Equal(cs.Memory.Timestamp, actual.Memory.Time.UnixNano())
|
assert.Equal(cs.Memory.Usage, *actual.Memory.UsageBytes)
|
||||||
assert.Nil(actual.Memory.AvailableBytes)
|
assert.Equal(cs.Memory.WorkingSet, *actual.Memory.WorkingSetBytes)
|
||||||
assert.Nil(actual.Memory.UsageBytes)
|
assert.Equal(cs.Memory.RSS, *actual.Memory.RSSBytes)
|
||||||
assert.Equal(cs.Memory.WorkingSetBytes.Value, *actual.Memory.WorkingSetBytes)
|
assert.Equal(cs.Memory.ContainerData.Pgfault, *actual.Memory.PageFaults)
|
||||||
assert.Zero(*actual.Memory.RSSBytes)
|
assert.Equal(cs.Memory.ContainerData.Pgmajfault, *actual.Memory.MajorPageFaults)
|
||||||
assert.Nil(actual.Memory.PageFaults)
|
|
||||||
assert.Nil(actual.Memory.MajorPageFaults)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkCRIRootfsStats(assert *assert.Assertions, actual statsapi.ContainerStats, cs *runtimeapi.ContainerStats, imageFsInfo *cadvisorapiv2.FsInfo) {
|
func checkCRIRootfsStats(assert *assert.Assertions, actual statsapi.ContainerStats, cs *runtimeapi.ContainerStats, imageFsInfo *cadvisorapiv2.FsInfo) {
|
||||||
@ -360,3 +410,10 @@ func checkEphemeralStorageStats(assert *assert.Assertions, actual statsapi.PodSt
|
|||||||
assert.Equal(int(*actual.EphemeralStorage.UsedBytes), int(totalUsed))
|
assert.Equal(int(*actual.EphemeralStorage.UsedBytes), int(totalUsed))
|
||||||
assert.Equal(int(*actual.EphemeralStorage.InodesUsed), int(inodesUsed))
|
assert.Equal(int(*actual.EphemeralStorage.InodesUsed), int(inodesUsed))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkCRINetworkStats(assert *assert.Assertions, actual *statsapi.NetworkStats, expected *cadvisorapiv2.NetworkStats) {
|
||||||
|
assert.Equal(expected.Interfaces[0].RxBytes, *actual.RxBytes)
|
||||||
|
assert.Equal(expected.Interfaces[0].RxErrors, *actual.RxErrors)
|
||||||
|
assert.Equal(expected.Interfaces[0].TxBytes, *actual.TxBytes)
|
||||||
|
assert.Equal(expected.Interfaces[0].TxErrors, *actual.TxErrors)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user