rpcenc: Fix POST read
This commit is contained in:
parent
0c809d3a5f
commit
555c402ba3
@ -254,6 +254,10 @@ func (w *rpcReader) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *rpcReader) redirect(to string) bool {
|
func (w *rpcReader) redirect(to string) bool {
|
||||||
|
if w.postBody != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
done := false
|
done := false
|
||||||
|
|
||||||
w.beginOnce.Do(func() {
|
w.beginOnce.Do(func() {
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-jsonrpc"
|
"github.com/filecoin-project/go-jsonrpc"
|
||||||
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
|
sealing "github.com/filecoin-project/lotus/extern/storage-sealing"
|
||||||
@ -23,6 +24,18 @@ func (h *ReaderHandler) ReadAllApi(ctx context.Context, r io.Reader) ([]byte, er
|
|||||||
return h.readApi(ctx, r)
|
return h.readApi(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *ReaderHandler) ReadStartAndApi(ctx context.Context, r io.Reader) ([]byte, error) {
|
||||||
|
n, err := r.Read([]byte{0})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if n != 1 {
|
||||||
|
return nil, xerrors.Errorf("not one")
|
||||||
|
}
|
||||||
|
|
||||||
|
return h.readApi(ctx, r)
|
||||||
|
}
|
||||||
|
|
||||||
func (h *ReaderHandler) ReadAll(ctx context.Context, r io.Reader) ([]byte, error) {
|
func (h *ReaderHandler) ReadAll(ctx context.Context, r io.Reader) ([]byte, error) {
|
||||||
return ioutil.ReadAll(r)
|
return ioutil.ReadAll(r)
|
||||||
}
|
}
|
||||||
@ -121,6 +134,7 @@ func TestReaderRedirect(t *testing.T) {
|
|||||||
|
|
||||||
var redirClient struct {
|
var redirClient struct {
|
||||||
ReadAllApi func(ctx context.Context, r io.Reader) ([]byte, error)
|
ReadAllApi func(ctx context.Context, r io.Reader) ([]byte, error)
|
||||||
|
ReadStartAndApi func(ctx context.Context, r io.Reader) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -143,7 +157,13 @@ func TestReaderRedirect(t *testing.T) {
|
|||||||
defer closer()
|
defer closer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// redirect
|
||||||
read, err := redirClient.ReadAllApi(context.TODO(), strings.NewReader("rediracted pooooootato"))
|
read, err := redirClient.ReadAllApi(context.TODO(), strings.NewReader("rediracted pooooootato"))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, "rediracted pooooootato", string(read), "potatoes weren't equal")
|
require.Equal(t, "rediracted pooooootato", string(read), "potatoes weren't equal")
|
||||||
|
|
||||||
|
// proxy (because we started reading locally)
|
||||||
|
read, err = redirClient.ReadStartAndApi(context.TODO(), strings.NewReader("rediracted pooooootato"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "ediracted pooooootato", string(read), "otatoes weren't equal")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user