Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/internal/runner/runner_test.go
2070 views
1
package runner
2
3
import (
4
"os"
5
"testing"
6
7
"github.com/stretchr/testify/require"
8
9
"github.com/projectdiscovery/nuclei/v3/pkg/model/types/severity"
10
"github.com/projectdiscovery/nuclei/v3/pkg/types"
11
)
12
13
func TestCreateReportingOptions(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
require.Nil(t, err)
19
require.Equal(t, resultOptions.AllowList.Severities, severity.Severities{severity.High, severity.Critical})
20
require.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
require.Nil(t, err)
25
require.Equal(t, resultOptions2.AllowList.Severities, resultOptions.AllowList.Severities)
26
require.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
require.Equal(t, "value", testStruct.A)
73
require.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
require.Equal(t, "value", testStruct.A)
89
require.Equal(t, "2", testStruct.B)
90
require.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
require.Equal(t, "value", testStruct.A)
106
require.Equal(t, "", testStruct.B)
107
require.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
require.Equal(t, "testuser", test.A)
123
require.Equal(t, "testuser", test.B.B, test.B)
124
require.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
require.Equal(t, "value", testStruct.A)
142
require.Equal(t, "2", testStruct.Struct.B)
143
require.Equal(t, "true", testStruct.Struct.C)
144
}
145
146