ip_pool_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package sessdata
  2. import (
  3. "fmt"
  4. "net"
  5. "os"
  6. "path"
  7. "testing"
  8. "time"
  9. "github.com/bjdgyc/anylink/base"
  10. "github.com/bjdgyc/anylink/dbdata"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func preData(tmpDir string) {
  14. base.Test()
  15. tmpDb := path.Join(tmpDir, "test.db")
  16. base.Cfg.DbType = "sqlite3"
  17. base.Cfg.DbSource = tmpDb
  18. base.Cfg.Ipv4CIDR = "192.168.3.0/24"
  19. base.Cfg.Ipv4Gateway = "192.168.3.1"
  20. base.Cfg.Ipv4Start = "192.168.3.100"
  21. base.Cfg.Ipv4End = "192.168.3.150"
  22. base.Cfg.MaxClient = 100
  23. base.Cfg.MaxUserClient = 3
  24. base.Cfg.IpLease = 5
  25. dbdata.Start()
  26. group := dbdata.Group{
  27. Name: "group1",
  28. Bandwidth: 1000,
  29. }
  30. _ = dbdata.Add(&group)
  31. initIpPool()
  32. }
  33. func cleardata(tmpDir string) {
  34. _ = dbdata.Stop()
  35. tmpDb := path.Join(tmpDir, "test.db")
  36. os.Remove(tmpDb)
  37. }
  38. func TestIpPool(t *testing.T) {
  39. assert := assert.New(t)
  40. tmp := t.TempDir()
  41. preData(tmp)
  42. defer cleardata(tmp)
  43. var ip net.IP
  44. for i := 100; i <= 150; i++ {
  45. _ = AcquireIp(getTestUser(i), getTestMacAddr(i), true)
  46. }
  47. // 回收
  48. ReleaseIp(net.IPv4(192, 168, 3, 140), getTestMacAddr(140))
  49. time.Sleep(time.Second * 6)
  50. // 从头循环获取可用ip
  51. user_new := getTestUser(210)
  52. mac_new := getTestMacAddr(210)
  53. ip = AcquireIp(user_new, mac_new, true)
  54. t.Log("mac_new", ip)
  55. assert.NotNil(ip)
  56. assert.True(net.IPv4(192, 168, 3, 140).Equal(ip))
  57. // 回收全部
  58. for i := 100; i <= 150; i++ {
  59. ReleaseIp(net.IPv4(192, 168, 3, byte(i)), getTestMacAddr(i))
  60. }
  61. }
  62. func getTestUser(i int) string {
  63. return fmt.Sprintf("user-%d", i)
  64. }
  65. func getTestMacAddr(i int) string {
  66. // 前缀mac
  67. macAddr := "02:00:00:00:00"
  68. return fmt.Sprintf("%s:%x", macAddr, i)
  69. }