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 }