@@ -3,6 +3,7 @@ package shard_test
33import (
44 "bytes"
55 "errors"
6+ "io"
67 "testing"
78 "time"
89
@@ -43,6 +44,7 @@ func testShardGet(t *testing.T, hasWriteCache bool) {
4344 require .Equal (t , obj , res )
4445
4546 testGetBytes (t , sh , addr , obj .Marshal ())
47+ testGetStream (t , sh , addr , obj )
4648 })
4749
4850 t .Run ("big object" , func (t * testing.T ) {
@@ -60,32 +62,38 @@ func testShardGet(t *testing.T, hasWriteCache bool) {
6062 require .Equal (t , obj , res )
6163
6264 testGetBytes (t , sh , addr , obj .Marshal ())
65+ testGetStream (t , sh , addr , obj )
6366 })
6467
6568 t .Run ("parent object" , func (t * testing.T ) {
66- obj := generateObject ()
67- addAttribute (obj , "foo" , "bar" )
6869 cnr := cidtest .ID ()
6970 splitID := objectSDK .NewSplitID ()
7071
7172 parent := generateObjectWithCID (cnr )
7273 addAttribute (parent , "parent" , "attribute" )
74+ parentAddr := object .AddressOf (parent )
7375
7476 child := generateObjectWithCID (cnr )
7577 child .SetParent (parent )
7678 idParent := parent .GetID ()
7779 child .SetParentID (idParent )
7880 child .SetSplitID (splitID )
7981 addPayload (child , 1 << 5 )
82+ childAddr := object .AddressOf (child )
8083
8184 err := sh .Put (child , nil )
8285 require .NoError (t , err )
8386
84- res , err := testGet (t , sh , object . AddressOf ( child ) , hasWriteCache )
87+ res , err := testGet (t , sh , childAddr , hasWriteCache )
8588 require .NoError (t , err )
8689 require .True (t , binaryEqual (child , res ))
8790
88- _ , err = testGet (t , sh , object .AddressOf (parent ), hasWriteCache )
91+ testGetStream (t , sh , childAddr , child )
92+
93+ _ , _ , streamErr := sh .GetStream (parentAddr , false )
94+ require .Error (t , streamErr )
95+ _ , err = testGet (t , sh , parentAddr , hasWriteCache )
96+ require .Equal (t , streamErr , err )
8997
9098 var si * objectSDK.SplitInfoError
9199 require .True (t , errors .As (err , & si ))
@@ -122,6 +130,18 @@ func testGetBytes(t testing.TB, sh *shard.Shard, addr oid.Address, objBin []byte
122130 require .Equal (t , objBin , b )
123131}
124132
133+ func testGetStream (t testing.TB , sh * shard.Shard , addr oid.Address , obj * objectSDK.Object ) {
134+ header , reader , err := sh .GetStream (addr , false )
135+ require .NoError (t , err )
136+ require .Equal (t , obj .CutPayload (), header )
137+
138+ data , err := io .ReadAll (reader )
139+ require .NoError (t , err )
140+ require .Equal (t , obj .Payload (), data )
141+
142+ require .NoError (t , reader .Close ())
143+ }
144+
125145// binary equal is used when object contains empty lists in the structure and
126146// require.Equal fails on comparing <nil> and []{} lists.
127147func binaryEqual (a , b * objectSDK.Object ) bool {
0 commit comments