refactor(relay): move replay metadata onto request bodies

This commit is contained in:
CaIon
2026-08-06 17:33:10 +08:00
parent d6b5ce99de
commit ea4f021012
20 changed files with 211 additions and 267 deletions
+1 -3
View File
@@ -216,9 +216,7 @@ func (a *TaskAdaptor) BuildRequestBody(c *gin.Context, info *relaycommon.RelayIn
return &buf, nil
}
info.UpstreamRequestBodySize = storage.Size()
info.UpstreamRequestGetBody = storage.NewReader
return common.ReaderOnly(storage), nil
return common.NewReplayableBodyReader(storage), nil
}
// DoRequest delegates to common helper.
+5 -4
View File
@@ -14,7 +14,7 @@ import (
"github.com/stretchr/testify/require"
)
func TestSoraBuildRequestBodyBindsReplayMetadataForPassThrough(t *testing.T) {
func TestSoraBuildRequestBodyReturnsReplayablePassThroughBody(t *testing.T) {
payload := []byte("opaque-sora-request-body")
c, _ := gin.CreateTestContext(httptest.NewRecorder())
c.Request = httptest.NewRequest(http.MethodPost, "/v1/videos", bytes.NewReader(payload))
@@ -24,14 +24,15 @@ func TestSoraBuildRequestBodyBindsReplayMetadataForPassThrough(t *testing.T) {
info := &relaycommon.RelayInfo{}
body, err := (&TaskAdaptor{}).BuildRequestBody(c, info)
require.NoError(t, err)
replayable, ok := body.(common.ReplayableBody)
require.True(t, ok)
sent, err := io.ReadAll(body)
require.NoError(t, err)
assert.Equal(t, payload, sent)
assert.EqualValues(t, len(payload), info.UpstreamRequestBodySize)
require.NotNil(t, info.UpstreamRequestGetBody)
assert.EqualValues(t, len(payload), replayable.Size())
replayBody, err := info.UpstreamRequestGetBody()
replayBody, err := replayable.NewReader()
require.NoError(t, err)
replay, err := io.ReadAll(replayBody)
require.NoError(t, err)