mirror of
https://github.com/lxc/incus.git
synced 2026-02-05 09:46:19 +01:00
internal/iprange: add tests for the iprange.Range struct
Adds tests for the ContainsIp and String methods on the iprange.Range struct type. Signed-off-by: karo <karolin.kostial@gmail.com>
This commit is contained in:
136
internal/iprange/range_test.go
Normal file
136
internal/iprange/range_test.go
Normal file
@@ -0,0 +1,136 @@
|
||||
package iprange_test
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"github.com/lxc/incus/v6/internal/iprange"
|
||||
)
|
||||
|
||||
// parseRange is a custom parse function to not depend on other packages.
|
||||
func parseRange(rangeString string) iprange.Range {
|
||||
ips := strings.Split(rangeString, "-")
|
||||
|
||||
start := net.ParseIP(ips[0])
|
||||
|
||||
var end net.IP
|
||||
if len(ips) == 2 {
|
||||
end = net.ParseIP(ips[1])
|
||||
}
|
||||
|
||||
return iprange.Range{
|
||||
Start: start,
|
||||
End: end,
|
||||
}
|
||||
}
|
||||
|
||||
func TestRange_ContainsIP(t *testing.T) {
|
||||
type containsIPTest struct {
|
||||
name string
|
||||
rangeString string // a string of format <ip>-<ip> optionally just an <ip>
|
||||
testIP string
|
||||
expected bool
|
||||
}
|
||||
|
||||
tests := []containsIPTest{
|
||||
{
|
||||
name: "ip below range",
|
||||
rangeString: "10.10.0.0-10.16.0.0",
|
||||
testIP: "10.0.0.1",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "ip is lower bound",
|
||||
rangeString: "10.10.0.0-10.16.0.0",
|
||||
testIP: "10.10.0.0",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "ip in range",
|
||||
rangeString: "10.10.0.0-10.16.0.0",
|
||||
testIP: "10.12.59.1",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "ip is upper bound",
|
||||
rangeString: "10.10.0.0-10.16.0.0",
|
||||
testIP: "10.16.0.0",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "ip above range",
|
||||
rangeString: "10.10.0.0-10.16.0.0",
|
||||
testIP: "10.23.59.1",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "range has no end and ip is below range",
|
||||
rangeString: "10.10.0.1",
|
||||
testIP: "10.2.59.1",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "range has no end and ip is in range",
|
||||
rangeString: "10.10.0.1",
|
||||
testIP: "10.10.0.1",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "range has no end and ip is above range",
|
||||
rangeString: "10.10.0.1",
|
||||
testIP: "10.23.59.1",
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
// arrange
|
||||
r := parseRange(test.rangeString)
|
||||
testIP := net.ParseIP(test.testIP)
|
||||
|
||||
// act
|
||||
isContained := r.ContainsIP(testIP)
|
||||
|
||||
// assert
|
||||
assert.Equal(t, test.expected, isContained)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRange_String(t *testing.T) {
|
||||
type stringTest struct {
|
||||
name string
|
||||
rangeString string // a string of format <ip>-<ip> optionally just an <ip>
|
||||
expected string
|
||||
}
|
||||
|
||||
tests := []stringTest{
|
||||
{
|
||||
name: "start and end",
|
||||
rangeString: "10.10.0.0-10.16.0.5",
|
||||
expected: "10.10.0.0-10.16.0.5",
|
||||
},
|
||||
{
|
||||
name: "start only",
|
||||
rangeString: "10.10.0.0",
|
||||
expected: "10.10.0.0",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
// arrange
|
||||
r := parseRange(test.rangeString)
|
||||
|
||||
// act
|
||||
s := r.String()
|
||||
|
||||
// assert
|
||||
assert.Equal(t, test.expected, s)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user