File: memory_test.go

package info (click to toggle)
docker.io 26.1.5%2Bdfsg1-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 68,644 kB
  • sloc: sh: 5,748; makefile: 912; ansic: 664; asm: 228; python: 162
file content (98 lines) | stat: -rw-r--r-- 2,544 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package resources

import (
	"os"
	"path/filepath"
	"testing"

	resourcestypes "github.com/moby/buildkit/executor/resources/types"
	"github.com/stretchr/testify/assert"
)

func TestParseMemoryStat(t *testing.T) {
	testDir := t.TempDir()

	memoryStatContents := `anon 24576
file 12791808
kernel_stack 8192
pagetables 4096
sock 2048
shmem 16384
file_mapped 8192
file_dirty 32768
file_writeback 16384
slab 1503104
pgscan 100
pgsteal 99
pgfault 32711
pgmajfault 12`
	err := os.WriteFile(filepath.Join(testDir, memoryStatFile), []byte(memoryStatContents), 0644)
	assert.NoError(t, err)

	memoryPressureContents := `some avg10=1.23 avg60=4.56 avg300=7.89 total=3031
full avg10=0.12 avg60=0.34 avg300=0.56 total=9876`
	err = os.WriteFile(filepath.Join(testDir, memoryPressureFile), []byte(memoryPressureContents), 0644)
	assert.NoError(t, err)

	memoryEventsContents := `low 4
high 3
max 2
oom 1
oom_kill 5`
	err = os.WriteFile(filepath.Join(testDir, memoryEventsFile), []byte(memoryEventsContents), 0644)
	assert.NoError(t, err)

	err = os.WriteFile(filepath.Join(testDir, memoryPeakFile), []byte("123456"), 0644)
	assert.NoError(t, err)

	err = os.WriteFile(filepath.Join(testDir, memorySwapCurrentFile), []byte("987654"), 0644)
	assert.NoError(t, err)

	memoryStat, err := getCgroupMemoryStat(testDir)
	assert.NoError(t, err)

	var expectedPressure = &resourcestypes.Pressure{
		Some: &resourcestypes.PressureValues{
			Avg10:  float64Ptr(1.23),
			Avg60:  float64Ptr(4.56),
			Avg300: float64Ptr(7.89),
			Total:  uint64Ptr(3031),
		},
		Full: &resourcestypes.PressureValues{
			Avg10:  float64Ptr(0.12),
			Avg60:  float64Ptr(0.34),
			Avg300: float64Ptr(0.56),
			Total:  uint64Ptr(9876),
		},
	}

	expectedMemoryStat := &resourcestypes.MemoryStat{
		SwapBytes:     uint64Ptr(987654),
		Anon:          uint64Ptr(24576),
		File:          uint64Ptr(12791808),
		KernelStack:   uint64Ptr(8192),
		PageTables:    uint64Ptr(4096),
		Sock:          uint64Ptr(2048),
		Shmem:         uint64Ptr(16384),
		FileMapped:    uint64Ptr(8192),
		FileDirty:     uint64Ptr(32768),
		FileWriteback: uint64Ptr(16384),
		Slab:          uint64Ptr(1503104),
		Pgscan:        uint64Ptr(100),
		Pgsteal:       uint64Ptr(99),
		Pgfault:       uint64Ptr(32711),
		Pgmajfault:    uint64Ptr(12),
		Peak:          uint64Ptr(123456),
		LowEvents:     4,
		HighEvents:    3,
		MaxEvents:     2,
		OomEvents:     1,
		OomKillEvents: 5,
		Pressure:      expectedPressure,
	}
	assert.Equal(t, expectedMemoryStat, memoryStat)
}

func float64Ptr(v float64) *float64 {
	return &v
}