Add systemd resource budgets with TOML profiles

This commit is contained in:
ms2k 2026-10-05 19:19:05 +09:00
commit be8749a384

View file

@ -0,0 +1,66 @@
package budget
import (
"bytes"
"reflect"
"strings"
"testing"
"github.com/BurntSushi/toml"
)
func TestParseArgs(t *testing.T) {
for _, action := range []string{"apply", "watch", "status"} {
r, err := parseArgs([]string{action})
if err != nil || r.action != action {
t.Fatalf("%#v, %v", r, err)
}
}
r, err := parseArgs([]string{"run", "compute", "--", "java", "-Xmx8G", "a b"})
if err != nil || r.profile != "compute" || !reflect.DeepEqual(r.command, []string{"--", "java", "-Xmx8G", "a b"}) {
t.Fatalf("%#v, %v", r, err)
}
r, err = parseArgs([]string{"set", "unrestricted", "editor"})
if err != nil || r.profile != "unrestricted" || r.target != "editor" {
t.Fatalf("%#v, %v", r, err)
}
for _, args := range [][]string{nil, {"unknown"}, {"apply", "extra"}, {"run"}, {"set", "compute"}, {"set", "compute", "editor", "extra"}} {
if _, err := parseArgs(args); err == nil {
t.Errorf("accepted %v", args)
}
}
}
func TestHelp(t *testing.T) {
for _, flag := range []string{"-h", "--help"} {
var out bytes.Buffer
if err := Run([]string{flag}, &out); err != nil {
t.Fatal(err)
}
if !strings.Contains(out.String(), "run PROFILE") || !strings.Contains(out.String(), "~/.config/budget/profiles.toml") {
t.Fatal(out.String())
}
}
}
func TestStatus(t *testing.T) {
home := t.TempDir()
t.Setenv("HOME", home)
want := testConfig()
var data bytes.Buffer
if err := toml.NewEncoder(&data).Encode(want); err != nil {
t.Fatal(err)
}
put(t, homePaths(home).config, data.String())
var out bytes.Buffer
if err := Run([]string{"status"}, &out); err != nil {
t.Fatal(err)
}
var got config
if _, err := toml.Decode(out.String(), &got); err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("got %#v, want %#v", got, want)
}
}