diff --git a/app/router/lua.go b/app/router/lua.go index 6cf55d5f1..75da27ccc 100644 --- a/app/router/lua.go +++ b/app/router/lua.go @@ -30,9 +30,9 @@ func (r *Router) RegisterLua(L *lua.LState) { module.RawSetString("LocalOS", lua.LString(runtime.GOOS)) module.RawSetString("PickOutbound", L.NewFunction(func(L *lua.LState) int { - tag, ok := L.Get(2).(lua.LString) + tag, ok := L.Get(1).(lua.LString) if !ok { - L.ArgError(2, "balancer tag must be a string") + L.ArgError(1, "balancer tag must be a string") return 0 } balancer, found := (*r.balancers.Load())[string(tag)] diff --git a/app/router/script_test.go b/app/router/script_test.go index 7daeb868a..75f52db75 100644 --- a/app/router/script_test.go +++ b/app/router/script_test.go @@ -101,7 +101,7 @@ func TestRouterScriptRouting(t *testing.T) { {name: "route", body: `return "lua-out", "lua-rule"`, wantTag: "lua-out", wantRule: "lua-rule", wantCalls: "2"}, {name: "no match", body: `return nil`, wantErr: common.ErrNoClue, wantCalls: "2"}, {name: "empty tag", body: `return ""`, wantErr: common.ErrNoClue, wantCalls: "2"}, - {name: "balancer error", body: `local tag, err = router:PickOutbound("missing"); return tag, nil, err`, wantMessage: "not found", wantCalls: "2"}, + {name: "balancer error", body: `local tag, err = router.PickOutbound("missing"); return tag, nil, err`, wantMessage: "not found", wantCalls: "2"}, {name: "string error", body: `return nil, nil, "blocked"`, wantMessage: "blocked", wantCalls: "2"}, {name: "invalid tag", body: `return false`, wantMessage: "outboundTag", wantCalls: "2"}, {name: "invalid rule", body: `return "lua-out", false`, wantMessage: "ruleTag", wantCalls: "2"}, @@ -202,7 +202,7 @@ func TestRouterScriptBalancerReload(t *testing.T) { r := startLuaRouter(t, ` local router = require("xray.router") function HandleRoute() - local tag, err = router:PickOutbound("balance") + local tag, err = router.PickOutbound("balance") return tag, "balanced", err end`, nil, config("old")) pick := func(want string) { @@ -236,7 +236,7 @@ func TestRouterScriptConcurrentBalancerReload(t *testing.T) { r := startLuaRouter(t, ` local router = require("xray.router") function HandleRoute() - local tag, err = router:PickOutbound("balance") + local tag, err = router.PickOutbound("balance") return tag, nil, err end`, nil, config("a"))