Files
2025-09-27 04:55:20 +03:00

197 lines
5.0 KiB
Go

package testdata
import (
"strings"
"testing"
"github.com/vxcontrol/cloud/anonymizer/patterns"
)
func TestLoadAllTestData(t *testing.T) {
datasets, err := LoadAllTestData()
if err != nil {
t.Fatalf("failed to load test data: %v", err)
}
if len(datasets) == 0 {
t.Fatal("no datasets loaded")
}
expectedCategories := []string{
"credentials", "financial", "network", "personal",
"crypto", "cloud", "services", "paths", "config",
}
if len(datasets) != len(expectedCategories) {
t.Errorf("expected %d categories, got %d", len(expectedCategories), len(datasets))
}
totalEntries := 0
totalExamples := 0
for _, dataset := range datasets {
if dataset.Category == "" {
t.Error("dataset category should not be empty")
}
if len(dataset.Entries) == 0 {
t.Errorf("dataset %s should have entries", dataset.Category)
}
for _, entry := range dataset.Entries {
if entry.Name == "" {
t.Errorf("entry name should not be empty in category %s", dataset.Category)
}
if entry.Examples == "" {
t.Errorf("entry %s should have examples", entry.Name)
}
exampleLines := strings.Split(entry.Examples, "\n")
totalExamples += len(exampleLines)
}
totalEntries += len(dataset.Entries)
}
t.Logf("loaded %d datasets with %d entries and %d examples",
len(datasets), totalEntries, totalExamples)
}
func TestIndividualDatasetLoaders(t *testing.T) {
loaders := map[string]func() (*TestDataset, error){
"credentials": LoadCredentialsData,
"financial": LoadFinancialData,
"network": LoadNetworkData,
"personal": LoadPersonalData,
"crypto": LoadCryptoData,
"cloud": LoadCloudData,
"services": LoadServicesData,
"paths": LoadPathsData,
"config": LoadConfigData,
"insensitive": LoadInsensitiveData,
}
for name, loader := range loaders {
t.Run(name, func(t *testing.T) {
dataset, err := loader()
if err != nil {
t.Fatalf("failed to load %s data: %v", name, err)
}
if dataset.Category != name {
t.Errorf("expected category %s, got %s", name, dataset.Category)
}
if len(dataset.Entries) == 0 {
t.Errorf("%s dataset should have entries", name)
}
})
}
}
func TestDatasetDuplicates(t *testing.T) {
datasets, err := LoadAllTestData()
if err != nil {
t.Fatalf("failed to load test data: %v", err)
}
testPatterns := make(map[string]struct{})
for _, dataset := range datasets {
for _, entry := range dataset.Entries {
if _, ok := testPatterns[entry.Name]; ok {
t.Errorf("duplicate pattern %s in %s", entry.Name, dataset.Category)
}
testPatterns[entry.Name] = struct{}{}
}
}
}
func TestPatternCoverage(t *testing.T) {
datasets, err := LoadAllTestData()
if err != nil {
t.Fatalf("failed to load test data: %v", err)
}
testPatterns := make(map[string]struct{})
for _, dataset := range datasets {
for _, entry := range dataset.Entries {
testPatterns[entry.Name] = struct{}{}
}
}
allPatterns, err := patterns.LoadPatterns(patterns.PatternListTypeAll)
if err != nil {
t.Fatalf("failed to load all patterns: %v", err)
}
allPatternNames := make(map[string]struct{})
for _, pattern := range allPatterns.Patterns {
allPatternNames[pattern.Name] = struct{}{}
}
var uncoveredPatterns []string
for _, pattern := range allPatterns.Patterns {
if _, ok := testPatterns[pattern.Name]; !ok {
uncoveredPatterns = append(uncoveredPatterns, "general: "+pattern.Name)
}
}
if len(uncoveredPatterns) > 0 {
t.Errorf("uncovered patterns found (%d):", len(uncoveredPatterns))
for _, pattern := range uncoveredPatterns {
t.Logf(" - %s", pattern)
}
t.Error("please add test data for uncovered patterns")
} else {
t.Log("100% required patterns covered")
}
totalPatterns := len(allPatterns.Patterns)
coveredPatterns := len(testPatterns)
coveragePercent := float64(coveredPatterns) / float64(totalPatterns) * 100
t.Logf("pattern coverage: %d/%d (%.1f%%)",
coveredPatterns, totalPatterns, coveragePercent)
if coveragePercent != 100.0 {
t.Errorf("pattern coverage too low: %.1f%% (expected 100%%)", coveragePercent)
}
for _, dataset := range datasets {
for _, entry := range dataset.Entries {
if _, ok := allPatternNames[entry.Name]; !ok {
t.Errorf("pattern '%s' in %s is not covered", entry.Name, dataset.Category)
}
}
}
}
func TestDataFormat(t *testing.T) {
datasets, err := LoadAllTestData()
if err != nil {
t.Fatalf("failed to load test data: %v", err)
}
for _, dataset := range datasets {
// check that raw content exists
if dataset.Raw == "" {
t.Errorf("dataset %s should have raw content", dataset.Category)
}
for _, entry := range dataset.Entries {
if entry.Examples == "" {
t.Errorf("entry %s in %s has no examples", entry.Name, dataset.Category)
continue
}
// check that examples are not empty when split by lines
exampleLines := strings.Split(entry.Examples, "\n")
for i, example := range exampleLines {
if strings.TrimSpace(example) == "" {
t.Errorf("empty example at line %d for %s in %s",
i, entry.Name, dataset.Category)
}
}
}
}
}