Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/operators/common/dsl/dsl_test.go
2070 views
1
package dsl
2
3
import (
4
"fmt"
5
"testing"
6
7
"github.com/Knetic/govaluate"
8
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/dns/dnsclientpool"
9
"github.com/projectdiscovery/nuclei/v3/pkg/types"
10
"github.com/stretchr/testify/require"
11
)
12
13
func TestDslExpressions(t *testing.T) {
14
// Use Google DNS for more reliable testing
15
googleDNS := []string{"8.8.8.8:53", "8.8.4.4:53"}
16
17
dslExpressions := map[string]interface{}{
18
`resolve("scanme.sh")`: "128.199.158.128",
19
`resolve("scanme.sh","a")`: "128.199.158.128",
20
`resolve("scanme.sh","6")`: "2400:6180:0:d0::91:1001",
21
`resolve("scanme.sh","aaaa")`: "2400:6180:0:d0::91:1001",
22
`resolve("scanme.sh","soa")`: "ns69.domaincontrol.com",
23
}
24
25
testDslExpressionScenariosWithDNS(t, dslExpressions, googleDNS)
26
}
27
28
func evaluateExpression(t *testing.T, dslExpression string) interface{} {
29
compiledExpression, err := govaluate.NewEvaluableExpressionWithFunctions(dslExpression, HelperFunctions)
30
require.NoError(t, err, "Error while compiling the %q expression", dslExpression)
31
32
actualResult, err := compiledExpression.Evaluate(make(map[string]interface{}))
33
require.NoError(t, err, "Error while evaluating the compiled %q expression", dslExpression)
34
35
for _, negativeTestWord := range []string{"panic", "invalid", "error"} {
36
require.NotContains(t, fmt.Sprintf("%v", actualResult), negativeTestWord)
37
}
38
39
return actualResult
40
}
41
42
func testDslExpressionScenariosWithDNS(t *testing.T, dslExpressions map[string]interface{}, resolvers []string) {
43
// Initialize DNS client pool with custom resolvers for testing
44
err := dnsclientpool.Init(&types.Options{
45
InternalResolversList: resolvers,
46
})
47
require.NoError(t, err, "Failed to initialize DNS client pool with custom resolvers")
48
49
for dslExpression, expectedResult := range dslExpressions {
50
t.Run(dslExpression, func(t *testing.T) {
51
actualResult := evaluateExpression(t, dslExpression)
52
53
if expectedResult != nil {
54
require.Equal(t, expectedResult, actualResult)
55
}
56
57
fmt.Printf("%s: \t %v\n", dslExpression, actualResult)
58
})
59
}
60
}
61
62