diff --git a/server/sessdata/ip_pool.go b/server/sessdata/ip_pool.go index 63140dd..41dc773 100644 --- a/server/sessdata/ip_pool.go +++ b/server/sessdata/ip_pool.go @@ -199,7 +199,7 @@ func loopIp(username, macAddr string, uniqueMac bool) net.IP { return ip } - base.Warn("no ip available, please see ip_map table row") + base.Warn("no ip available, please see ip_map table row", username, macAddr) return nil } diff --git a/server/sessdata/ip_pool_test.go b/server/sessdata/ip_pool_test.go index 8ead93d..d103112 100644 --- a/server/sessdata/ip_pool_test.go +++ b/server/sessdata/ip_pool_test.go @@ -20,11 +20,11 @@ func preData(tmpDir string) { 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.2" - base.Cfg.Ipv4End = "192.168.3.199" + 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 = 10 + base.Cfg.IpLease = 5 dbdata.Start() group := dbdata.Group{ @@ -49,29 +49,26 @@ func TestIpPool(t *testing.T) { var ip net.IP - for i := 2; i <= 100; i++ { + for i := 100; i <= 150; i++ { _ = AcquireIp(getTestUser(i), getTestMacAddr(i), true) } - ip = AcquireIp(getTestUser(101), getTestMacAddr(101), true) - assert.True(net.IPv4(192, 168, 3, 101).Equal(ip)) - for i := 102; i <= 199; i++ { - ip = AcquireIp(getTestUser(i), getTestMacAddr(i), true) - } - assert.True(net.IPv4(192, 168, 3, 199).Equal(ip)) - ip = AcquireIp(getTestUser(200), getTestMacAddr(200), true) - assert.Nil(ip) - - // 回收188 - ReleaseIp(net.IPv4(192, 168, 3, 188), getTestMacAddr(188)) - time.Sleep(time.Second * 15) + // 回收 + 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.True(net.IPv4(192, 168, 3, 188).Equal(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 { diff --git a/server/sessdata/session.go b/server/sessdata/session.go index cedeca5..fc38928 100644 --- a/server/sessdata/session.go +++ b/server/sessdata/session.go @@ -190,6 +190,7 @@ func (s *Session) NewConn() *ConnSession { limit := LimitClient(username, false) if !limit { + base.Warn("limit is full", username) return nil } ip := AcquireIp(username, macAddr, uniqueMac) diff --git a/server/sessdata/session_test.go b/server/sessdata/session_test.go index 6c60ccc..6719f61 100644 --- a/server/sessdata/session_test.go +++ b/server/sessdata/session_test.go @@ -3,6 +3,7 @@ package sessdata import ( "fmt" "testing" + "time" "github.com/bjdgyc/anylink/base" "github.com/stretchr/testify/assert" @@ -24,11 +25,15 @@ func TestConnSession(t *testing.T) { preData(tmp) defer cleardata(tmp) + time.Sleep(time.Second * 10) + sess := NewSession("") + sess.Username = "user-test" sess.Group = "group1" sess.MacAddr = "00:15:5d:50:14:43" cSess := sess.NewConn() + base.Info("cSess", cSess) err := cSess.RateLimit(100, true) ast.Nil(err)