| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package sessdata
- import (
- "fmt"
- "net"
- "os"
- "path"
- "testing"
- "time"
- "github.com/bjdgyc/anylink/base"
- "github.com/bjdgyc/anylink/dbdata"
- "github.com/stretchr/testify/assert"
- )
- func preData(tmpDir string) {
- base.Test()
- tmpDb := path.Join(tmpDir, "test.db")
- base.Cfg.DbType = "sqlite3"
- base.Cfg.DbSource = tmpDb
- base.Cfg.Ipv4CIDR = "192.168.3.0/24"
- base.Cfg.Ipv4Gateway = "192.168.3.1"
- base.Cfg.Ipv4Start = "192.168.3.100"
- base.Cfg.Ipv4End = "192.168.3.150"
- base.Cfg.MaxClient = 100
- base.Cfg.MaxUserClient = 3
- base.Cfg.IpLease = 5
- dbdata.Start()
- group := dbdata.Group{
- Name: "group1",
- Bandwidth: 1000,
- }
- _ = dbdata.Add(&group)
- initIpPool()
- }
- func cleardata(tmpDir string) {
- _ = dbdata.Stop()
- tmpDb := path.Join(tmpDir, "test.db")
- os.Remove(tmpDb)
- }
- func TestIpPool(t *testing.T) {
- assert := assert.New(t)
- tmp := t.TempDir()
- preData(tmp)
- defer cleardata(tmp)
- var ip net.IP
- for i := 100; i <= 150; i++ {
- _ = AcquireIp(getTestUser(i), getTestMacAddr(i), true)
- }
- // 回收
- ReleaseIp(net.IPv4(192, 168, 3, 140), getTestMacAddr(140))
- time.Sleep(time.Second * 6)
- // 从头循环获取可用ip
- user_new := getTestUser(210)
- mac_new := getTestMacAddr(210)
- ip = AcquireIp(user_new, mac_new, true)
- t.Log("mac_new", ip)
- assert.NotNil(ip)
- assert.True(net.IPv4(192, 168, 3, 140).Equal(ip))
- // 回收全部
- for i := 100; i <= 150; i++ {
- ReleaseIp(net.IPv4(192, 168, 3, byte(i)), getTestMacAddr(i))
- }
- }
- func getTestUser(i int) string {
- return fmt.Sprintf("user-%d", i)
- }
- func getTestMacAddr(i int) string {
- // 前缀mac
- macAddr := "02:00:00:00:00"
- return fmt.Sprintf("%s:%x", macAddr, i)
- }
|