From b81bc5c28327f8b61b5ccef8e60403a0017117f1 Mon Sep 17 00:00:00 2001
From: bjdgyc <bjdgyc@163.com>
Date: Tue, 25 Apr 2023 21:48:54 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtest=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 server/sessdata/ip_pool.go      |  2 +-
 server/sessdata/ip_pool_test.go | 31 ++++++++++++++-----------------
 server/sessdata/session.go      |  1 +
 server/sessdata/session_test.go |  5 +++++
 4 files changed, 21 insertions(+), 18 deletions(-)

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)