mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-09-29 02:18:04 +03:00
Completes https://github.com/XTLS/Xray-core/pull/6807 and https://github.com/XTLS/Xray-core/pull/6810
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package masque
|
|
|
|
import (
|
|
"net/netip"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func allocateAll(p *addressPool) []netip.Addr {
|
|
var addrs []netip.Addr
|
|
for {
|
|
addr, ok := p.allocate()
|
|
if !ok {
|
|
return addrs
|
|
}
|
|
addrs = append(addrs, addr)
|
|
}
|
|
}
|
|
|
|
func TestAddressPool(t *testing.T) {
|
|
p, err := newAddressPool(netip.MustParsePrefix("10.0.0.1/29"))
|
|
require.NoError(t, err)
|
|
var want []netip.Addr
|
|
for _, s := range []string{"10.0.0.2", "10.0.0.3", "10.0.0.4", "10.0.0.5", "10.0.0.6"} {
|
|
want = append(want, netip.MustParseAddr(s))
|
|
}
|
|
require.Equal(t, want, allocateAll(p))
|
|
|
|
p.release(netip.MustParseAddr("10.0.0.4"))
|
|
addr, ok := p.allocate()
|
|
require.True(t, ok)
|
|
require.Equal(t, netip.MustParseAddr("10.0.0.4"), addr)
|
|
_, ok = p.allocate()
|
|
require.False(t, ok)
|
|
|
|
p, err = newAddressPool(netip.MustParsePrefix("fd00::1/126"))
|
|
require.NoError(t, err)
|
|
require.Equal(t, []netip.Addr{netip.MustParseAddr("fd00::2"), netip.MustParseAddr("fd00::3")}, allocateAll(p))
|
|
|
|
p, err = newAddressPool(netip.MustParsePrefix("10.0.0.2/30"))
|
|
require.NoError(t, err)
|
|
require.Equal(t, []netip.Addr{netip.MustParseAddr("10.0.0.1")}, allocateAll(p))
|
|
}
|
|
|
|
func TestAddressPoolRejects(t *testing.T) {
|
|
for _, s := range []string{
|
|
"10.0.0.0/24",
|
|
"10.0.0.255/24",
|
|
"10.0.0.1/31",
|
|
"10.0.0.1/32",
|
|
"fd00::1/127",
|
|
"fd00::1/128",
|
|
"::ffff:10.0.0.1/120",
|
|
} {
|
|
_, err := newAddressPool(netip.MustParsePrefix(s))
|
|
require.Error(t, err, s)
|
|
}
|
|
}
|