Path: blob/dev/pkg/operators/extractors/fuzz_harness_test.go
4538 views
package extractors12import (3"os"4"path/filepath"5"testing"67"github.com/stretchr/testify/require"8)910func TestExtractorFromFuzzDataSeedCorpus(t *testing.T) {11entries, err := os.ReadDir("testdata/gofuzz-corpus")12require.NoError(t, err)13require.NotEmpty(t, entries)1415for _, entry := range entries {16if entry.IsDir() {17continue18}1920path := filepath.Join("testdata/gofuzz-corpus", entry.Name())21data, err := os.ReadFile(path)22require.NoError(t, err)2324extractor, ok := extractorFromFuzzData(data)25require.Truef(t, ok, "seed %s should decode into an extractor", entry.Name())26require.NoErrorf(t, extractor.CompileExtractors(), "seed %s should compile", entry.Name())27require.NotPanicsf(t, func() {28exerciseFuzzExtractor(extractor)29}, "seed %s should execute extraction paths", entry.Name())30}31}3233func TestExtractorFromFuzzDataRejectsOversizeInput(t *testing.T) {34data := make([]byte, fuzzMaxInputSize+1)35extractor, ok := extractorFromFuzzData(data)36require.False(t, ok)37require.Nil(t, extractor)38}3940func TestExtractorFromFuzzDataFallbacksCompile(t *testing.T) {41testcases := []string{42"type=regex",43"type=kval\ncase-insensitive=true",44"type=json",45"type=xpath",46"type=dsl",47}4849for _, testcase := range testcases {50extractor, ok := extractorFromFuzzData([]byte(testcase))51require.Truef(t, ok, "fallback input %q should decode", testcase)52require.NoErrorf(t, extractor.CompileExtractors(), "fallback input %q should compile", testcase)53require.NotPanicsf(t, func() {54exerciseFuzzExtractor(extractor)55}, "fallback input %q should execute extraction paths", testcase)56}57}585960