github.com/projectdiscovery/nuclei/v2@v2.9.15/internal/runner/runner_test.go (about)

     1  package runner
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  
     9  	"github.com/projectdiscovery/nuclei/v2/pkg/model/types/severity"
    10  	"github.com/projectdiscovery/nuclei/v2/pkg/types"
    11  )
    12  
    13  func Test_createReportingOptions(t *testing.T) {
    14  	var options types.Options
    15  	options.ReportingConfig = "../../../integration_tests/test-issue-tracker-config1.yaml"
    16  	resultOptions, err := createReportingOptions(&options)
    17  
    18  	assert.Nil(t, err)
    19  	assert.Equal(t, resultOptions.AllowList.Severities, severity.Severities{severity.High, severity.Critical})
    20  	assert.Equal(t, resultOptions.DenyList.Severities, severity.Severities{severity.Low})
    21  
    22  	options.ReportingConfig = "../../../integration_tests/test-issue-tracker-config2.yaml"
    23  	resultOptions2, err := createReportingOptions(&options)
    24  	assert.Nil(t, err)
    25  	assert.Equal(t, resultOptions2.AllowList.Severities, resultOptions.AllowList.Severities)
    26  	assert.Equal(t, resultOptions2.DenyList.Severities, resultOptions.DenyList.Severities)
    27  }
    28  
    29  type TestStruct1 struct {
    30  	A      string       `yaml:"a"`
    31  	Struct *TestStruct2 `yaml:"b"`
    32  }
    33  
    34  type TestStruct2 struct {
    35  	B string `yaml:"b"`
    36  }
    37  
    38  type TestStruct3 struct {
    39  	A string `yaml:"a"`
    40  	B string `yaml:"b"`
    41  	C string `yaml:"c"`
    42  }
    43  
    44  type TestStruct4 struct {
    45  	A      string       `yaml:"a"`
    46  	Struct *TestStruct3 `yaml:"b"`
    47  }
    48  
    49  type TestStruct5 struct {
    50  	A []string  `yaml:"a"`
    51  	B [2]string `yaml:"b"`
    52  }
    53  
    54  type TestStruct6 struct {
    55  	A string       `yaml:"a"`
    56  	B *TestStruct2 `yaml:"b"`
    57  	C string
    58  }
    59  
    60  func TestWalkReflectStructAssignsEnvVars(t *testing.T) {
    61  	testStruct := &TestStruct1{
    62  		A: "$VAR_EXAMPLE",
    63  		Struct: &TestStruct2{
    64  			B: "$VAR_TWO",
    65  		},
    66  	}
    67  	os.Setenv("VAR_EXAMPLE", "value")
    68  	os.Setenv("VAR_TWO", "value2")
    69  
    70  	Walk(testStruct, expandEndVars)
    71  
    72  	assert.Equal(t, "value", testStruct.A)
    73  	assert.Equal(t, "value2", testStruct.Struct.B)
    74  }
    75  
    76  func TestWalkReflectStructHandlesDifferentTypes(t *testing.T) {
    77  	testStruct := &TestStruct3{
    78  		A: "$VAR_EXAMPLE",
    79  		B: "$VAR_TWO",
    80  		C: "$VAR_THREE",
    81  	}
    82  	os.Setenv("VAR_EXAMPLE", "value")
    83  	os.Setenv("VAR_TWO", "2")
    84  	os.Setenv("VAR_THREE", "true")
    85  
    86  	Walk(testStruct, expandEndVars)
    87  
    88  	assert.Equal(t, "value", testStruct.A)
    89  	assert.Equal(t, "2", testStruct.B)
    90  	assert.Equal(t, "true", testStruct.C)
    91  }
    92  
    93  func TestWalkReflectStructEmpty(t *testing.T) {
    94  	testStruct := &TestStruct3{
    95  		A: "$VAR_EXAMPLE",
    96  		B: "",
    97  		C: "$VAR_THREE",
    98  	}
    99  	os.Setenv("VAR_EXAMPLE", "value")
   100  	os.Setenv("VAR_TWO", "2")
   101  	os.Setenv("VAR_THREE", "true")
   102  
   103  	Walk(testStruct, expandEndVars)
   104  
   105  	assert.Equal(t, "value", testStruct.A)
   106  	assert.Equal(t, "", testStruct.B)
   107  	assert.Equal(t, "true", testStruct.C)
   108  }
   109  
   110  func TestWalkReflectStructWithNoYamlTag(t *testing.T) {
   111  	test := &TestStruct6{
   112  		A: "$GITHUB_USER",
   113  		B: &TestStruct2{
   114  			B: "$GITHUB_USER",
   115  		},
   116  		C: "$GITHUB_USER",
   117  	}
   118  
   119  	os.Setenv("GITHUB_USER", "testuser")
   120  
   121  	Walk(test, expandEndVars)
   122  	assert.Equal(t, "testuser", test.A)
   123  	assert.Equal(t, "testuser", test.B.B, test.B)
   124  	assert.Equal(t, "$GITHUB_USER", test.C)
   125  }
   126  
   127  func TestWalkReflectStructHandlesNestedStructs(t *testing.T) {
   128  	testStruct := &TestStruct4{
   129  		A: "$VAR_EXAMPLE",
   130  		Struct: &TestStruct3{
   131  			B: "$VAR_TWO",
   132  			C: "$VAR_THREE",
   133  		},
   134  	}
   135  	os.Setenv("VAR_EXAMPLE", "value")
   136  	os.Setenv("VAR_TWO", "2")
   137  	os.Setenv("VAR_THREE", "true")
   138  
   139  	Walk(testStruct, expandEndVars)
   140  
   141  	assert.Equal(t, "value", testStruct.A)
   142  	assert.Equal(t, "2", testStruct.Struct.B)
   143  	assert.Equal(t, "true", testStruct.Struct.C)
   144  }