From 039cc083ffe3860033c7d6bbf79504b48f81cd84 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Fri, 24 Sep 2021 19:02:50 +0200 Subject: [PATCH] REGTESTS: lua: test the httpclient:get() feature This reg-test is heavily inspired by the lua_socket.vtc one. It replaces the HTTP/1.1 request made manually with a socket object with an httpclient object. --- reg-tests/lua/lua_httpclient.lua | 29 +++++++++++++++++++++++++++ reg-tests/lua/lua_httpclient.vtc | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 reg-tests/lua/lua_httpclient.lua create mode 100644 reg-tests/lua/lua_httpclient.vtc diff --git a/reg-tests/lua/lua_httpclient.lua b/reg-tests/lua/lua_httpclient.lua new file mode 100644 index 0000000000..390ba4151f --- /dev/null +++ b/reg-tests/lua/lua_httpclient.lua @@ -0,0 +1,29 @@ + +local vtc_port = 0 + +core.register_service("fakeserv", "http", function(applet) + vtc_port = applet.headers["vtcport"][0] + core.Info("APPLET START") + local response = "OK" + applet:add_header("Server", "haproxy/webstats") + applet:add_header("Content-Length", string.len(response)) + applet:add_header("Content-Type", "text/html") + applet:start_response() + applet:send(response) + core.Info("APPLET DONE") +end) + +local function cron() + -- wait for until the correct port is set through the c0 request.. + while vtc_port == 0 do + core.msleep(1) + end + core.Debug('CRON port:' .. vtc_port) + + local httpclient = core.httpclient() + local response = httpclient:get("http://127.0.0.1:" .. vtc_port) + + core.Info("Received: " .. response.body) +end + +core.register_task(cron) diff --git a/reg-tests/lua/lua_httpclient.vtc b/reg-tests/lua/lua_httpclient.vtc new file mode 100644 index 0000000000..6d68ffbe2e --- /dev/null +++ b/reg-tests/lua/lua_httpclient.vtc @@ -0,0 +1,34 @@ +varnishtest "Lua: check httpclient functionality from a lua-task" +feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev7)'" +feature ignore_unknown_macro + +#REQUIRE_OPTIONS=LUA + +server s1 { + rxreq + txresp -bodylen 20 +} -start + +haproxy h1 -conf { + global + lua-load ${testdir}/lua_httpclient.lua + + frontend fe1 + mode http + bind "fd@${fe1}" + default_backend b1 + + backend b1 + mode http + http-request use-service lua.fakeserv + +} -start + +client c0 -connect ${h1_fe1_sock} { + txreq -url "/" -hdr "vtcport: ${s1_port}" + rxresp + expect resp.status == 200 +} -run + + +server s1 -wait