This patch makes `set_var()` and `unset_var()` return a boolean indicating success. --- reg-tests/lua/set_var.lua | 12 ++++++++++++ reg-tests/lua/set_var.vtc | 29 +++++++++++++++++++++++++++++ src/hlua.c | 24 ++++++++++++------------ 3 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 reg-tests/lua/set_var.lua create mode 100644 reg-tests/lua/set_var.vtc
diff --git a/reg-tests/lua/set_var.lua b/reg-tests/lua/set_var.lua new file mode 100644 index 000000000..78d1fd495 --- /dev/null +++ b/reg-tests/lua/set_var.lua @@ -0,0 +1,12 @@ +core.register_service("set_var", "http", function(applet) + local var_name = applet.headers["var"][0] + local result = applet:set_var(var_name, "value") + if result then + applet:set_status(202) + else + applet:set_status(400) + end + applet:add_header("echo", applet:get_var(var_name) or "(nil)") + applet:start_response() + applet:send("") +end) diff --git a/reg-tests/lua/set_var.vtc b/reg-tests/lua/set_var.vtc new file mode 100644 index 000000000..2f1ba4ee9 --- /dev/null +++ b/reg-tests/lua/set_var.vtc @@ -0,0 +1,29 @@ +varnishtest "Lua: set_var" +#REQUIRE_OPTIONS=LUA + +feature ignore_unknown_macro + +haproxy h1 -conf { + global + lua-load ${testdir}/set_var.lua + + frontend fe1 + mode http + ${no-htx} option http-use-htx + bind "fd@${fe1}" + + http-request use-service lua.set_var +} -start + +client c0 -connect ${h1_fe1_sock} { + txreq -url "/" \ + -hdr "Var: txn.foo" + rxresp + expect resp.status == 202 + expect resp.http.echo == "value" + txreq -url "/" \ + -hdr "Var: invalid.var" + rxresp + expect resp.status == 400 + expect resp.http.echo == "(nil)" +} -run diff --git a/src/hlua.c b/src/hlua.c index b5bf64632..0ce57c7ed 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -3489,8 +3489,8 @@ __LJMP static int hlua_applet_tcp_set_var(lua_State *L) /* Store the sample in a variable. */ smp_set_owner(&smp, s->be, s->sess, s, 0); - vars_set_by_name(name, len, &smp); - return 0; + lua_pushboolean(L, vars_set_by_name(name, len, &smp) != 0); + return 1; } __LJMP static int hlua_applet_tcp_unset_var(lua_State *L) @@ -3512,8 +3512,8 @@ __LJMP static int hlua_applet_tcp_unset_var(lua_State *L) /* Unset the variable. */ smp_set_owner(&smp, s->be, s->sess, s, 0); - vars_unset_by_name_ifexist(name, len, &smp); - return 0; + lua_pushboolean(L, vars_unset_by_name_ifexist(name, len, &smp) != 0); + return 1; } __LJMP static int hlua_applet_tcp_get_var(lua_State *L) @@ -3967,8 +3967,8 @@ __LJMP static int hlua_applet_http_set_var(lua_State *L) /* Store the sample in a variable. */ smp_set_owner(&smp, s->be, s->sess, s, 0); - vars_set_by_name(name, len, &smp); - return 0; + lua_pushboolean(L, vars_set_by_name(name, len, &smp) != 0); + return 1; } __LJMP static int hlua_applet_http_unset_var(lua_State *L) @@ -3990,8 +3990,8 @@ __LJMP static int hlua_applet_http_unset_var(lua_State *L) /* Unset the variable. */ smp_set_owner(&smp, s->be, s->sess, s, 0); - vars_unset_by_name_ifexist(name, len, &smp); - return 0; + lua_pushboolean(L, vars_unset_by_name_ifexist(name, len, &smp) != 0); + return 1; } __LJMP static int hlua_applet_http_get_var(lua_State *L) @@ -5053,8 +5053,8 @@ __LJMP static int hlua_set_var(lua_State *L) /* Store the sample in a variable. */ smp_set_owner(&smp, htxn->p, htxn->s->sess, htxn->s, htxn->dir & SMP_OPT_DIR); - vars_set_by_name(name, len, &smp); - return 0; + lua_pushboolean(L, vars_set_by_name(name, len, &smp) != 0); + return 1; } __LJMP static int hlua_unset_var(lua_State *L) @@ -5074,8 +5074,8 @@ __LJMP static int hlua_unset_var(lua_State *L) /* Unset the variable. */ smp_set_owner(&smp, htxn->p, htxn->s->sess, htxn->s, htxn->dir & SMP_OPT_DIR); - vars_unset_by_name_ifexist(name, len, &smp); - return 0; + lua_pushboolean(L, vars_unset_by_name_ifexist(name, len, &smp) != 0); + return 1; } __LJMP static int hlua_get_var(lua_State *L) -- 2.26.2