github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/file/request_test.go (about) 1 package file 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/projectdiscovery/nuclei/v2/pkg/model" 11 "github.com/projectdiscovery/nuclei/v2/pkg/model/types/severity" 12 "github.com/projectdiscovery/nuclei/v2/pkg/operators" 13 "github.com/projectdiscovery/nuclei/v2/pkg/operators/extractors" 14 "github.com/projectdiscovery/nuclei/v2/pkg/operators/matchers" 15 "github.com/projectdiscovery/nuclei/v2/pkg/output" 16 "github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/contextargs" 17 "github.com/projectdiscovery/nuclei/v2/pkg/testutils" 18 permissionutil "github.com/projectdiscovery/utils/permission" 19 ) 20 21 func TestFileExecuteWithResults(t *testing.T) { 22 options := testutils.DefaultOptions 23 24 testutils.Init(options) 25 templateID := "testing-file" 26 executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ 27 ID: templateID, 28 Info: model.Info{SeverityHolder: severity.Holder{Severity: severity.Low}, Name: "test"}, 29 }) 30 request := &Request{ 31 ID: templateID, 32 MaxSize: "1Gb", 33 NoRecursive: false, 34 Extensions: []string{"all"}, 35 DenyList: []string{".go"}, 36 Operators: operators.Operators{ 37 Matchers: []*matchers.Matcher{{ 38 Name: "test", 39 Part: "raw", 40 Type: matchers.MatcherTypeHolder{MatcherType: matchers.WordsMatcher}, 41 Words: []string{"1.1.1.1"}, 42 }}, 43 Extractors: []*extractors.Extractor{{ 44 Part: "raw", 45 Type: extractors.ExtractorTypeHolder{ExtractorType: extractors.RegexExtractor}, 46 Regex: []string{"[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"}, 47 }}, 48 }, 49 options: executerOpts, 50 } 51 err := request.Compile(executerOpts) 52 require.Nil(t, err, "could not compile file request") 53 54 tempDir, err := os.MkdirTemp("", "test-*") 55 require.Nil(t, err, "could not create temporary directory") 56 defer os.RemoveAll(tempDir) 57 58 files := map[string]string{ 59 "config.yaml": "TEST\r\n1.1.1.1\r\n", 60 } 61 for k, v := range files { 62 err = os.WriteFile(filepath.Join(tempDir, k), []byte(v), permissionutil.TempFilePermission) 63 require.Nil(t, err, "could not write temporary file") 64 } 65 66 var finalEvent *output.InternalWrappedEvent 67 t.Run("valid", func(t *testing.T) { 68 metadata := make(output.InternalEvent) 69 previous := make(output.InternalEvent) 70 ctxArgs := contextargs.NewWithInput(tempDir) 71 err := request.ExecuteWithResults(ctxArgs, metadata, previous, func(event *output.InternalWrappedEvent) { 72 finalEvent = event 73 }) 74 require.Nil(t, err, "could not execute file request") 75 }) 76 require.NotNil(t, finalEvent, "could not get event output from request") 77 require.Equal(t, 1, len(finalEvent.Results), "could not get correct number of results") 78 require.Equal(t, "test", finalEvent.Results[0].MatcherName, "could not get correct matcher name of results") 79 require.Equal(t, 1, len(finalEvent.Results[0].ExtractedResults), "could not get correct number of extracted results") 80 require.Equal(t, "1.1.1.1", finalEvent.Results[0].ExtractedResults[0], "could not get correct extracted results") 81 finalEvent = nil 82 }