Skip to content

Commit ed93682

Browse files
committed
chore: using time/rate instead of custom limiter
1 parent 846ee17 commit ed93682

File tree

9 files changed

+30
-206
lines changed

9 files changed

+30
-206
lines changed

cmd/run.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"errors"
2222
"fmt"
23+
"golang.org/x/time/rate"
2324
"io"
2425
"net/http"
2526
"os"
@@ -32,7 +33,6 @@ import (
3233
"github.com/linuxsuren/api-testing/pkg/util/home"
3334

3435
"github.com/linuxsuren/api-testing/pkg/apispec"
35-
"github.com/linuxsuren/api-testing/pkg/limit"
3636
"github.com/linuxsuren/api-testing/pkg/logging"
3737
"github.com/linuxsuren/api-testing/pkg/runner"
3838
"github.com/linuxsuren/api-testing/pkg/runner/monitor"
@@ -55,8 +55,8 @@ type runOption struct {
5555
thread int64
5656
context context.Context
5757
qps int32
58-
burst int32
59-
limiter limit.RateLimiter
58+
burst int
59+
limiter *rate.Limiter
6060
startTime time.Time
6161
reporter runner.TestReporter
6262
reportFile string
@@ -137,7 +137,7 @@ func (o *runOption) addFlags(flags *pflag.FlagSet) {
137137
flags.StringVarP(&o.swaggerURL, "swagger-url", "", "", "The URL of swagger")
138138
flags.Int64VarP(&o.thread, "thread", "", 1, "Threads of the execution")
139139
flags.Int32VarP(&o.qps, "qps", "", 5, "QPS")
140-
flags.Int32VarP(&o.burst, "burst", "", 5, "burst")
140+
flags.IntVarP(&o.burst, "burst", "", 5, "burst")
141141
flags.StringVarP(&o.monitorDocker, "monitor-docker", "", "", "The docker container name to monitor")
142142
}
143143

@@ -256,10 +256,9 @@ func (o *runOption) startMonitor() (err error) {
256256

257257
func (o *runOption) runE(cmd *cobra.Command, args []string) (err error) {
258258
o.startTime = time.Now()
259-
o.limiter = limit.NewDefaultRateLimiter(o.qps, o.burst)
259+
o.limiter = rate.NewLimiter(rate.Limit(o.qps), o.burst)
260260
defer func() {
261261
cmd.Printf("Consumed: %s\n", time.Since(o.startTime).String())
262-
o.limiter.Stop()
263262
}()
264263

265264
if err = o.loader.Put(o.pattern); err != nil {
@@ -400,7 +399,7 @@ func (o *runOption) runSuite(loader testing.Loader, dataContext map[string]inter
400399
case <-stopSingal:
401400
return
402401
default:
403-
o.limiter.Accept()
402+
o.limiter.Allow()
404403

405404
ctxWithTimeout, cancel := context.WithTimeout(ctx, o.requestTimeout)
406405
defer cancel() // Ensure context is always cancelled when leaving this scope

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ require (
4848
github.com/gorilla/websocket v1.5.3
4949
github.com/linuxsuren/http-downloader v0.0.99
5050
golang.org/x/mod v0.28.0
51+
golang.org/x/time v0.14.0
5152
)
5253

5354
require (

go.sum

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -131,26 +131,6 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
131131
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
132132
github.com/linuxsuren/go-fake-runtime v0.0.5 h1:x1qvuGMfly3L4BTwx6Hq5oUcuf/1u0kSVPzQylHHpwI=
133133
github.com/linuxsuren/go-fake-runtime v0.0.5/go.mod h1:hlE6bZp76N3YPDsKi5YKOf1XmcJy4rvf8EtkTLYRYLw=
134-
github.com/linuxsuren/go-service v0.0.1 h1:GoeK2HLDlRh+QQvFlxOferGtDUwzO3YduumMJ0XYPJ8=
135-
github.com/linuxsuren/go-service v0.0.1/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
136-
github.com/linuxsuren/go-service v0.0.2-0.20251117075600-96234f59e3f2 h1:vy8Y8NA7vjZmHE+28v2Un4mtc4DG1XtXo66hbeQ4pXE=
137-
github.com/linuxsuren/go-service v0.0.2-0.20251117075600-96234f59e3f2/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
138-
github.com/linuxsuren/go-service v0.0.2-0.20251117081324-130f4c6054f7 h1:/xN+kJ5Vo+FCCjasmapVw5lRMwb6sgdJZqTu02kfNag=
139-
github.com/linuxsuren/go-service v0.0.2-0.20251117081324-130f4c6054f7/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
140-
github.com/linuxsuren/go-service v0.0.2-0.20251117081529-39b6694d1e30 h1:C9aOFP9tVFcDKlQAd3X4rU43s+VmS/R/BNzHKWD6uhU=
141-
github.com/linuxsuren/go-service v0.0.2-0.20251117081529-39b6694d1e30/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
142-
github.com/linuxsuren/go-service v0.0.2-0.20251117082747-764ea1ba3825 h1:6CwFWPq2DjFrW1gbH2FtKPlNPCm1j0vgYBl5/LWeT6Y=
143-
github.com/linuxsuren/go-service v0.0.2-0.20251117082747-764ea1ba3825/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
144-
github.com/linuxsuren/go-service v0.0.2-0.20251117083110-fbec39b2f85d h1:+kMcMI8rB9VbpcfWH8h3lOH7sYjT0+uq0EWsDf1byf4=
145-
github.com/linuxsuren/go-service v0.0.2-0.20251117083110-fbec39b2f85d/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
146-
github.com/linuxsuren/go-service v0.0.2-0.20251117083330-afb28a74b935 h1:bAFGUhlWuRla9Di1Fq7alY9Q9lXeLDgHMQdyLPVbVOg=
147-
github.com/linuxsuren/go-service v0.0.2-0.20251117083330-afb28a74b935/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
148-
github.com/linuxsuren/go-service v0.0.2-0.20251117083554-81682ffea100 h1:7uMuI3tJB53C4+dlBrfF4FaQ9YxY3KvatUSZL9Kgo8A=
149-
github.com/linuxsuren/go-service v0.0.2-0.20251117083554-81682ffea100/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
150-
github.com/linuxsuren/go-service v0.0.2-0.20251117084203-71bf4d3ebe0f h1:XYw35A2a2XafK57MSSoyDICrTw+TOcUWWT0cqHE/Khw=
151-
github.com/linuxsuren/go-service v0.0.2-0.20251117084203-71bf4d3ebe0f/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
152-
github.com/linuxsuren/go-service v0.0.2-0.20251117091757-3ae9fc74c5b9 h1:5jCZ8Xh4Bxpq9pwrs+T4CBVCfG4gVTpx45t3s/0gnxI=
153-
github.com/linuxsuren/go-service v0.0.2-0.20251117091757-3ae9fc74c5b9/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
154134
github.com/linuxsuren/go-service v0.0.2-0.20251117091849-c58edc8748d9 h1:w5prP6ROOxInPV38KL+0laf7ZDIHlidBerhrphHqWHU=
155135
github.com/linuxsuren/go-service v0.0.2-0.20251117091849-c58edc8748d9/go.mod h1:QX22v61PxpOfJa4Xug8qzGTbPjclDZFx2j1PlGLknJw=
156136
github.com/linuxsuren/http-downloader v0.0.99 h1:fEu+HkHdYeLM932c7IfmuaDJqWxVU5sIEnS/Aln8h9o=
@@ -334,6 +314,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
334314
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
335315
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
336316
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
317+
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
318+
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
337319
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
338320
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
339321
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=

pkg/limit/limiter.go

Lines changed: 0 additions & 91 deletions
This file was deleted.

pkg/limit/limiter_long_test.go

Lines changed: 0 additions & 54 deletions
This file was deleted.

pkg/limit/limiter_test.go

Lines changed: 0 additions & 29 deletions
This file was deleted.

pkg/runner/expr_function.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"net/http"
2525
"os"
2626
"os/exec"
27+
"runtime"
2728
"time"
2829

2930
"github.com/expr-lang/expr"
@@ -140,8 +141,18 @@ func init() {
140141
{
141142
Name: "command",
142143
Func: func(params ...interface{}) (res any, err error) {
144+
if len(params) < 1 {
145+
err = fmt.Errorf("the command param is required")
146+
return
147+
}
148+
149+
shParams := []string{"sh", "-c"}
150+
if runtime.GOOS == "windows" {
151+
shParams = []string{"cmd", "/c"}
152+
}
153+
143154
var output []byte
144-
output, err = exec.Command("sh", "-c", params[0].(string)).CombinedOutput()
155+
output, err = exec.Command(shParams[0], shParams[1], params[0].(string)).CombinedOutput()
145156
if output != nil {
146157
res = string(output)
147158
}

pkg/runner/expr_function_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"io"
2222
"net/http"
2323
"os"
24+
"path/filepath"
25+
"strings"
2426
"testing"
2527

2628
"github.com/expr-lang/expr"
@@ -144,16 +146,16 @@ func TestFunctions(t *testing.T) {
144146
expr: `command("echo 1")`,
145147
verify: func(t *testing.T, result any, resultErr error) {
146148
assert.NoError(t, resultErr)
147-
assert.Equal(t, "1\n", result)
149+
assert.Equal(t, "1", strings.TrimSpace(result.(string)))
148150
},
149151
}, {
150152
name: "writeFile",
151-
expr: fmt.Sprintf(`writeFile("%s", "hello")`, tmpFile.Name()),
153+
expr: fmt.Sprintf(`writeFile("%s", "hello")`, filepath.ToSlash(tmpFile.Name())),
152154
verify: func(t *testing.T, result any, resultErr error) {
153155
assert.NoError(t, resultErr)
154156

155157
data, err := io.ReadAll(tmpFile)
156-
assert.NoError(t, err)
158+
assert.NoError(t, err, "failed to read file: %v", err)
157159
assert.Equal(t, "hello", string(data))
158160
},
159161
}}
@@ -166,7 +168,7 @@ func TestFunctions(t *testing.T) {
166168
assert.Error(t, err, "%q %d", tt.name, i)
167169
return
168170
}
169-
if !assert.NotNil(t, program, "%q %d", tt.name, i) {
171+
if !assert.NotNil(t, program, "%q, index: %d, expr: %s: error: %v", tt.name, i, tt.expr, err) {
170172
return
171173
}
172174

pkg/server/remote_server_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,9 @@ func TestDuplicate(t *testing.T) {
507507
SourceSuiteName: "simple",
508508
TargetSuiteName: "simple2",
509509
})
510+
defer func() {
511+
_ = os.RemoveAll("simple2.yaml")
512+
}()
510513
assert.NoError(t, err)
511514

512515
// find the new test suite

0 commit comments

Comments
 (0)