diff --git a/pkg/dorks/count_test.go b/pkg/dorks/count_test.go new file mode 100644 index 0000000..9c66c07 --- /dev/null +++ b/pkg/dorks/count_test.go @@ -0,0 +1,78 @@ +package dorks + +import "testing" + +// TestDorkCountGuardrail enforces the DORK-02 requirement that the embedded +// corpus ships with at least 150 built-in dorks. If this test fails, a dork +// file was removed or a YAML was broken — do not lower the threshold, restore +// the missing dorks instead. +func TestDorkCountGuardrail(t *testing.T) { + r, err := NewRegistry() + if err != nil { + t.Fatalf("NewRegistry: %v", err) + } + const minTotal = 150 + if got := len(r.List()); got < minTotal { + t.Fatalf("dork count regression: got %d, want >= %d (see DORK-02)", got, minTotal) + } +} + +// TestDorkCountPerSource enforces per-source minimums so a partial regression +// (e.g. deleting all github dorks) is caught even if the total still clears +// 150 via other sources. +func TestDorkCountPerSource(t *testing.T) { + r, err := NewRegistry() + if err != nil { + t.Fatal(err) + } + + minimums := map[string]int{ + "github": 50, + "google": 30, + "shodan": 20, + "censys": 15, + "zoomeye": 10, + "fofa": 10, + "gitlab": 10, + "bing": 5, + } + stats := r.Stats() + for src, min := range minimums { + if stats.BySource[src] < min { + t.Errorf("source %s: got %d, want >= %d", src, stats.BySource[src], min) + } + } +} + +// TestDorkCategoriesPresent guarantees every category in the DORK-01 schema +// has at least one representative dork in the embedded corpus. +func TestDorkCategoriesPresent(t *testing.T) { + r, err := NewRegistry() + if err != nil { + t.Fatal(err) + } + required := []string{"frontier", "specialized", "infrastructure", "emerging", "enterprise"} + stats := r.Stats() + for _, c := range required { + if stats.ByCategory[c] == 0 { + t.Errorf("category %q missing", c) + } + } +} + +// TestDorkIDsUnique ensures no two dork files (across sources) use the same +// ID. Duplicate IDs would cause the later entry to shadow the earlier one in +// Registry.Get lookups. +func TestDorkIDsUnique(t *testing.T) { + r, err := NewRegistry() + if err != nil { + t.Fatal(err) + } + seen := map[string]string{} + for _, d := range r.List() { + if existing, ok := seen[d.ID]; ok { + t.Errorf("duplicate dork id %q (second occurrence: %s, first: %s)", d.ID, d.Source, existing) + } + seen[d.ID] = d.Source + } +}