170 lines
3.9 KiB
Go
170 lines
3.9 KiB
Go
//go:build linux
|
|
// +build linux
|
|
|
|
package mem
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestVirtualMemoryEx(t *testing.T) {
|
|
v, err := VirtualMemoryEx()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
t.Log(v)
|
|
}
|
|
|
|
var virtualMemoryTests = []struct {
|
|
mockedRootFS string
|
|
stat *VirtualMemoryStat
|
|
}{
|
|
{
|
|
"intelcorei5", &VirtualMemoryStat{
|
|
Total: 16502300672,
|
|
Available: 11495358464,
|
|
Used: 3437277184,
|
|
UsedPercent: 20.82907863769651,
|
|
Free: 8783491072,
|
|
Active: 4347392000,
|
|
Inactive: 2938834944,
|
|
Wired: 0,
|
|
Laundry: 0,
|
|
Buffers: 212496384,
|
|
Cached: 4069036032,
|
|
WriteBack: 0,
|
|
Dirty: 176128,
|
|
WriteBackTmp: 0,
|
|
Shared: 1222402048,
|
|
Slab: 253771776,
|
|
Sreclaimable: 186470400,
|
|
Sunreclaim: 67301376,
|
|
PageTables: 65241088,
|
|
SwapCached: 0,
|
|
CommitLimit: 16509730816,
|
|
CommittedAS: 12360818688,
|
|
HighTotal: 0,
|
|
HighFree: 0,
|
|
LowTotal: 0,
|
|
LowFree: 0,
|
|
SwapTotal: 8258580480,
|
|
SwapFree: 8258580480,
|
|
Mapped: 1172627456,
|
|
VmallocTotal: 35184372087808,
|
|
VmallocUsed: 0,
|
|
VmallocChunk: 0,
|
|
HugePagesTotal: 0,
|
|
HugePagesFree: 0,
|
|
HugePagesRsvd: 0,
|
|
HugePagesSurp: 0,
|
|
HugePageSize: 2097152,
|
|
},
|
|
},
|
|
{
|
|
"issue1002", &VirtualMemoryStat{
|
|
Total: 260579328,
|
|
Available: 215199744,
|
|
Used: 34328576,
|
|
UsedPercent: 13.173944481121694,
|
|
Free: 124506112,
|
|
Active: 108785664,
|
|
Inactive: 8581120,
|
|
Wired: 0,
|
|
Laundry: 0,
|
|
Buffers: 4915200,
|
|
Cached: 96829440,
|
|
WriteBack: 0,
|
|
Dirty: 0,
|
|
WriteBackTmp: 0,
|
|
Shared: 0,
|
|
Slab: 9293824,
|
|
Sreclaimable: 2764800,
|
|
Sunreclaim: 6529024,
|
|
PageTables: 405504,
|
|
SwapCached: 0,
|
|
CommitLimit: 130289664,
|
|
CommittedAS: 25567232,
|
|
HighTotal: 134217728,
|
|
HighFree: 67784704,
|
|
LowTotal: 126361600,
|
|
LowFree: 56721408,
|
|
SwapTotal: 0,
|
|
SwapFree: 0,
|
|
Mapped: 38793216,
|
|
VmallocTotal: 1996488704,
|
|
VmallocUsed: 0,
|
|
VmallocChunk: 0,
|
|
HugePagesTotal: 0,
|
|
HugePagesFree: 0,
|
|
HugePagesRsvd: 0,
|
|
HugePagesSurp: 0,
|
|
HugePageSize: 0,
|
|
},
|
|
},
|
|
}
|
|
|
|
func TestVirtualMemoryLinux(t *testing.T) {
|
|
origProc := os.Getenv("HOST_PROC")
|
|
defer os.Setenv("HOST_PROC", origProc)
|
|
|
|
for _, tt := range virtualMemoryTests {
|
|
t.Run(tt.mockedRootFS, func(t *testing.T) {
|
|
os.Setenv("HOST_PROC", filepath.Join("testdata/linux/virtualmemory/", tt.mockedRootFS, "proc"))
|
|
|
|
stat, err := VirtualMemory()
|
|
skipIfNotImplementedErr(t, err)
|
|
if err != nil {
|
|
t.Errorf("error %v", err)
|
|
}
|
|
if !reflect.DeepEqual(stat, tt.stat) {
|
|
t.Errorf("got: %+v\nwant: %+v", stat, tt.stat)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
const validFile = `Filename Type Size Used Priority
|
|
/dev/dm-2 partition 67022844 490788 -2
|
|
/swapfile file 2 1 -3
|
|
`
|
|
|
|
const invalidFile = `INVALID Type Size Used Priority
|
|
/dev/dm-2 partition 67022844 490788 -2
|
|
/swapfile file 1048572 0 -3
|
|
`
|
|
|
|
func TestParseSwapsFile_ValidFile(t *testing.T) {
|
|
assert := assert.New(t)
|
|
stats, err := parseSwapsFile(strings.NewReader(validFile))
|
|
assert.NoError(err)
|
|
|
|
assert.Equal(*stats[0], SwapDevice{
|
|
Name: "/dev/dm-2",
|
|
UsedBytes: 502566912,
|
|
FreeBytes: 68128825344,
|
|
})
|
|
|
|
assert.Equal(*stats[1], SwapDevice{
|
|
Name: "/swapfile",
|
|
UsedBytes: 1024,
|
|
FreeBytes: 1024,
|
|
})
|
|
}
|
|
|
|
func TestParseSwapsFile_InvalidFile(t *testing.T) {
|
|
_, err := parseSwapsFile(strings.NewReader(invalidFile))
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestParseSwapsFile_EmptyFile(t *testing.T) {
|
|
_, err := parseSwapsFile(strings.NewReader(""))
|
|
assert.Error(t, err)
|
|
}
|