2020-10-06 21:02:21 +08:00
|
|
|
package shared
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/iwind/TeaGo/assert"
|
|
|
|
|
"testing"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestGeoConfig_Contains(t *testing.T) {
|
|
|
|
|
a := assert.NewAssertion(t)
|
|
|
|
|
|
|
|
|
|
{
|
2021-07-20 10:55:52 +08:00
|
|
|
r := NewIPRangeConfig()
|
|
|
|
|
r.Type = IPRangeTypeRange
|
|
|
|
|
r.IPFrom = "192.168.1.100"
|
|
|
|
|
r.IPTo = "192.168.1.110"
|
|
|
|
|
a.IsNil(r.Init())
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.101"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.110"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.1.111"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r := NewIPRangeConfig()
|
|
|
|
|
r.Type = IPRangeTypeCIDR
|
|
|
|
|
r.CIDR = "192.168.1.1/24"
|
|
|
|
|
a.IsNil(r.Init())
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r := NewIPRangeConfig()
|
|
|
|
|
r.Type = IPRangeTypeCIDR
|
|
|
|
|
r.CIDR = "192.168.1.1/16"
|
|
|
|
|
a.IsNil(r.Init())
|
|
|
|
|
a.IsTrue(r.Contains("192.168.2.100"))
|
2020-10-06 21:02:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2021-07-20 10:55:52 +08:00
|
|
|
r := NewIPRangeConfig()
|
|
|
|
|
r.Type = IPRangeTypeRange
|
|
|
|
|
r.IPFrom = "::1"
|
|
|
|
|
r.IPTo = "::1"
|
|
|
|
|
a.IsNil(r.Init())
|
|
|
|
|
a.IsTrue(r.Contains("::1"))
|
2020-10-06 21:02:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
2021-07-20 10:55:52 +08:00
|
|
|
r := NewIPRangeConfig()
|
|
|
|
|
r.Type = IPRangeTypeRange
|
|
|
|
|
r.IPFrom = "::1"
|
|
|
|
|
r.IPTo = "::100"
|
|
|
|
|
a.IsNil(r.Init())
|
|
|
|
|
a.IsTrue(r.Contains("::1"))
|
|
|
|
|
a.IsTrue(r.Contains("::99"))
|
|
|
|
|
a.IsFalse(r.Contains("::101"))
|
2020-10-06 21:02:21 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestParseIPRange(t *testing.T) {
|
|
|
|
|
a := assert.NewAssertion(t)
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
_, err := ParseIPRange("")
|
|
|
|
|
a.IsNotNil(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("192.168.1.100")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
a.IsTrue(r.IPFrom == r.IPTo)
|
|
|
|
|
a.IsTrue(r.IPFrom == "192.168.1.100")
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.1.99"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("192.168.1.100/24")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
a.IsTrue(r.CIDR == "192.168.1.100/24")
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.99"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("192.168.1.100, 192.168.1.200")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
a.IsTrue(r.IPFrom == "192.168.1.100")
|
|
|
|
|
a.IsTrue(r.IPTo == "192.168.1.200")
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.150"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("192.168.1.100-192.168.1.200")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
a.IsTrue(r.IPFrom == "192.168.1.100")
|
|
|
|
|
a.IsTrue(r.IPTo == "192.168.1.200")
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.150"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("all")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
a.IsTrue(r.Type == IPRangeTypeAll)
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.150"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("192.168.1.*")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
if r != nil {
|
|
|
|
|
a.IsTrue(r.Type == IPRangeTypeWildcard)
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsFalse(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
r, err := ParseIPRange("192.168.*.*")
|
|
|
|
|
a.IsNil(err)
|
|
|
|
|
if r != nil {
|
|
|
|
|
a.IsTrue(r.Type == IPRangeTypeWildcard)
|
|
|
|
|
a.IsTrue(r.Contains("192.168.1.100"))
|
|
|
|
|
a.IsTrue(r.Contains("192.168.2.100"))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BenchmarkIPRangeConfig_Contains(b *testing.B) {
|
|
|
|
|
r, err := ParseIPRange("192.168.1.*")
|
|
|
|
|
if err != nil {
|
|
|
|
|
b.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
|
|
|
_ = r.Contains("192.168.1.100")
|
|
|
|
|
}
|
|
|
|
|
}
|