@@ -324,3 +324,27 @@ func TestProxySetTenantsRebind(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestPersistGeoSkipsDeletedProxy 锁定探测落库防线:代理已删时零命中放弃,
|
||||
// 不得经 Save 回退 Create 复活已删代理。
|
||||
func TestPersistGeoSkipsDeletedProxy(t *testing.T) {
|
||||
svc, db := newProxyEnv(t)
|
||||
ctx := context.Background()
|
||||
row := model.Proxy{Name: "p", Type: "socks5", Host: "h", Port: 1080}
|
||||
if err := db.Create(&row).Error; err != nil {
|
||||
t.Fatalf("seed proxy: %v", err)
|
||||
}
|
||||
svc.persistGeo(ctx, row.ID, geoResult{Country: "DE", City: "FRA"})
|
||||
var fresh model.Proxy
|
||||
if err := db.First(&fresh, row.ID).Error; err != nil || fresh.Country != "DE" || fresh.GeoAt == nil {
|
||||
t.Fatalf("正常落库 = %+v, %v", fresh, err)
|
||||
}
|
||||
if err := db.Delete(&model.Proxy{}, row.ID).Error; err != nil {
|
||||
t.Fatalf("delete proxy: %v", err)
|
||||
}
|
||||
svc.persistGeo(ctx, row.ID, geoResult{Country: "US"})
|
||||
var n int64
|
||||
if err := db.Model(&model.Proxy{}).Count(&n).Error; err != nil || n != 0 {
|
||||
t.Fatalf("已删代理被复活: count=%d (%v), want 0", n, err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user