test(08-07): add dork count + uniqueness guardrail
- TestDorkCountGuardrail: enforces DORK-02 >=150 floor - TestDorkCountPerSource: per-source minimums (github>=50, google>=30, shodan>=20, censys>=15, zoomeye/fofa/gitlab>=10, bing>=5) - TestDorkCategoriesPresent: all 5 DORK-01 categories present - TestDorkIDsUnique: no collisions across source files
This commit is contained in:
78
pkg/dorks/count_test.go
Normal file
78
pkg/dorks/count_test.go
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user