github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/dns/request_test.go (about) 1 package dns 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 "github.com/projectdiscovery/nuclei/v2/pkg/model" 9 "github.com/projectdiscovery/nuclei/v2/pkg/model/types/severity" 10 "github.com/projectdiscovery/nuclei/v2/pkg/operators" 11 "github.com/projectdiscovery/nuclei/v2/pkg/operators/extractors" 12 "github.com/projectdiscovery/nuclei/v2/pkg/operators/matchers" 13 "github.com/projectdiscovery/nuclei/v2/pkg/output" 14 "github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/contextargs" 15 "github.com/projectdiscovery/nuclei/v2/pkg/testutils" 16 ) 17 18 func TestDNSExecuteWithResults(t *testing.T) { 19 options := testutils.DefaultOptions 20 21 recursion := false 22 testutils.Init(options) 23 templateID := "testing-dns" 24 executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{ 25 ID: templateID, 26 Info: model.Info{SeverityHolder: severity.Holder{Severity: severity.Low}, Name: "test"}, 27 }) 28 request := &Request{ 29 RequestType: DNSRequestTypeHolder{DNSRequestType: A}, 30 Class: "INET", 31 Retries: 5, 32 ID: templateID, 33 Recursion: &recursion, 34 Name: "{{FQDN}}", 35 Operators: operators.Operators{ 36 Matchers: []*matchers.Matcher{{ 37 Name: "test", 38 Part: "raw", 39 Type: matchers.MatcherTypeHolder{MatcherType: matchers.WordsMatcher}, 40 Words: []string{"93.184.216.34"}, 41 }}, 42 Extractors: []*extractors.Extractor{{ 43 Part: "raw", 44 Type: extractors.ExtractorTypeHolder{ExtractorType: extractors.RegexExtractor}, 45 Regex: []string{"[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"}, 46 }}, 47 }, 48 options: executerOpts, 49 } 50 err := request.Compile(executerOpts) 51 require.Nil(t, err, "could not compile dns request") 52 53 var finalEvent *output.InternalWrappedEvent 54 t.Run("domain-valid", func(t *testing.T) { 55 metadata := make(output.InternalEvent) 56 previous := make(output.InternalEvent) 57 ctxArgs := contextargs.NewWithInput("example.com") 58 err := request.ExecuteWithResults(ctxArgs, metadata, previous, func(event *output.InternalWrappedEvent) { 59 finalEvent = event 60 }) 61 require.Nil(t, err, "could not execute dns request") 62 }) 63 require.NotNil(t, finalEvent, "could not get event output from request") 64 require.Equal(t, 1, len(finalEvent.Results), "could not get correct number of results") 65 require.Equal(t, "test", finalEvent.Results[0].MatcherName, "could not get correct matcher name of results") 66 require.Equal(t, 1, len(finalEvent.Results[0].ExtractedResults), "could not get correct number of extracted results") 67 require.Equal(t, "93.184.216.34", finalEvent.Results[0].ExtractedResults[0], "could not get correct extracted results") 68 finalEvent = nil 69 70 t.Run("url-to-domain", func(t *testing.T) { 71 metadata := make(output.InternalEvent) 72 previous := make(output.InternalEvent) 73 err := request.ExecuteWithResults(contextargs.NewWithInput("https://example.com"), metadata, previous, func(event *output.InternalWrappedEvent) { 74 finalEvent = event 75 }) 76 require.Nil(t, err, "could not execute dns request") 77 }) 78 require.NotNil(t, finalEvent, "could not get event output from request") 79 require.Equal(t, 1, len(finalEvent.Results), "could not get correct number of results") 80 require.Equal(t, "test", finalEvent.Results[0].MatcherName, "could not get correct matcher name of results") 81 require.Equal(t, 1, len(finalEvent.Results[0].ExtractedResults), "could not get correct number of extracted results") 82 require.Equal(t, "93.184.216.34", finalEvent.Results[0].ExtractedResults[0], "could not get correct extracted results") 83 finalEvent = nil 84 }