Skip to content

Commit

Permalink
test: add test cases for mixed retry (#87)
Browse files Browse the repository at this point in the history
  • Loading branch information
YangruiEmma authored Sep 3, 2024
1 parent a950718 commit 753be74
Showing 1 changed file with 119 additions and 2 deletions.
121 changes: 119 additions & 2 deletions thriftrpc/retrycall/mixedretry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/cloudwego/kitex/transport"

"github.com/cloudwego/kitex-tests/kitex_gen/thrift/stability"
"github.com/cloudwego/kitex-tests/kitex_gen/thrift/stability/stservice"
"github.com/cloudwego/kitex-tests/pkg/test"
"github.com/cloudwego/kitex-tests/thriftrpc"
)
Expand Down Expand Up @@ -341,12 +342,128 @@ func TestMockCase4WithDiffRetry(t *testing.T) {
})
}

func TestMixedRetryWithDiffConfigurationMethod(t *testing.T) {
rpcCall := func(cli stservice.Client) {
ctx, stReq := thriftrpc.CreateSTRequest(context.Background())
stReq.FlagMsg = mockTypeCustomizedResp
start := time.Now()
resp, err := cli.TestSTReq(ctx, stReq)
cost := time.Since(start)
test.Assert(t, err == nil, err)
test.Assert(t, resp.FlagMsg == "0", resp.FlagMsg)
test.Assert(t, math.Abs(float64(cost.Milliseconds())-450.0) < 50.0, cost.Milliseconds())
}

t.Run("mixed retry with NewMixedPolicy", func(t *testing.T) {
mp := retry.NewMixedPolicy(100)
mp.WithMaxRetryTimes(3)

rCli := getKitexClient(
transport.TTHeader,
client.WithMixedRetry(mp),
client.WithSpecifiedResultRetry(resultRetry),
client.WithMiddleware(controlRespMW),
)
rpcCall(rCli)
})

t.Run("mixed retry with NewMixedPolicyWithResultRetry", func(t *testing.T) {
mp := retry.NewMixedPolicyWithResultRetry(100, resultRetry)
mp.WithMaxRetryTimes(3)

rCli := getKitexClient(
transport.TTHeader,
client.WithMixedRetry(mp),
client.WithMiddleware(controlRespMW),
)
rpcCall(rCli)
})

t.Run("mixed retry with callop", func(t *testing.T) {
mp := retry.NewMixedPolicyWithResultRetry(100, resultRetry)
mp.WithMaxRetryTimes(3)

rCli := getKitexClient(
transport.TTHeader,
client.WithMiddleware(controlRespMW),
)

ctx, stReq := thriftrpc.CreateSTRequest(context.Background())
stReq.FlagMsg = mockTypeCustomizedResp
start := time.Now()
resp, err := rCli.TestSTReq(ctx, stReq, callopt.WithRetryPolicy(retry.BuildMixedPolicy(mp)))
cost := time.Since(start)
test.Assert(t, err == nil, err)
test.Assert(t, resp.FlagMsg == "0", resp.FlagMsg)
test.Assert(t, math.Abs(float64(cost.Milliseconds())-450.0) < 50.0, cost.Milliseconds())
})

t.Run("mixed retry with NotifyPolicyChange", func(t *testing.T) {
mp := retry.NewMixedPolicy(100)
mp.WithMaxRetryTimes(3)
rc := retry.NewRetryContainer()
rc.NotifyPolicyChange("*", retry.BuildMixedPolicy(mp))

rCli := getKitexClient(
transport.TTHeader,
client.WithRetryContainer(rc),
client.WithSpecifiedResultRetry(resultRetry),
client.WithMiddleware(controlRespMW),
)
rpcCall(rCli)
})
}

func TestMixedRetryWithNotifyPolicyChange(t *testing.T) {
t.Run("mixed retry with result retry", func(t *testing.T) {
mp := retry.NewMixedPolicy(100)
mp.WithMaxRetryTimes(3)
rc := retry.NewRetryContainer()
rc.NotifyPolicyChange("*", retry.BuildMixedPolicy(mp))

rCli := getKitexClient(
transport.TTHeader,
client.WithRetryContainer(rc),
client.WithSpecifiedResultRetry(resultRetry),
client.WithMiddleware(controlRespMW),
)

ctx, stReq := thriftrpc.CreateSTRequest(context.Background())
stReq.FlagMsg = mockTypeCustomizedResp
start := time.Now()
resp, err := rCli.TestSTReq(ctx, stReq)
cost := time.Since(start)
test.Assert(t, err == nil, err)
test.Assert(t, resp.FlagMsg == "0", resp.FlagMsg)
test.Assert(t, math.Abs(float64(cost.Milliseconds())-450.0) < 50.0, cost.Milliseconds())
})

t.Run("mixed retry with error retry", func(t *testing.T) {
mp := retry.NewMixedPolicy(100)
mp.WithMaxRetryTimes(3)
rc := retry.NewRetryContainer()
rc.NotifyPolicyChange("testSTReq", retry.BuildMixedPolicy(mp))

rCli := getKitexClient(
transport.TTHeader,
client.WithRetryContainer(rc),
client.WithSpecifiedResultRetry(errRetry),
client.WithMiddleware(controlErrMW),
)

ctx, stReq := thriftrpc.CreateSTRequest(context.Background())
stReq.FlagMsg = mockTypeReturnTransErr
resp, err := rCli.TestSTReq(ctx, stReq)
test.Assert(t, err == nil, err)
test.Assert(t, resp.FlagMsg == "0", resp.FlagMsg)
})
}

func BenchmarkMixedRetry(b *testing.B) {
mp := retry.NewMixedPolicy(100)
mp := retry.NewMixedPolicyWithResultRetry(100, errRetry)
mp.WithMaxRetryTimes(3)
rCli := getKitexClient(
transport.TTHeader,
client.WithSpecifiedResultRetry(errRetry),
client.WithMixedRetry(mp),
client.WithMiddleware(controlErrMW),
)
Expand Down

0 comments on commit 753be74

Please sign in to comment.