mirror of
https://github.com/Dvorinka/Devour.git
synced 2026-06-04 12:33:04 +00:00
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package quality
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
type panicDetector struct{}
|
|
|
|
func (p panicDetector) Name() string { return "panic_detector" }
|
|
func (p panicDetector) Severity() Severity { return SeverityT2 }
|
|
func (p panicDetector) Detect(ctx context.Context, path string, config *Config) ([]Finding, error) {
|
|
panic("boom")
|
|
}
|
|
|
|
type okDetector struct{}
|
|
|
|
func (o okDetector) Name() string { return "ok_detector" }
|
|
func (o okDetector) Severity() Severity { return SeverityT1 }
|
|
func (o okDetector) Detect(ctx context.Context, path string, config *Config) ([]Finding, error) {
|
|
return []Finding{{ID: "ok", Type: "ok", Title: "ok", File: "f.go", Line: 1, Severity: SeverityT1, Score: 1, Status: StatusOpen}}, nil
|
|
}
|
|
|
|
func TestScannerRecoversDetectorPanic(t *testing.T) {
|
|
s := NewScanner(&Config{Path: ".", Language: "go"})
|
|
s.RegisterDetector(panicDetector{})
|
|
s.RegisterDetector(okDetector{})
|
|
|
|
result, err := s.Scan(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("scan should recover detector panic, got err: %v", err)
|
|
}
|
|
if len(result.Findings) != 2 {
|
|
t.Fatalf("expected healthy finding plus detector_error, got %d", len(result.Findings))
|
|
}
|
|
|
|
hasOK := false
|
|
hasDetectorError := false
|
|
for _, f := range result.Findings {
|
|
if f.ID == "ok" {
|
|
hasOK = true
|
|
}
|
|
if f.Type == "detector_error" {
|
|
hasDetectorError = true
|
|
}
|
|
}
|
|
if !hasOK {
|
|
t.Fatalf("expected to keep finding from healthy detector")
|
|
}
|
|
if !hasDetectorError {
|
|
t.Fatalf("expected detector_error finding for panicing detector")
|
|
}
|
|
}
|