package model import "testing" func TestQuotaCarry(t *testing.T) { rule := func(per string, v4, v6 int) *Rule { return &Rule{GroupV4: v4, GroupV6: v6, Quota: &Quota{Bytes: 1, PerSource: per == "src", PerDestination: per == "dst"}} } for _, c := range []struct { old, new *Rule want string }{ {rule("", 0, 0), rule("", 0, 0), QuotaKept}, {rule("src", 0, 0), rule("src", 32, 64), QuotaKept}, // the defaults, written out {rule("src", 0, 0), rule("", 0, 0), QuotaSummed}, {rule("", 0, 0), rule("src", 0, 0), QuotaRestarts}, {rule("src", 0, 0), rule("dst", 0, 0), QuotaRestarts}, {rule("src", 0, 0), rule("src", 24, 56), QuotaRegrouped}, {rule("src", 0, 0), rule("src", 24, 128), QuotaRestarts}, {nil, rule("src", 0, 0), QuotaKept}, } { if got, _ := QuotaCarry(c.old, c.new); got != c.want { t.Errorf("%+v -> %+v: %q, want %q", c.old, c.new, got, c.want) } } }