mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-24 19:07:56 +00:00
* prototype errkit * complete errkit implementation * add cause to all timeouts * fix request timeout annotation @timeout * increase responseHeaderTimeout to 8 for stability * rawhttp error related improvements * feat: add port status caching * add port status caching to http * migrate to new utils/errkit * remote dialinterface + error cause * debug dir support using .gitignore debug-* * make nuclei easy to debug * debug dir update .gitignore * temp change (to revert) * Revert "temp change (to revert)" This reverts commit d3131f777713b9f80e2275142e80f36340a76d36. * use available context instead of new one * bump fastdialer * fix hosterrorscache + misc improvements * add 'address' field in error log * fix js vague errors + pgwrap driver * fix max host error + misc updates * update tests as per changes * fix request annotation context * remove closed dialer reference * fix sdk panic issue * bump retryablehttp-go,utils,fastdialer --------- Co-authored-by: Sandeep Singh <sandeep@projectdiscovery.io>
61 lines
1.8 KiB
Go
61 lines
1.8 KiB
Go
package output
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/projectdiscovery/nuclei/v3/pkg/types"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestStandardWriterRequest(t *testing.T) {
|
|
t.Run("WithoutTraceAndError", func(t *testing.T) {
|
|
w, err := NewStandardWriter(&types.Options{})
|
|
require.NoError(t, err)
|
|
require.NotPanics(t, func() {
|
|
w.Request("path", "input", "http", nil)
|
|
w.Close()
|
|
})
|
|
})
|
|
|
|
t.Run("TraceAndErrorWithoutError", func(t *testing.T) {
|
|
traceWriter := &testWriteCloser{}
|
|
errorWriter := &testWriteCloser{}
|
|
|
|
w, err := NewStandardWriter(&types.Options{})
|
|
w.traceFile = traceWriter
|
|
w.errorFile = errorWriter
|
|
require.NoError(t, err)
|
|
w.Request("path", "input", "http", nil)
|
|
|
|
require.Equal(t, `{"template":"path","type":"http","input":"input","address":"input:","error":"none"}`, traceWriter.String())
|
|
require.Empty(t, errorWriter.String())
|
|
})
|
|
|
|
t.Run("ErrorWithWrappedError", func(t *testing.T) {
|
|
errorWriter := &testWriteCloser{}
|
|
|
|
w, err := NewStandardWriter(&types.Options{})
|
|
w.errorFile = errorWriter
|
|
require.NoError(t, err)
|
|
w.Request(
|
|
"misconfiguration/tcpconfig.yaml",
|
|
"https://example.com/tcpconfig.html",
|
|
"http",
|
|
fmt.Errorf("GET https://example.com/tcpconfig.html/tcpconfig.html giving up after 2 attempts: %w", errors.New("context deadline exceeded (Client.Timeout exceeded while awaiting headers)")),
|
|
)
|
|
|
|
require.Equal(t, `{"template":"misconfiguration/tcpconfig.yaml","type":"http","input":"https://example.com/tcpconfig.html","address":"example.com:443","error":"context deadline exceeded (Client.Timeout exceeded while awaiting headers)","kind":"unknown-error"}`, errorWriter.String())
|
|
})
|
|
}
|
|
|
|
type testWriteCloser struct {
|
|
strings.Builder
|
|
}
|
|
|
|
func (w testWriteCloser) Close() error {
|
|
return nil
|
|
}
|