mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 10:51:29 +00:00
kubelet/stats: add unit test for when container logs are found
Signed-off-by: Peter Hunt <pehunt@redhat.com>
This commit is contained in:
parent
1c3357db76
commit
0b7629d2cc
@ -30,9 +30,12 @@ import (
|
|||||||
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
|
cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
||||||
|
kubecontainertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/kuberuntime"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/leaky"
|
"k8s.io/kubernetes/pkg/kubelet/leaky"
|
||||||
serverstats "k8s.io/kubernetes/pkg/kubelet/server/stats"
|
serverstats "k8s.io/kubernetes/pkg/kubelet/server/stats"
|
||||||
statustest "k8s.io/kubernetes/pkg/kubelet/status/testing"
|
statustest "k8s.io/kubernetes/pkg/kubelet/status/testing"
|
||||||
|
"k8s.io/kubernetes/pkg/volume"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFilterTerminatedContainerInfoAndAssembleByPodCgroupKey(t *testing.T) {
|
func TestFilterTerminatedContainerInfoAndAssembleByPodCgroupKey(t *testing.T) {
|
||||||
@ -510,3 +513,106 @@ func TestCadvisorImagesFsStats(t *testing.T) {
|
|||||||
assert.Equal(imageFsInfo.Inodes, stats.Inodes)
|
assert.Equal(imageFsInfo.Inodes, stats.Inodes)
|
||||||
assert.Equal(*imageFsInfo.Inodes-*imageFsInfo.InodesFree, *stats.InodesUsed)
|
assert.Equal(*imageFsInfo.Inodes-*imageFsInfo.InodesFree, *stats.InodesUsed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCadvisorListPodStatsWhenContainerLogFound(t *testing.T) {
|
||||||
|
const (
|
||||||
|
namespace0 = "test0"
|
||||||
|
)
|
||||||
|
const (
|
||||||
|
seedRoot = 0
|
||||||
|
seedRuntime = 100
|
||||||
|
seedKubelet = 200
|
||||||
|
seedMisc = 300
|
||||||
|
seedPod0Infra = 1000
|
||||||
|
seedPod0Container0 = 0
|
||||||
|
seedPod0Container1 = 0
|
||||||
|
)
|
||||||
|
const (
|
||||||
|
pName0 = "pod0"
|
||||||
|
)
|
||||||
|
const (
|
||||||
|
cName00 = "c0"
|
||||||
|
cName01 = "c1"
|
||||||
|
)
|
||||||
|
const (
|
||||||
|
rootfsCapacity = uint64(10000000)
|
||||||
|
rootfsAvailable = uint64(5000000)
|
||||||
|
rootfsInodesFree = uint64(1000)
|
||||||
|
rootfsInodes = uint64(2000)
|
||||||
|
imagefsCapacity = uint64(20000000)
|
||||||
|
imagefsAvailable = uint64(8000000)
|
||||||
|
imagefsInodesFree = uint64(2000)
|
||||||
|
imagefsInodes = uint64(4000)
|
||||||
|
)
|
||||||
|
|
||||||
|
prf0 := statsapi.PodReference{Name: pName0, Namespace: namespace0, UID: "UID" + pName0}
|
||||||
|
infos := map[string]cadvisorapiv2.ContainerInfo{
|
||||||
|
"/": getTestContainerInfo(seedRoot, "", "", ""),
|
||||||
|
"/docker-daemon": getTestContainerInfo(seedRuntime, "", "", ""),
|
||||||
|
"/kubelet": getTestContainerInfo(seedKubelet, "", "", ""),
|
||||||
|
"/system": getTestContainerInfo(seedMisc, "", "", ""),
|
||||||
|
// Pod0 - Namespace0
|
||||||
|
"/pod0-i": getTestContainerInfo(seedPod0Infra, pName0, namespace0, leaky.PodInfraContainerName),
|
||||||
|
"/pod0-c0": getTestContainerInfo(seedPod0Container0, pName0, namespace0, cName00),
|
||||||
|
"/pod0-c1": getTestContainerInfo(seedPod0Container1, pName0, namespace0, cName01),
|
||||||
|
}
|
||||||
|
|
||||||
|
containerLogStats0 := makeFakeLogStats(0)
|
||||||
|
containerLogStats1 := makeFakeLogStats(0)
|
||||||
|
fakeStats := map[string]*volume.Metrics{
|
||||||
|
kuberuntime.BuildContainerLogsDirectory(prf0.Namespace, prf0.Name, types.UID(prf0.UID), cName00): containerLogStats0,
|
||||||
|
kuberuntime.BuildContainerLogsDirectory(prf0.Namespace, prf0.Name, types.UID(prf0.UID), cName01): containerLogStats1,
|
||||||
|
}
|
||||||
|
fakeStatsSlice := []*volume.Metrics{containerLogStats0, containerLogStats1}
|
||||||
|
fakeOS := &kubecontainertest.FakeOS{}
|
||||||
|
|
||||||
|
freeRootfsInodes := rootfsInodesFree
|
||||||
|
totalRootfsInodes := rootfsInodes
|
||||||
|
rootfs := cadvisorapiv2.FsInfo{
|
||||||
|
Capacity: rootfsCapacity,
|
||||||
|
Available: rootfsAvailable,
|
||||||
|
InodesFree: &freeRootfsInodes,
|
||||||
|
Inodes: &totalRootfsInodes,
|
||||||
|
}
|
||||||
|
|
||||||
|
freeImagefsInodes := imagefsInodesFree
|
||||||
|
totalImagefsInodes := imagefsInodes
|
||||||
|
imagefs := cadvisorapiv2.FsInfo{
|
||||||
|
Capacity: imagefsCapacity,
|
||||||
|
Available: imagefsAvailable,
|
||||||
|
InodesFree: &freeImagefsInodes,
|
||||||
|
Inodes: &totalImagefsInodes,
|
||||||
|
}
|
||||||
|
|
||||||
|
options := cadvisorapiv2.RequestOptions{
|
||||||
|
IdType: cadvisorapiv2.TypeName,
|
||||||
|
Count: 2,
|
||||||
|
Recursive: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
mockCtrl := gomock.NewController(t)
|
||||||
|
defer mockCtrl.Finish()
|
||||||
|
|
||||||
|
mockCadvisor := cadvisortest.NewMockInterface(mockCtrl)
|
||||||
|
mockCadvisor.EXPECT().ContainerInfoV2("/", options).Return(infos, nil)
|
||||||
|
mockCadvisor.EXPECT().RootFsInfo().Return(rootfs, nil)
|
||||||
|
mockCadvisor.EXPECT().ImagesFsInfo().Return(imagefs, nil)
|
||||||
|
|
||||||
|
mockRuntime := containertest.NewMockRuntime(mockCtrl)
|
||||||
|
mockRuntime.EXPECT().ImageStats().Return(&kubecontainer.ImageStats{TotalStorageBytes: 123}, nil).AnyTimes()
|
||||||
|
|
||||||
|
volumeStats := serverstats.PodVolumeStats{}
|
||||||
|
p0Time := metav1.Now()
|
||||||
|
mockStatus := statustest.NewMockPodStatusProvider(mockCtrl)
|
||||||
|
mockStatus.EXPECT().GetPodStatus(types.UID("UID"+pName0)).Return(v1.PodStatus{StartTime: &p0Time}, true)
|
||||||
|
|
||||||
|
resourceAnalyzer := &fakeResourceAnalyzer{podVolumeStats: volumeStats}
|
||||||
|
|
||||||
|
p := NewCadvisorStatsProvider(mockCadvisor, resourceAnalyzer, nil, nil, mockRuntime, mockStatus, NewFakeHostStatsProviderWithData(fakeStats, fakeOS))
|
||||||
|
pods, err := p.ListPodStats()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, 1, len(pods))
|
||||||
|
// Validate Pod0 Results
|
||||||
|
checkEphemeralStats(t, "Pod0", []int{seedPod0Container0, seedPod0Container1}, nil, fakeStatsSlice, pods[0].EphemeralStorage)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user