github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/dns/dns_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/testutils"
    11  )
    12  
    13  func TestDNSCompileMake(t *testing.T) {
    14  	options := testutils.DefaultOptions
    15  
    16  	recursion := false
    17  	testutils.Init(options)
    18  	const templateID = "testing-dns"
    19  	request := &Request{
    20  		RequestType: DNSRequestTypeHolder{DNSRequestType: A},
    21  		Class:       "INET",
    22  		Retries:     5,
    23  		ID:          templateID,
    24  		Recursion:   &recursion,
    25  		Name:        "{{FQDN}}",
    26  	}
    27  	executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
    28  		ID:   templateID,
    29  		Info: model.Info{SeverityHolder: severity.Holder{Severity: severity.Low}, Name: "test"},
    30  	})
    31  	err := request.Compile(executerOpts)
    32  	require.Nil(t, err, "could not compile dns request")
    33  
    34  	req, err := request.Make("one.one.one.one", map[string]interface{}{"FQDN": "one.one.one.one"})
    35  	require.Nil(t, err, "could not make dns request")
    36  	require.Equal(t, "one.one.one.one.", req.Question[0].Name, "could not get correct dns question")
    37  }
    38  
    39  func TestDNSRequests(t *testing.T) {
    40  	options := testutils.DefaultOptions
    41  
    42  	recursion := false
    43  	testutils.Init(options)
    44  	const templateID = "testing-dns"
    45  
    46  	t.Run("dns-regular", func(t *testing.T) {
    47  
    48  		request := &Request{
    49  			RequestType: DNSRequestTypeHolder{DNSRequestType: A},
    50  			Class:       "INET",
    51  			Retries:     5,
    52  			ID:          templateID,
    53  			Recursion:   &recursion,
    54  			Name:        "{{FQDN}}",
    55  		}
    56  		executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
    57  			ID:   templateID,
    58  			Info: model.Info{SeverityHolder: severity.Holder{Severity: severity.Low}, Name: "test"},
    59  		})
    60  		err := request.Compile(executerOpts)
    61  		require.Nil(t, err, "could not compile dns request")
    62  
    63  		reqCount := request.Requests()
    64  		require.Equal(t, 1, reqCount, "could not get correct dns request count")
    65  	})
    66  
    67  	// test payload requests count is correct
    68  	t.Run("dns-payload", func(t *testing.T) {
    69  
    70  		request := &Request{
    71  			RequestType: DNSRequestTypeHolder{DNSRequestType: A},
    72  			Class:       "INET",
    73  			Retries:     5,
    74  			ID:          templateID,
    75  			Recursion:   &recursion,
    76  			Name:        "{{subdomain}}.{{FQDN}}",
    77  			Payloads:    map[string]interface{}{"subdomain": []string{"a", "b", "c"}},
    78  		}
    79  		executerOpts := testutils.NewMockExecuterOptions(options, &testutils.TemplateInfo{
    80  			ID:   templateID,
    81  			Info: model.Info{SeverityHolder: severity.Holder{Severity: severity.Low}, Name: "test"},
    82  		})
    83  		err := request.Compile(executerOpts)
    84  		require.Nil(t, err, "could not compile dns request")
    85  
    86  		reqCount := request.Requests()
    87  		require.Equal(t, 3, reqCount, "could not get correct dns request count")
    88  	})
    89  }