136 lines
4.0 KiB
Go
136 lines
4.0 KiB
Go
package core
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
|
)
|
|
|
|
func TestIPPattern_GobEncode(t *testing.T) {
|
|
pattern, err := ParseIPPattern("192.168.1.*")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
|
|
var buf bytes.Buffer
|
|
err = gob.NewEncoder(&buf).Encode(pattern)
|
|
assert.Nil(t, err)
|
|
|
|
newPattern := &IPPattern{}
|
|
err = gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(newPattern)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, newPattern)
|
|
|
|
assert.Equal(t, pattern.Pattern, newPattern.Pattern)
|
|
assert.Equal(t, pattern.regex.String(), newPattern.regex.String())
|
|
|
|
assert.True(t, newPattern.Match("192.168.1.1"))
|
|
assert.True(t, newPattern.Match("192.168.1.255"))
|
|
}
|
|
|
|
func TestParseIPPattern(t *testing.T) {
|
|
pattern, err := ParseIPPattern("")
|
|
assert.Nil(t, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPPattern("invalid")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPPattern("192.1:2:3.4")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPPattern("0:0:0:0:0:0:1.2.3.4") // not support IPv6 with embedded IPv4
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPPattern("192.168.1.*")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("192.168.1.1"))
|
|
assert.True(t, pattern.Match("192.168.1.255"))
|
|
assert.False(t, pattern.Match("192.168.2.1"))
|
|
|
|
pattern, err = ParseIPPattern("2001:db8::*")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("2001:db8::1"))
|
|
assert.True(t, pattern.Match("2001:db8::ffff"))
|
|
assert.False(t, pattern.Match("2001:db9::1"))
|
|
}
|
|
|
|
func TestParseIPv4Pattern(t *testing.T) {
|
|
pattern, err := ParseIPv4Pattern("192.168.1.1")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("192.168.1.1"))
|
|
assert.False(t, pattern.Match("192.168.1.2"))
|
|
|
|
pattern, err = ParseIPv4Pattern("192.168.*.1")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("192.168.1.1"))
|
|
assert.True(t, pattern.Match("192.168.255.1"))
|
|
assert.False(t, pattern.Match("192.168.1.2"))
|
|
|
|
pattern, err = ParseIPv4Pattern("*.*.*.*")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("0.0.0.0"))
|
|
assert.True(t, pattern.Match("255.255.255.255"))
|
|
|
|
pattern, err = ParseIPv4Pattern("256.256.256.256")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPv4Pattern("1.2.3")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPv4Pattern("1.2.3.4.5")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPv4Pattern("a.b.c.d")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
}
|
|
|
|
func TestParseIPv6Pattern(t *testing.T) {
|
|
pattern, err := ParseIPv6Pattern("2001:db8:85a3:8d3:1319:8a2e:370:7348")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("2001:db8:85a3:8d3:1319:8a2e:370:7348"))
|
|
assert.False(t, pattern.Match("2001:db8:85a3:8d3:1319:8a2e:370:7349"))
|
|
|
|
pattern, err = ParseIPv6Pattern("2001:db8::*")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("2001:db8::0"))
|
|
assert.True(t, pattern.Match("2001:db8::ffff"))
|
|
assert.False(t, pattern.Match("2001:db9::0"))
|
|
|
|
pattern, err = ParseIPv6Pattern("::*")
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, pattern)
|
|
assert.True(t, pattern.Match("::1"))
|
|
assert.True(t, pattern.Match("::2"))
|
|
assert.False(t, pattern.Match(":1:1"))
|
|
|
|
pattern, err = ParseIPv6Pattern("2001:db8:85a3:8d3:1319:8a2e:370:7348:extra")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPv6Pattern("g001:db8:85a3:8d3")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
|
|
pattern, err = ParseIPv6Pattern("2001:db8:")
|
|
assert.Equal(t, errs.ErrInvalidIpAddressPattern, err)
|
|
assert.Nil(t, pattern)
|
|
}
|