apache / apisix-go-plugin-runner

Go Plugin Runner for APISIX
https://apisix.apache.org/
Apache License 2.0
173 stars 68 forks source link

bug: limit-req plugin does not work #76

Open Chever-John opened 2 years ago

Chever-John commented 2 years ago

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

Minimal test code / Steps to reproduce the issue

  1. git clone git@github.com: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/ginkgo@v1.16.5
  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.