mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-28 07:36:38 +08:00
fix: preserve active per-IP traffic limiters (#545)
This commit is contained in:
@@ -659,9 +659,21 @@ func (h *Handler) sendDeleteOrphanedForwardService(nodeID int64, serviceName str
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *Handler) speedLimiterExists(name string) bool {
|
func (h *Handler) speedLimiterExists(name string) bool {
|
||||||
|
name = strings.TrimSpace(name)
|
||||||
if name == "" {
|
if name == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const forwardRulePrefix = "rule_traffic_limit_"
|
||||||
|
if strings.HasPrefix(name, forwardRulePrefix) {
|
||||||
|
forwardID, err := strconv.ParseInt(strings.TrimPrefix(name, forwardRulePrefix), 10, 64)
|
||||||
|
if err != nil || forwardID <= 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
forward, err := h.getForwardRecord(forwardID)
|
||||||
|
return err == nil && forward != nil && forward.IPSpeedID.Valid && forward.IPSpeedID.Int64 > 0
|
||||||
|
}
|
||||||
|
|
||||||
id, err := strconv.ParseInt(name, 10, 64)
|
id, err := strconv.ParseInt(name, 10, 64)
|
||||||
if err != nil || id <= 0 {
|
if err != nil || id <= 0 {
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"go-backend/internal/store/repo"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSpeedLimiterExistsPreservesForwardRuleLimiter(t *testing.T) {
|
||||||
|
r, err := repo.Open(filepath.Join(t.TempDir(), "panel.db"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("open repo: %v", err)
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
if err := r.DB().Exec(`
|
||||||
|
INSERT INTO forward(id, user_id, user_name, name, tunnel_id, remote_addr, strategy, in_flow, out_flow, created_time, updated_time, status, inx, ip_speed_id)
|
||||||
|
VALUES(8, 1, 'user', 'forward', 1, '127.0.0.1:80', 'fifo', 0, 0, 1, 1, 1, 0, 3),
|
||||||
|
(9, 1, 'user', 'forward-without-ip-limit', 1, '127.0.0.1:81', 'fifo', 0, 0, 1, 1, 1, 0, NULL)
|
||||||
|
`).Error; err != nil {
|
||||||
|
t.Fatalf("insert forward: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
h := &Handler{repo: r}
|
||||||
|
if !h.speedLimiterExists("rule_traffic_limit_8") {
|
||||||
|
t.Fatal("expected runtime limiter for existing forward to be preserved")
|
||||||
|
}
|
||||||
|
if h.speedLimiterExists("rule_traffic_limit_9") {
|
||||||
|
t.Fatal("expected runtime limiter for forward without per-IP speed limit to be treated as orphaned")
|
||||||
|
}
|
||||||
|
if h.speedLimiterExists("rule_traffic_limit_10") {
|
||||||
|
t.Fatal("expected runtime limiter for missing forward to be treated as orphaned")
|
||||||
|
}
|
||||||
|
if h.speedLimiterExists("rule_traffic_limit_invalid") {
|
||||||
|
t.Fatal("expected malformed runtime limiter name to be treated as orphaned")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user