mirror of
https://github.com/crowdsecurity/crowdsec.git
synced 2025-05-11 04:15:54 +02:00
Hubtests are now much faster and have a --max-jobs option which defaults to the number of cpu cores.
82 lines
2 KiB
Go
82 lines
2 KiB
Go
package clihubtest
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/crowdsecurity/crowdsec/cmd/crowdsec-cli/args"
|
|
"github.com/crowdsecurity/crowdsec/pkg/dumps"
|
|
)
|
|
|
|
func (cli *cliHubTest) explain(ctx context.Context, testName string, details bool, skipOk bool) error {
|
|
test, err := HubTest.LoadTestItem(testName)
|
|
if err != nil {
|
|
return fmt.Errorf("can't load test: %w", err)
|
|
}
|
|
|
|
cfg := cli.cfg()
|
|
patternDir := cfg.ConfigPaths.PatternDir
|
|
|
|
err = test.ParserAssert.LoadTest(test.ParserResultFile)
|
|
if err != nil {
|
|
if err = test.Run(ctx, patternDir); err != nil {
|
|
return fmt.Errorf("running test '%s' failed: %w", test.Name, err)
|
|
}
|
|
|
|
if err = test.ParserAssert.LoadTest(test.ParserResultFile); err != nil {
|
|
return fmt.Errorf("unable to load parser result after run: %w", err)
|
|
}
|
|
}
|
|
|
|
err = test.ScenarioAssert.LoadTest(test.ScenarioResultFile, test.BucketPourResultFile)
|
|
if err != nil {
|
|
if err = test.Run(ctx, patternDir); err != nil {
|
|
return fmt.Errorf("running test '%s' failed: %w", test.Name, err)
|
|
}
|
|
|
|
if err = test.ScenarioAssert.LoadTest(test.ScenarioResultFile, test.BucketPourResultFile); err != nil {
|
|
return fmt.Errorf("unable to load scenario result after run: %w", err)
|
|
}
|
|
}
|
|
|
|
opts := dumps.DumpOpts{
|
|
Details: details,
|
|
SkipOk: skipOk,
|
|
}
|
|
|
|
dumps.DumpTree(*test.ParserAssert.TestData, *test.ScenarioAssert.PourData, opts)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (cli *cliHubTest) newExplainCmd() *cobra.Command {
|
|
var (
|
|
details bool
|
|
skipOk bool
|
|
)
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "explain",
|
|
Short: "explain [test_name]",
|
|
Args: args.MinimumNArgs(1),
|
|
DisableAutoGenTag: true,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
ctx := cmd.Context()
|
|
for _, testName := range args {
|
|
if err := cli.explain(ctx, testName, details, skipOk); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
},
|
|
}
|
|
|
|
flags := cmd.Flags()
|
|
flags.BoolVarP(&details, "verbose", "v", false, "Display individual changes")
|
|
flags.BoolVar(&skipOk, "failures", false, "Only show failed lines")
|
|
|
|
return cmd
|
|
}
|