package config import ( "errors" "fmt" "testing" ) func TestThresholdValid(t *testing.T) { for _, tt := range []struct { name string input *Threshold err error }{ { name: "basic allow", input: &Threshold{ Name: "basic-allow", Expression: &ExpressionOrList{Expression: "true"}, Action: RuleAllow, }, err: nil, }, { name: "basic challenge", input: &Threshold{ Name: "basic-challenge", Expression: &ExpressionOrList{Expression: "true"}, Action: RuleChallenge, Challenge: &ChallengeRules{ Algorithm: "fast", Difficulty: 1, ReportAs: 1, }, }, err: nil, }, { name: "no name", input: &Threshold{}, err: ErrThresholdMustHaveName, }, { name: "no expression", input: &Threshold{}, err: ErrThresholdMustHaveName, }, { name: "invalid expression", input: &Threshold{ Expression: &ExpressionOrList{}, }, err: ErrExpressionEmpty, }, { name: "invalid action", input: &Threshold{}, err: ErrUnknownAction, }, { name: "challenge action but no challenge", input: &Threshold{ Action: RuleChallenge, }, err: ErrThresholdChallengeMustHaveChallenge, }, { name: "challenge invalid", input: &Threshold{ Action: RuleChallenge, Challenge: &ChallengeRules{Difficulty: 0, ReportAs: 0}, }, err: ErrChallengeDifficultyTooLow, }, } { t.Run(tt.name, func(t *testing.T) { if err := tt.input.Valid(); !errors.Is(err, tt.err) { t.Errorf("threshold is invalid: %v", err) } }) } } func TestDefaultThresholdsValid(t *testing.T) { for i, th := range DefaultThresholds { t.Run(fmt.Sprintf("%d %s", i, th.Name), func(t *testing.T) { if err := th.Valid(); err != nil { t.Errorf("threshold invalid: %v", err) } }) } }