From 3d20fa93092b73d455217f8bf2a5f09cb134b3ec Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 8 Apr 2021 12:04:23 +0200 Subject: [PATCH] fix TestSetOOMScoreBoundaries (this was introduced in 44240116aa8b4d9e9846a916e94476aef37d60ae) Setting the oom-score-adj to -1000 is only possible if the parent process either has no score set, or if the score is set to -1000. However, the current implementation of GetOOMScoreAdj conflates situations where either _no_ oom-score is set, _or_ oom-score is set, but set to 0. In the latter case, the test would fail: --- FAIL: TestSetOOMScoreBoundaries (0.01s) oom_linux_test.go:79: assertion failed: 0 (adjustment int) != -1000 (OOMScoreAdjMin int) FAIL To prevent failures in this situation, skip that part of the test in the above situation. Also update the description of GetOOMScoreAdj to clarify its behavior. Signed-off-by: Sebastiaan van Stijn --- sys/oom_linux.go | 3 ++- sys/oom_linux_test.go | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sys/oom_linux.go b/sys/oom_linux.go index 6e759a0b1..82a347c6f 100644 --- a/sys/oom_linux.go +++ b/sys/oom_linux.go @@ -65,7 +65,8 @@ func SetOOMScore(pid, score int) error { return nil } -// GetOOMScoreAdj gets the oom score for a process +// GetOOMScoreAdj gets the oom score for a process. It returns 0 (zero) if either +// no oom score is set, or a sore is set to 0. func GetOOMScoreAdj(pid int) (int, error) { path := fmt.Sprintf("/proc/%d/oom_score_adj", pid) data, err := ioutil.ReadFile(path) diff --git a/sys/oom_linux_test.go b/sys/oom_linux_test.go index bcbb1bc04..3cea56a75 100644 --- a/sys/oom_linux_test.go +++ b/sys/oom_linux_test.go @@ -71,9 +71,11 @@ func TestSetOOMScoreBoundaries(t *testing.T) { score, err := GetOOMScoreAdj(os.Getpid()) assert.NilError(t, err) - if score == 0 || score == OOMScoreAdjMin { - // we won't be able to set the score lower than the parent process, - // so only test if parent process does not have a oom-score-adj + if score == OOMScoreAdjMin { + // We won't be able to set the score lower than the parent process. This + // could also be tested if the parent process does not have a oom-score-adj + // set, but GetOOMScoreAdj does not distinguish between "not set" and + // "score is set, but zero". _, adjustment, err = adjustOom(OOMScoreAdjMin) assert.NilError(t, err) assert.Check(t, is.Equal(adjustment, OOMScoreAdjMin))