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