From b176d5d434bd993b8505d18efdcfb5c7b055886e Mon Sep 17 00:00:00 2001 From: Kevin Wan Date: Sat, 17 Jun 2023 20:51:33 +0800 Subject: [PATCH] chore: add more tests (#3359) --- core/stat/internal/cgroup_linux.go | 18 +++++----- core/stat/internal/cgroup_linux_test.go | 44 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/core/stat/internal/cgroup_linux.go b/core/stat/internal/cgroup_linux.go index 5f53d9ed..6ac19853 100644 --- a/core/stat/internal/cgroup_linux.go +++ b/core/stat/internal/cgroup_linux.go @@ -219,6 +219,7 @@ func parseUints(val string) ([]uint64, error) { return nil, nil } + var sets []uint64 ints := make(map[uint64]lang.PlaceholderType) cols := strings.Split(val, ",") for _, r := range cols { @@ -239,7 +240,10 @@ func parseUints(val string) ([]uint64, error) { } for i := min; i <= max; i++ { - ints[i] = lang.Placeholder + if _, ok := ints[i]; !ok { + ints[i] = lang.Placeholder + sets = append(sets, i) + } } } else { v, err := parseUint(r) @@ -247,19 +251,17 @@ func parseUints(val string) ([]uint64, error) { return nil, err } - ints[v] = lang.Placeholder + if _, ok := ints[v]; !ok { + ints[v] = lang.Placeholder + sets = append(sets, v) + } } } - var sets []uint64 - for k := range ints { - sets = append(sets, k) - } - return sets, nil } -// runningInUserNS detects whether we are currently running in an user namespace. +// runningInUserNS detects whether we are currently running in a user namespace. func runningInUserNS() bool { nsOnce.Do(func() { file, err := os.Open("/proc/self/uid_map") diff --git a/core/stat/internal/cgroup_linux_test.go b/core/stat/internal/cgroup_linux_test.go index 06bc5ac9..15ab1d43 100644 --- a/core/stat/internal/cgroup_linux_test.go +++ b/core/stat/internal/cgroup_linux_test.go @@ -1,6 +1,7 @@ package internal import ( + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -25,3 +26,46 @@ func TestCgroupV1(t *testing.T) { assert.Error(t, err) } } + +func TestParseUint(t *testing.T) { + tests := []struct { + input string + want uint64 + err error + }{ + {"0", 0, nil}, + {"123", 123, nil}, + {"-1", 0, nil}, + {"-18446744073709551616", 0, nil}, + {"foo", 0, fmt.Errorf("cgroup: bad int format: foo")}, + } + + for _, tt := range tests { + got, err := parseUint(tt.input) + assert.Equal(t, tt.err, err) + assert.Equal(t, tt.want, got) + } +} + +func TestParseUints(t *testing.T) { + tests := []struct { + input string + want []uint64 + err error + }{ + {"", nil, nil}, + {"1,2,3", []uint64{1, 2, 3}, nil}, + {"1-3", []uint64{1, 2, 3}, nil}, + {"1-3,5,7-9", []uint64{1, 2, 3, 5, 7, 8, 9}, nil}, + {"foo", nil, fmt.Errorf("cgroup: bad int format: foo")}, + {"1-bar", nil, fmt.Errorf("cgroup: bad int list format: 1-bar")}, + {"bar-3", nil, fmt.Errorf("cgroup: bad int list format: bar-3")}, + {"3-1", nil, fmt.Errorf("cgroup: bad int list format: 3-1")}, + } + + for _, tt := range tests { + got, err := parseUints(tt.input) + assert.Equal(t, tt.err, err) + assert.Equal(t, tt.want, got) + } +}