Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/protocols/common/randomip/randomip_test.go
2072 views
1
package randomip
2
3
import (
4
"net"
5
"testing"
6
7
"github.com/stretchr/testify/require"
8
)
9
10
func TestGetRandomIp(t *testing.T) {
11
tests := []struct {
12
name string
13
cidr []string
14
errorMsg string
15
valid bool
16
}{
17
{
18
name: "Valid C class",
19
cidr: []string{"193.6.32.110/24"},
20
valid: true,
21
},
22
{
23
name: "Valid B class",
24
cidr: []string{"128.34.33.29/16"},
25
valid: true,
26
},
27
{
28
name: "Valid A class",
29
cidr: []string{"10.1.2.3/8"},
30
valid: true,
31
},
32
{
33
name: "Valid classless zero based network",
34
cidr: []string{"205.102.139.2/30"},
35
valid: true,
36
},
37
{
38
name: "Valid classless non-zero based network",
39
cidr: []string{"205.102.139.49/29"},
40
valid: true,
41
},
42
{
43
name: "Multiple CIDRs",
44
cidr: []string{"1.2.3.4/15", "230.149.150.22/28"},
45
valid: true,
46
},
47
{
48
name: "Negative CIDR length",
49
cidr: []string{"10.11.12.13/-1"},
50
valid: false,
51
errorMsg: "10.11.12.13/-1 is not a valid CIDR",
52
},
53
{
54
name: "Large CIDR length",
55
cidr: []string{"10.11.12.13/33"},
56
valid: false,
57
errorMsg: "10.11.12.13/33 is not a valid CIDR",
58
},
59
{
60
name: "No CIDR provided",
61
cidr: []string{},
62
valid: false,
63
errorMsg: "must specify at least one cidr",
64
},
65
{
66
name: "Valid but crazy",
67
cidr: []string{"0.0.0.0/0"},
68
valid: true,
69
},
70
{
71
name: "Valid but unlikely",
72
cidr: []string{"193.6.32.109/32"},
73
valid: true,
74
},
75
{
76
name: "Valid IPv6",
77
cidr: []string{"2607:fb91:1294:85fa:3cbf:491:cd46:2625/120"},
78
valid: true,
79
},
80
{
81
name: "Classless IPv4 starting with a non-zero base",
82
cidr: []string{"129.47.78.253/30"},
83
valid: true,
84
},
85
{
86
name: "IPv6 and IPv4",
87
cidr: []string{"2603:8080:4400:d070:913:dee4:6c0c:9ae8/96", "212.78.146.240/25"},
88
valid: true,
89
},
90
{
91
name: "Negative CIDR length IPv6",
92
cidr: []string{"2600:1700:27c:70:44eb:2d78:86b3:e905/-1"},
93
valid: false,
94
errorMsg: "2600:1700:27c:70:44eb:2d78:86b3:e905/-1 is not a valid CIDR",
95
},
96
{
97
name: "Large CIDR length IPv6",
98
cidr: []string{"2607:fb91:bd02:127c:d736:abcf:5c77:e7fd/129"},
99
valid: false,
100
errorMsg: "2607:fb91:bd02:127c:d736:abcf:5c77:e7fd/129 is not a valid CIDR",
101
},
102
{
103
name: "Valid but unlikely IPv6",
104
cidr: []string{"2607:fb91:bd02:127c:d736:abcf:5c77:e7fd/128"},
105
valid: true,
106
},
107
}
108
109
for _, test := range tests {
110
t.Run(test.name, func(t *testing.T) {
111
ip, err := GetRandomIPWithCidr(test.cidr...)
112
if test.valid {
113
require.NoError(t, err)
114
anyInRange := false
115
for _, cidr := range test.cidr {
116
_, network, _ := net.ParseCIDR(cidr)
117
anyInRange = anyInRange || network.Contains(ip)
118
}
119
require.Truef(t, anyInRange, "the IP address returned %v is not in range of the provided CIDRs", ip)
120
} else {
121
require.Error(t, err, test.errorMsg)
122
}
123
})
124
}
125
}
126
127