test(02-05): add tier1/tier2 provider guardrail test

- TestTier1Count asserts exactly 12 Tier 1 providers loaded
- TestTier2Count asserts exactly 14 Tier 2 providers loaded
- TestAllPatternsCompile verifies every regex compiles under RE2
- TestAllProvidersHaveKeywords guards Aho-Corasick pre-filter
- TestTier1/Tier2ProviderNames lock in expected provider names

Locks Phase 2 coverage against silent regressions in Phase 3+.
Addresses PROV-01, PROV-02.
This commit is contained in:
salvacybersec
2026-04-05 14:15:00 +03:00
parent 33b2a6e5ad
commit 58f302b67d

View File

@@ -0,0 +1,103 @@
package providers
import (
"regexp"
"testing"
)
// expectedTier1 lists all 12 Tier 1 Frontier provider names (PROV-01).
var expectedTier1 = []string{
"openai", "anthropic", "google-ai", "vertex-ai", "aws-bedrock",
"azure-openai", "meta-ai", "xai", "cohere", "mistral",
"inflection", "ai21",
}
// expectedTier2 lists all 14 Tier 2 Inference Platform provider names (PROV-02).
var expectedTier2 = []string{
"groq", "replicate", "anyscale", "together", "fireworks",
"baseten", "deepinfra", "lepton", "modal", "cerebrium",
"novita", "sambanova", "octoai", "friendli",
}
func TestTier1Count(t *testing.T) {
reg, err := NewRegistry()
if err != nil {
t.Fatalf("NewRegistry failed: %v", err)
}
stats := reg.Stats()
if got := stats.ByTier[1]; got != 12 {
t.Errorf("Tier 1 count = %d, want 12", got)
}
}
func TestTier2Count(t *testing.T) {
reg, err := NewRegistry()
if err != nil {
t.Fatalf("NewRegistry failed: %v", err)
}
stats := reg.Stats()
if got := stats.ByTier[2]; got != 14 {
t.Errorf("Tier 2 count = %d, want 14", got)
}
}
func TestAllPatternsCompile(t *testing.T) {
reg, err := NewRegistry()
if err != nil {
t.Fatalf("NewRegistry failed: %v", err)
}
for _, p := range reg.List() {
for i, pat := range p.Patterns {
if _, err := regexp.Compile(pat.Regex); err != nil {
t.Errorf("provider %q pattern[%d] regex %q failed to compile: %v",
p.Name, i, pat.Regex, err)
}
}
}
}
func TestAllProvidersHaveKeywords(t *testing.T) {
reg, err := NewRegistry()
if err != nil {
t.Fatalf("NewRegistry failed: %v", err)
}
for _, p := range reg.List() {
if len(p.Keywords) == 0 {
t.Errorf("provider %q has no keywords (breaks AC pre-filter)", p.Name)
}
}
}
func TestTier1ProviderNames(t *testing.T) {
reg, err := NewRegistry()
if err != nil {
t.Fatalf("NewRegistry failed: %v", err)
}
for _, name := range expectedTier1 {
p, ok := reg.Get(name)
if !ok {
t.Errorf("Tier 1 provider %q not found in registry", name)
continue
}
if p.Tier != 1 {
t.Errorf("provider %q tier = %d, want 1", name, p.Tier)
}
}
}
func TestTier2ProviderNames(t *testing.T) {
reg, err := NewRegistry()
if err != nil {
t.Fatalf("NewRegistry failed: %v", err)
}
for _, name := range expectedTier2 {
p, ok := reg.Get(name)
if !ok {
t.Errorf("Tier 2 provider %q not found in registry", name)
continue
}
if p.Tier != 2 {
t.Errorf("provider %q tier = %d, want 2", name, p.Tier)
}
}
}