diff --git a/client/session_test.go b/client/session_test.go new file mode 100644 index 00000000..d2fb26a5 --- /dev/null +++ b/client/session_test.go @@ -0,0 +1,74 @@ +package client + +import ( + "context" + "testing" + + v2netmap "github.com/nspcc-dev/neofs-api-go/v2/netmap" + "github.com/nspcc-dev/neofs-api-go/v2/rpc/client" + "github.com/nspcc-dev/neofs-api-go/v2/session" + neofscrypto "github.com/nspcc-dev/neofs-sdk-go/crypto" + "github.com/nspcc-dev/neofs-sdk-go/crypto/test" + "github.com/stretchr/testify/require" +) + +type sessionAPIServer struct { + signer neofscrypto.Signer + setBody func(body *session.CreateResponseBody) +} + +func (m sessionAPIServer) netMapSnapshot(context.Context, v2netmap.SnapshotRequest) (*v2netmap.SnapshotResponse, error) { + return nil, nil +} + +func (m sessionAPIServer) createSession(*client.Client, *session.CreateRequest, ...client.CallOption) (*session.CreateResponse, error) { + var body session.CreateResponseBody + m.setBody(&body) + + var resp session.CreateResponse + resp.SetBody(&body) + + if err := signServiceMessage(m.signer, &resp); err != nil { + return nil, err + } + + return &resp, nil +} + +func TestClient_SessionCreate(t *testing.T) { + ctx := context.Background() + signer := test.RandomSignerRFC6979(t) + + var prmInit PrmInit + prmInit.SetDefaultSigner(signer) + prmInit.ResolveNeoFSFailures() + + var c Client + c.Init(prmInit) + + var prmSessionCreate PrmSessionCreate + prmSessionCreate.UseSigner(signer) + prmSessionCreate.SetExp(1) + + t.Run("missing session id", func(t *testing.T) { + c.setNeoFSAPIServer(&sessionAPIServer{signer: signer, setBody: func(body *session.CreateResponseBody) { + body.SetSessionKey([]byte{1}) + }}) + + result, err := c.SessionCreate(ctx, prmSessionCreate) + require.Nil(t, result) + require.ErrorIs(t, err, errMissingResponseField) + require.Equal(t, "missing session id field in the response", err.Error()) + }) + + t.Run("missing session key", func(t *testing.T) { + c.setNeoFSAPIServer(&sessionAPIServer{signer: signer, setBody: func(body *session.CreateResponseBody) { + body.SetID([]byte{1}) + }}) + + result, err := c.SessionCreate(ctx, prmSessionCreate) + require.Nil(t, result) + require.ErrorIs(t, err, errMissingResponseField) + require.Equal(t, "missing session key field in the response", err.Error()) + }) +}