11package getsvc
22
33import (
4+ "bytes"
45 "context"
56 "crypto/rand"
67 "errors"
78 "fmt"
9+ "io"
810 "strconv"
911 "testing"
12+ "time"
1013
1114 "github.com/nspcc-dev/neofs-node/pkg/core/client"
1215 netmapcore "github.com/nspcc-dev/neofs-node/pkg/core/netmap"
@@ -113,19 +116,28 @@ func newTestClient() *testClient {
113116 }
114117}
115118
116- func (c * testClient ) getObject (exec * execCtx , _ client.NodeInfo ) (* objectSDK.Object , error ) {
119+ func (c * testClient ) getObject (exec * execCtx , _ client.NodeInfo ) (* objectSDK.Object , io. ReadCloser , error ) {
117120 v , ok := c .results [exec .address ().EncodeToString ()]
118121 if ! ok {
119122 var errNotFound apistatus.ObjectNotFound
120123
121- return nil , errNotFound
124+ return nil , nil , errNotFound
122125 }
123126
124127 if v .err != nil {
125- return nil , v .err
128+ return nil , nil , v .err
126129 }
127130
128- return cutToRange (v .obj , exec .ctxRange ()), nil
131+ obj := cutToRange (v .obj , exec .ctxRange ())
132+
133+ if obj != nil && len (obj .Payload ()) > 0 {
134+ reader := io .NopCloser (bytes .NewReader (obj .Payload ()))
135+ objWithoutPayload := obj .CutPayload ()
136+ objWithoutPayload .SetPayloadSize (obj .PayloadSize ())
137+ return objWithoutPayload , reader , nil
138+ }
139+
140+ return obj , nil , nil
129141}
130142
131143func (c * testClient ) addResult (addr oid.Address , obj * objectSDK.Object , err error ) {
@@ -135,7 +147,7 @@ func (c *testClient) addResult(addr oid.Address, obj *objectSDK.Object, err erro
135147 }{obj : obj , err : err }
136148}
137149
138- func (s * testStorage ) get (exec * execCtx ) (* objectSDK.Object , error ) {
150+ func (s * testStorage ) get (exec * execCtx ) (* objectSDK.Object , io. ReadCloser , error ) {
139151 var (
140152 ok bool
141153 obj * objectSDK.Object
@@ -145,20 +157,29 @@ func (s *testStorage) get(exec *execCtx) (*objectSDK.Object, error) {
145157 if _ , ok = s .inhumed [sAddr ]; ok {
146158 var errRemoved apistatus.ObjectAlreadyRemoved
147159
148- return nil , errRemoved
160+ return nil , nil , errRemoved
149161 }
150162
151163 if info , ok := s .virtual [sAddr ]; ok {
152- return nil , objectSDK .NewSplitInfoError (info )
164+ return nil , nil , objectSDK .NewSplitInfoError (info )
153165 }
154166
155167 if obj , ok = s .phy [sAddr ]; ok {
156- return cutToRange (obj , exec .ctxRange ()), nil
168+ obj = cutToRange (obj , exec .ctxRange ())
169+
170+ if obj != nil && len (obj .Payload ()) > 0 {
171+ reader := io .NopCloser (bytes .NewReader (obj .Payload ()))
172+ objWithoutPayload := obj .CutPayload ()
173+ objWithoutPayload .SetPayloadSize (obj .PayloadSize ())
174+ return objWithoutPayload , reader , nil
175+ }
176+
177+ return obj , nil , nil
157178 }
158179
159180 var errNotFound apistatus.ObjectNotFound
160181
161- return nil , errNotFound
182+ return nil , nil , errNotFound
162183}
163184
164185func cutToRange (o * objectSDK.Object , rng * objectSDK.Range ) * objectSDK.Object {
@@ -476,7 +497,8 @@ func generateChain(ln int, cnr cid.ID) ([]*objectSDK.Object, []oid.ID, []byte) {
476497}
477498
478499func TestGetRemoteSmall (t * testing.T ) {
479- ctx := context .Background ()
500+ ctx , cancel := context .WithTimeout (context .Background (), 150 * time .Second )
501+ t .Cleanup (cancel )
480502
481503 var cnr container.Container
482504 cnr .SetPlacementPolicy (netmaptest .PlacementPolicy ())
0 commit comments