Path: blob/dev/pkg/protocols/dns/request_test.go
2070 views
package dns12import (3"context"4"testing"56"github.com/stretchr/testify/require"78"github.com/projectdiscovery/nuclei/v3/pkg/model"9"github.com/projectdiscovery/nuclei/v3/pkg/model/types/severity"10"github.com/projectdiscovery/nuclei/v3/pkg/operators"11"github.com/projectdiscovery/nuclei/v3/pkg/operators/extractors"12"github.com/projectdiscovery/nuclei/v3/pkg/operators/matchers"13"github.com/projectdiscovery/nuclei/v3/pkg/output"14"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/contextargs"15"github.com/projectdiscovery/nuclei/v3/pkg/testutils"16)1718func TestDNSExecuteWithResults(t *testing.T) {19options := testutils.DefaultOptions2021recursion := true22testutils.Init(options)23templateID := "testing-dns"24executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{25ID: templateID,26Info: model.Info{SeverityHolder: severity.Holder{Severity: severity.Low}, Name: "test"},27})28request := &Request{29RequestType: DNSRequestTypeHolder{DNSRequestType: A},30Class: "INET",31Retries: 5,32ID: templateID,33Recursion: &recursion,34Name: "{{FQDN}}",35Operators: operators.Operators{36Matchers: []*matchers.Matcher{{37Name: "test",38Part: "raw",39Type: matchers.MatcherTypeHolder{MatcherType: matchers.WordsMatcher},40Words: []string{"8.8.8.8"},41}},42Extractors: []*extractors.Extractor{{43Part: "raw",44Type: extractors.ExtractorTypeHolder{ExtractorType: extractors.RegexExtractor},45Regex: []string{"[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"},46}},47},48options: executerOpts,49}50err := request.Compile(executerOpts)51require.Nil(t, err, "could not compile dns request")5253var finalEvent *output.InternalWrappedEvent54t.Run("domain-valid", func(t *testing.T) {55metadata := make(output.InternalEvent)56previous := make(output.InternalEvent)57ctxArgs := contextargs.NewWithInput(context.Background(), "dns.google")58err := request.ExecuteWithResults(ctxArgs, metadata, previous, func(event *output.InternalWrappedEvent) {59finalEvent = event60})61require.Nil(t, err, "could not execute dns request")62})63require.NotNil(t, finalEvent, "could not get event output from request")64require.Equal(t, 1, len(finalEvent.Results), "could not get correct number of results")65require.Equal(t, "test", finalEvent.Results[0].MatcherName, "could not get correct matcher name of results")66require.GreaterOrEqual(t, 2, len(finalEvent.Results[0].ExtractedResults), "could not get correct number of extracted results")67require.Contains(t, finalEvent.Results[0].ExtractedResults, "8.8.8.8", "could not get correct extracted results")68require.Contains(t, finalEvent.Results[0].ExtractedResults, "8.8.4.4", "could not get correct extracted results")69finalEvent = nil70// Note: changing url to domain is responsible at tmplexec package and is implemented there71}727374