package fscommon import ( "math" "os" "path/filepath" "strconv" "testing" "github.com/opencontainers/runc/libcontainer/cgroups" ) const ( cgroupFile = "cgroup.file" floatValue = 2048.0 floatString = "2048" ) func init() { cgroups.TestMode = true } func TestGetCgroupParamsInt(t *testing.T) { // Setup tempdir. tempDir := t.TempDir() tempFile := filepath.Join(tempDir, cgroupFile) // Success. if err := os.WriteFile(tempFile, []byte(floatString), 0o755); err != nil { t.Fatal(err) } value, err := GetCgroupParamUint(tempDir, cgroupFile) if err != nil { t.Fatal(err) } else if value != floatValue { t.Fatalf("Expected %d to equal %f", value, floatValue) } // Success with new line. err = os.WriteFile(tempFile, []byte(floatString+"\n"), 0o755) if err != nil { t.Fatal(err) } value, err = GetCgroupParamUint(tempDir, cgroupFile) if err != nil { t.Fatal(err) } else if value != floatValue { t.Fatalf("Expected %d to equal %f", value, floatValue) } // Success with negative values err = os.WriteFile(tempFile, []byte("-12345"), 0o755) if err != nil { t.Fatal(err) } value, err = GetCgroupParamUint(tempDir, cgroupFile) if err != nil { t.Fatal(err) } else if value != 0 { t.Fatalf("Expected %d to equal %d", value, 0) } // Success with negative values lesser than min int64 s := strconv.FormatFloat(math.MinInt64, 'f', -1, 64) err = os.WriteFile(tempFile, []byte(s), 0o755) if err != nil { t.Fatal(err) } value, err = GetCgroupParamUint(tempDir, cgroupFile) if err != nil { t.Fatal(err) } else if value != 0 { t.Fatalf("Expected %d to equal %d", value, 0) } // Not a float. err = os.WriteFile(tempFile, []byte("not-a-float"), 0o755) if err != nil { t.Fatal(err) } _, err = GetCgroupParamUint(tempDir, cgroupFile) if err == nil { t.Fatal("Expecting error, got none") } // Unknown file. err = os.Remove(tempFile) if err != nil { t.Fatal(err) } _, err = GetCgroupParamUint(tempDir, cgroupFile) if err == nil { t.Fatal("Expecting error, got none") } }