apisix-go-plugin-runner
apisix-go-plugin-runner copied to clipboard
bug: limit-req plugin does not work
Issue description
"conf":[
{
"name":"limit-req",
"value":"{\"rate\":5,\"burst\":1}"
}
]
and add two requests
table.Entry("Test if limit-req plugin work.", tools.HttpTestCase{
Object: tools.GetA6Expect(),
Method: http.MethodGet,
Path: "/test/go/runner/limitreq",
ExpectStatus: http.StatusOK,
}),
table.Entry("Test if limit-req plugin work.", tools.HttpTestCase{
Object: tools.GetA6Expect(),
Method: http.MethodGet,
Path: "/test/go/runner/limitreq",
ExpectStatus: http.StatusOK,
}),
It does not work. Then I got:
Error:
expected status equal to:
"200 OK"
but got:
"503 Service Unavailable"
I tail the APISIX's log, find that "limit req rate exceeded".
And I try to solve this problem. I found that the code of limit-req
in /apisix-go-plugin-runner/cmd/go-runner/plugins
does not work.
Can someone help me?
Environment
- APISIX Go Plugin Runner's version: version latest-d3fe333-go1.18( result after run
APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock ./go-runner version
- APISIX version: run
docker-compose -f ci/docker-compose.yml up -d
- Go version: 1.18
- OS (cmd:
uname -a
): Darwin Johns-MacBook-Pro.local 21.4.0 Darwin Kernel Version 21.4.0: Mon Feb 21 20:35:58 PST 2022; root:xnu-8020.101.4~2/RELEASE_ARM64_T6000 arm64
Minimal test code / Steps to reproduce the issue
-
git clone [email protected]:Chever-John/apisix-go-plugin-runner.git
-
cd apisix-go-plugin-runner
-
make build
-
APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock APISIX_CONF_EXPIRE_TIME=3600 ./go-runner run &
-
docker-compose -f ci/docker-compose.yml up -d
-
go install github.com/onsi/ginkgo/[email protected]
-
cd /tests/e2e
- You can modify the conf
tests/e2e/plugins/plugins_limit_req_test.go
-
ginkgo -r
What's the actual result? (including assertion message & call stack if applicable)
I guess the file cmd/go-runner/plugins/limit_req.go
What's the expected result?
if conf is
"conf":[{"name":"limit-req","value":"{\"rate\":0,\"burst\":1}"}]
then
table.Entry("Test if limit-req plugin work.", tools.HttpTestCase{
Object: tools.GetA6Expect(),
Method: http.MethodGet,
Path: "/test/go/runner/limitreq",
ExpectStatus: http.StatusOK,
}),
table.Entry("Test if limit-req plugin work.", tools.HttpTestCase{
Object: tools.GetA6Expect(),
Method: http.MethodGet,
Path: "/test/go/runner/limitreq",
ExpectStatus: http.StatusServiceUnavailable,
}),
will work.