Mercurial
comparison third_party/wrk/src/wrk.lua @ 178:94705b5986b3
[ThirdParty] Added WRK and luajit for load testing.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Thu, 22 Jan 2026 20:10:30 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 177:24fe8ff94056 | 178:94705b5986b3 |
|---|---|
| 1 local wrk = { | |
| 2 scheme = "http", | |
| 3 host = "localhost", | |
| 4 port = nil, | |
| 5 method = "GET", | |
| 6 path = "/", | |
| 7 headers = {}, | |
| 8 body = nil, | |
| 9 thread = nil, | |
| 10 } | |
| 11 | |
| 12 function wrk.resolve(host, service) | |
| 13 local addrs = wrk.lookup(host, service) | |
| 14 for i = #addrs, 1, -1 do | |
| 15 if not wrk.connect(addrs[i]) then | |
| 16 table.remove(addrs, i) | |
| 17 end | |
| 18 end | |
| 19 wrk.addrs = addrs | |
| 20 end | |
| 21 | |
| 22 function wrk.setup(thread) | |
| 23 thread.addr = wrk.addrs[1] | |
| 24 if type(setup) == "function" then | |
| 25 setup(thread) | |
| 26 end | |
| 27 end | |
| 28 | |
| 29 function wrk.init(args) | |
| 30 if not wrk.headers["Host"] then | |
| 31 local host = wrk.host | |
| 32 local port = wrk.port | |
| 33 | |
| 34 host = host:find(":") and ("[" .. host .. "]") or host | |
| 35 host = port and (host .. ":" .. port) or host | |
| 36 | |
| 37 wrk.headers["Host"] = host | |
| 38 end | |
| 39 | |
| 40 if type(init) == "function" then | |
| 41 init(args) | |
| 42 end | |
| 43 | |
| 44 local req = wrk.format() | |
| 45 wrk.request = function() | |
| 46 return req | |
| 47 end | |
| 48 end | |
| 49 | |
| 50 function wrk.format(method, path, headers, body) | |
| 51 local method = method or wrk.method | |
| 52 local path = path or wrk.path | |
| 53 local headers = headers or wrk.headers | |
| 54 local body = body or wrk.body | |
| 55 local s = {} | |
| 56 | |
| 57 if not headers["Host"] then | |
| 58 headers["Host"] = wrk.headers["Host"] | |
| 59 end | |
| 60 | |
| 61 headers["Content-Length"] = body and string.len(body) | |
| 62 | |
| 63 s[1] = string.format("%s %s HTTP/1.1", method, path) | |
| 64 for name, value in pairs(headers) do | |
| 65 s[#s+1] = string.format("%s: %s", name, value) | |
| 66 end | |
| 67 | |
| 68 s[#s+1] = "" | |
| 69 s[#s+1] = body or "" | |
| 70 | |
| 71 return table.concat(s, "\r\n") | |
| 72 end | |
| 73 | |
| 74 return wrk |