package config import ( "strings" "testing" ) func TestFacilityBudgetsAreReadFromServerYAML(t *testing.T) { p := write(t, ` facility: margin: 0.1 gpu_watts: 700 node_watts: 350 budgets: - domain: rack:r12-07 cap_watts: 16000 other_watts: 800 - domain: pdu:r12-07-a cap_watts: 7400 `) cfg, err := Load(p) if err != nil { t.Fatal(err) } pol, err := cfg.Facility.Policy() if err != nil { t.Fatal(err) } if b := pol.Budgets["rack:r12-07"]; b.CapWatts != 16000 || b.OtherWatts != 800 { t.Errorf("rack budget %+v", b) } if pol.Limit("pdu:r12-07-a") != 7400*0.9 || pol.GPUWatts != 700 || pol.NodeWatts != 350 { t.Errorf("policy %+v", pol) } } func TestAFacilityBudgetThatCannotBeUsedIsRefused(t *testing.T) { for yaml, want := range map[string]string{ "facility:\n budgets:\n - domain: r12-07\n cap_watts: 1000\n": "level:name", "facility:\n budgets:\n - domain: rack:r1\n": "cap_watts must be above zero", "facility:\n margin: 1.5\n": "facility.margin", "facility:\n budgets:\n - {domain: rack:r1, cap_watts: 1}\n - {domain: rack:r1, cap_watts: 2}\n": "given twice", } { cfg, err := Load(write(t, yaml)) if err == nil { err = cfg.Validate() } if err == nil || !strings.Contains(err.Error(), want) { t.Errorf("%q: got %v, want %q", yaml, err, want) } } }