github.com/projectdiscovery/nuclei/v2@v2.9.15/pkg/protocols/common/generators/load_test.go (about) 1 package generators 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/projectdiscovery/nuclei/v2/pkg/catalog/disk" 9 osutils "github.com/projectdiscovery/utils/os" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestLoadPayloads(t *testing.T) { 14 tempdir, err := os.MkdirTemp("", "templates-*") 15 require.NoError(t, err, "could not create temp dir") 16 defer os.RemoveAll(tempdir) 17 18 generator := &PayloadGenerator{catalog: disk.NewCatalog(tempdir)} 19 20 fullpath := filepath.Join(tempdir, "payloads.txt") 21 err = os.WriteFile(fullpath, []byte("test\nanother"), 0777) 22 require.NoError(t, err, "could not write payload") 23 24 // Test sandbox 25 t.Run("templates-directory", func(t *testing.T) { 26 values, err := generator.loadPayloads(map[string]interface{}{ 27 "new": fullpath, 28 }, "/test", tempdir, false) 29 require.NoError(t, err, "could not load payloads") 30 require.Equal(t, map[string][]string{"new": {"test", "another"}}, values, "could not get values") 31 }) 32 t.Run("templates-path-relative", func(t *testing.T) { 33 _, err := generator.loadPayloads(map[string]interface{}{ 34 "new": "../../../../../../../../../etc/passwd", 35 }, ".", tempdir, false) 36 require.Error(t, err, "could load payloads") 37 }) 38 t.Run("template-directory", func(t *testing.T) { 39 values, err := generator.loadPayloads(map[string]interface{}{ 40 "new": fullpath, 41 }, filepath.Join(tempdir, "test.yaml"), "/test", false) 42 require.NoError(t, err, "could not load payloads") 43 require.Equal(t, map[string][]string{"new": {"test", "another"}}, values, "could not get values") 44 }) 45 t.Run("no-sandbox-unix", func(t *testing.T) { 46 if osutils.IsWindows() { 47 return 48 } 49 _, err := generator.loadPayloads(map[string]interface{}{ 50 "new": "/etc/passwd", 51 }, "/random", "/test", true) 52 require.NoError(t, err, "could load payloads") 53 }) 54 t.Run("invalid", func(t *testing.T) { 55 values, err := generator.loadPayloads(map[string]interface{}{ 56 "new": "/etc/passwd", 57 }, "/random", "/test", false) 58 require.Error(t, err, "could load payloads") 59 require.Equal(t, 0, len(values), "could get values") 60 61 values, err = generator.loadPayloads(map[string]interface{}{ 62 "new": fullpath, 63 }, "/random", "/test", false) 64 require.Error(t, err, "could load payloads") 65 require.Equal(t, 0, len(values), "could get values") 66 }) 67 }