apisix-go-plugin-runner icon indicating copy to clipboard operation
apisix-go-plugin-runner copied to clipboard

bug: limit-req plugin does not work

Open Chever-John opened this issue 2 years ago • 0 comments

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

  1. git clone [email protected]:Chever-John/apisix-go-plugin-runner.git
  2. cd apisix-go-plugin-runner
  3. make build
  4. APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock APISIX_CONF_EXPIRE_TIME=3600 ./go-runner run &
  5. docker-compose -f ci/docker-compose.yml up -d
  6. go install github.com/onsi/ginkgo/[email protected]
  7. cd /tests/e2e
  8. You can modify the conf tests/e2e/plugins/plugins_limit_req_test.go
  9. 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.

Chever-John avatar Mar 29 '22 14:03 Chever-John