diff --git a/mem/mem_linux_test.go b/mem/mem_linux_test.go new file mode 100644 index 00000000..11445dea --- /dev/null +++ b/mem/mem_linux_test.go @@ -0,0 +1,80 @@ +package mem + +import ( + "os" + "path/filepath" + "reflect" + "testing" +) + +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, + HugePageSize: 2097152}, + }, +} + +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) + } + }) + } +} diff --git a/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo b/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo new file mode 100644 index 00000000..6736d0ed --- /dev/null +++ b/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo @@ -0,0 +1,46 @@ +MemTotal: 16115528 kB +MemFree: 8577628 kB +MemAvailable: 11225936 kB +Buffers: 207516 kB +Cached: 3791568 kB +SwapCached: 0 kB +Active: 4245500 kB +Inactive: 2869956 kB +Active(anon): 3123508 kB +Inactive(anon): 1186612 kB +Active(file): 1121992 kB +Inactive(file): 1683344 kB +Unevictable: 32 kB +Mlocked: 32 kB +SwapTotal: 8065020 kB +SwapFree: 8065020 kB +Dirty: 172 kB +Writeback: 0 kB +AnonPages: 3116472 kB +Mapped: 1145144 kB +Shmem: 1193752 kB +Slab: 247824 kB +SReclaimable: 182100 kB +SUnreclaim: 65724 kB +KernelStack: 14224 kB +PageTables: 63712 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 16122784 kB +Committed_AS: 12071112 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 0 kB +ShmemPmdMapped: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 143564 kB +DirectMap2M: 6871040 kB +DirectMap1G: 10485760 kB diff --git a/v3/mem/mem_linux.go b/v3/mem/mem_linux.go index c9ef47ba..6da14c5a 100644 --- a/v3/mem/mem_linux.go +++ b/v3/mem/mem_linux.go @@ -115,10 +115,10 @@ func fillFromMeminfoWithContext(ctx context.Context) (*VirtualMemoryStat, *Virtu ret.Shared = t * 1024 case "Slab": ret.Slab = t * 1024 - case "Sreclaimable": + case "SReclaimable": sReclaimable = true ret.Sreclaimable = t * 1024 - case "Sunreclaim": + case "SUnreclaim": ret.Sunreclaim = t * 1024 case "PageTables": ret.PageTables = t * 1024 diff --git a/v3/mem/mem_linux_test.go b/v3/mem/mem_linux_test.go index eb29e335..97a314c8 100644 --- a/v3/mem/mem_linux_test.go +++ b/v3/mem/mem_linux_test.go @@ -1,6 +1,9 @@ package mem import ( + "os" + "path/filepath" + "reflect" "testing" ) @@ -12,3 +15,66 @@ func TestVirtualMemoryEx(t *testing.T) { 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, + HugePageSize: 2097152}, + }, +} + +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) + } + }) + } +} diff --git a/v3/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo b/v3/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo new file mode 100644 index 00000000..6736d0ed --- /dev/null +++ b/v3/mem/testdata/linux/virtualmemory/intelcorei5/proc/meminfo @@ -0,0 +1,46 @@ +MemTotal: 16115528 kB +MemFree: 8577628 kB +MemAvailable: 11225936 kB +Buffers: 207516 kB +Cached: 3791568 kB +SwapCached: 0 kB +Active: 4245500 kB +Inactive: 2869956 kB +Active(anon): 3123508 kB +Inactive(anon): 1186612 kB +Active(file): 1121992 kB +Inactive(file): 1683344 kB +Unevictable: 32 kB +Mlocked: 32 kB +SwapTotal: 8065020 kB +SwapFree: 8065020 kB +Dirty: 172 kB +Writeback: 0 kB +AnonPages: 3116472 kB +Mapped: 1145144 kB +Shmem: 1193752 kB +Slab: 247824 kB +SReclaimable: 182100 kB +SUnreclaim: 65724 kB +KernelStack: 14224 kB +PageTables: 63712 kB +NFS_Unstable: 0 kB +Bounce: 0 kB +WritebackTmp: 0 kB +CommitLimit: 16122784 kB +Committed_AS: 12071112 kB +VmallocTotal: 34359738367 kB +VmallocUsed: 0 kB +VmallocChunk: 0 kB +HardwareCorrupted: 0 kB +AnonHugePages: 0 kB +ShmemHugePages: 0 kB +ShmemPmdMapped: 0 kB +HugePages_Total: 0 +HugePages_Free: 0 +HugePages_Rsvd: 0 +HugePages_Surp: 0 +Hugepagesize: 2048 kB +DirectMap4k: 143564 kB +DirectMap2M: 6871040 kB +DirectMap1G: 10485760 kB