58 lines
1.9 KiB
Go
58 lines
1.9 KiB
Go
package ci
|
|
|
|
import (
|
|
"github.com/spf13/viper"
|
|
"github.com/wagoodman/dive/image"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func Test_Evaluator(t *testing.T) {
|
|
|
|
result, err := image.TestLoadDockerImageTar("../../.data/test-docker-image.tar")
|
|
if err != nil {
|
|
t.Fatalf("Test_Export: unable to fetch analysis: %v", err)
|
|
}
|
|
|
|
table := map[string]struct {
|
|
efficiency string
|
|
wastedBytes string
|
|
wastedPercent string
|
|
expectedPass bool
|
|
expectedResult map[string]RuleStatus
|
|
}{
|
|
"allFail": {"0.99", "1B", "0.01", false, map[string]RuleStatus{"lowestEfficiency": RuleFailed, "highestWastedBytes": RuleFailed, "highestUserWastedPercent": RuleFailed}},
|
|
"allPass": {"0.9", "50kB", "0.1", true, map[string]RuleStatus{"lowestEfficiency": RulePassed, "highestWastedBytes": RulePassed, "highestUserWastedPercent": RulePassed}},
|
|
"allDisabled": {"disabled", "disabled", "disabled", true, map[string]RuleStatus{"lowestEfficiency": RuleDisabled, "highestWastedBytes": RuleDisabled, "highestUserWastedPercent": RuleDisabled}},
|
|
}
|
|
|
|
for _, test := range table {
|
|
evaluator := NewEvaluator()
|
|
|
|
ciConfig := viper.New()
|
|
ciConfig.SetDefault("rules.lowestEfficiency", test.efficiency)
|
|
ciConfig.SetDefault("rules.highestWastedBytes", test.wastedBytes)
|
|
ciConfig.SetDefault("rules.highestUserWastedPercent", test.wastedPercent)
|
|
evaluator.Config = ciConfig
|
|
|
|
pass := evaluator.Evaluate(result)
|
|
|
|
if test.expectedPass != pass {
|
|
t.Errorf("Test_Evaluator: expected pass=%v, got %v", test.expectedPass, pass)
|
|
}
|
|
|
|
if len(test.expectedResult) != len(evaluator.Results) {
|
|
t.Errorf("Test_Evaluator: expected %v results, got %v", len(test.expectedResult), len(evaluator.Results))
|
|
}
|
|
|
|
for rule, actualResult := range evaluator.Results {
|
|
expectedStatus := test.expectedResult[strings.TrimPrefix(rule, "rules.")]
|
|
if expectedStatus != actualResult.status {
|
|
t.Errorf(" %v: expected %v rule failures, got %v", rule, expectedStatus, actualResult.status)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|