@@ -406,13 +406,13 @@ func (s *BackendExecutionDataSuite) TestGetExecutionDataByBlockID() {
406406 })
407407
408408 s .Run ("execution result info returns unexpected error" , func () {
409- expectedErr := fmt .Errorf ("failed to get execution result info for block: %w" , storage .ErrDataMismatch )
409+ exception := fmt .Errorf ("failed to get execution result info for block: %w" , storage .ErrDataMismatch )
410410 s .executionResultProvider .
411411 On ("ExecutionResultInfo" , block .ID (), mock .Anything ).
412412 Return (nil , storage .ErrDataMismatch ).
413413 Once ()
414414
415- ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , expectedErr )
415+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
416416 ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
417417
418418 execDataRes , metadata , err := s .backend .GetExecutionDataByBlockID (ctxIrr , block .ID (), s .criteria )
@@ -451,13 +451,13 @@ func (s *BackendExecutionDataSuite) TestGetExecutionDataByBlockID() {
451451 }, nil ).
452452 Once ()
453453
454- expectedError := fmt .Errorf ("unexpected error" )
454+ exception := fmt .Errorf ("unexpected error" )
455455 s .executionStateCache .
456456 On ("Snapshot" , result .ID ()).
457- Return (nil , expectedError ).
457+ Return (nil , exception ).
458458 Once ()
459459
460- ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , expectedError )
460+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
461461 ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
462462
463463 execDataRes , metadata , err := s .backend .GetExecutionDataByBlockID (ctxIrr , block .ID (), s .criteria )
@@ -522,8 +522,8 @@ func (s *BackendExecutionDataSuite) TestGetExecutionDataByBlockID() {
522522 Return (nil , storage .ErrDataMismatch ).
523523 Once ()
524524
525- expectedError := fmt .Errorf ("unexpected error getting execution data: %w" , storage .ErrDataMismatch )
526- ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , expectedError )
525+ exception := fmt .Errorf ("unexpected error getting execution data: %w" , storage .ErrDataMismatch )
526+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
527527 ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
528528
529529 execDataRes , metadata , err := s .backend .GetExecutionDataByBlockID (ctxIrr , block .ID (), s .criteria )
@@ -897,6 +897,9 @@ func (s *BackendExecutionDataSuite) TestSubscribeExecutionDataHandlesErrors() {
897897// TestGetRegisterValues tests that GetRegisterValues correctly returns register data
898898// in normal conditions and propagates appropriate errors for all failure scenarios.
899899func (s * BackendExecutionDataSuite ) TestGetRegisterValues () {
900+ ctx , cancel := context .WithCancel (context .Background ())
901+ defer cancel ()
902+
900903 block := s .blocks [0 ]
901904 seal := s .sealMap [block .ID ()]
902905 result := s .resultMap [seal .ResultID ]
@@ -928,41 +931,60 @@ func (s *BackendExecutionDataSuite) TestGetRegisterValues() {
928931 expectedRegister := flow .RegisterValue ("value0" )
929932 s .registers .On ("Get" , s .registerID , block .Height ).Return (expectedRegister , nil ).Once ()
930933
931- res , resMetadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
934+ res , resMetadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
932935
933936 require .Equal (s .T (), []flow.RegisterValue {expectedRegister }, res )
934937 require .Equal (s .T (), metadata , resMetadata )
935938 require .NoError (s .T (), err )
936939 })
937940
938941 s .Run ("returns error if too many registers are requested" , func () {
939- res , metadata , err := s .backend .GetRegisterValues (make (flow.RegisterIDs , s .backend .registerRequestLimit + 1 ), block .Height , s .criteria )
942+ res , metadata , err := s .backend .GetRegisterValues (ctx , make (flow.RegisterIDs , s .backend .registerRequestLimit + 1 ), block .Height , s .criteria )
940943
941944 require .Nil (s .T (), res )
942945 require .Nil (s .T (), metadata )
943- require .Equal (s .T (), codes .InvalidArgument , status .Code (err ))
946+ require .Error (s .T (), err )
947+ require .True (s .T (), access .IsInvalidRequestError (err ))
944948 })
945949
946950 s .Run ("returns error if failed to get execution result info for block - insufficient receipts" , func () {
947951 s .executionResultProvider .
948952 On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
949953 Return (nil , common .NewInsufficientExecutionReceipts (block .ID (), 0 )).Once ()
950954
951- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
955+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
952956 require .Nil (s .T (), res )
953957 require .Nil (s .T (), metadata )
954- require .Equal (s .T (), codes .NotFound , status .Code (err ))
958+ require .Error (s .T (), err )
959+ require .True (s .T (), access .IsDataNotFoundError (err ))
955960 })
956961
957962 s .Run ("returns error if failed to get execution result info for block - not found" , func () {
958963 s .executionResultProvider .
959964 On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
960965 Return (nil , storage .ErrNotFound ).Once ()
961966
962- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
967+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
968+ require .Nil (s .T (), res )
969+ require .Nil (s .T (), metadata )
970+ require .Error (s .T (), err )
971+ require .True (s .T (), access .IsDataNotFoundError (err ))
972+ })
973+
974+ s .Run ("execution result info returns unexpected error" , func () {
975+ exception := fmt .Errorf ("failed to get execution result info for block: %w" , storage .ErrDataMismatch )
976+
977+ s .executionResultProvider .
978+ On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
979+ Return (nil , storage .ErrDataMismatch ).Once ()
980+
981+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
982+ ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
983+
984+ res , metadata , err := s .backend .GetRegisterValues (ctxIrr , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
963985 require .Nil (s .T (), res )
964986 require .Nil (s .T (), metadata )
965- require .Equal (s .T (), codes . NotFound , status . Code ( err ) )
987+ require .Error (s .T (), err )
966988 })
967989
968990 s .Run ("returns error when snapshot is not found" , func () {
@@ -978,10 +1000,34 @@ func (s *BackendExecutionDataSuite) TestGetRegisterValues() {
9781000 Return (nil , storage .ErrNotFound ).
9791001 Once ()
9801002
981- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1003+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
9821004 require .Nil (s .T (), res )
9831005 require .Nil (s .T (), metadata )
984- require .Equal (s .T (), codes .NotFound , status .Code (err ))
1006+ require .Error (s .T (), err )
1007+ require .True (s .T (), access .IsDataNotFoundError (err ))
1008+ })
1009+
1010+ s .Run ("snapshot returns unexpected error" , func () {
1011+ s .executionResultProvider .
1012+ On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
1013+ Return (& optimistic_sync.ExecutionResultInfo {
1014+ ExecutionResultID : result .ID (),
1015+ ExecutionNodes : executionNodes .ToSkeleton (),
1016+ }, nil ).Once ()
1017+
1018+ exception := fmt .Errorf ("unexpected error" )
1019+ s .executionStateCache .
1020+ On ("Snapshot" , result .ID ()).
1021+ Return (nil , exception ).
1022+ Once ()
1023+
1024+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
1025+ ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
1026+
1027+ execDataRes , metadata , err := s .backend .GetExecutionDataByBlockID (ctxIrr , block .ID (), s .criteria )
1028+ assert .Nil (s .T (), execDataRes )
1029+ assert .Nil (s .T (), metadata )
1030+ assert .Error (s .T (), err )
9851031 })
9861032
9871033 s .Run ("returns error if the storage is still bootstrapping." , func () {
@@ -999,10 +1045,36 @@ func (s *BackendExecutionDataSuite) TestGetRegisterValues() {
9991045
10001046 s .executionDataSnapshot .On ("Registers" ).Return (nil , indexer .ErrIndexNotInitialized ).Once ()
10011047
1002- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1048+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1049+ require .Nil (s .T (), res )
1050+ require .Nil (s .T (), metadata )
1051+ require .Error (s .T (), err )
1052+ require .True (s .T (), access .IsPreconditionFailedError (err ))
1053+ })
1054+
1055+ s .Run ("registers returns unexpected error" , func () {
1056+ s .executionResultProvider .
1057+ On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
1058+ Return (& optimistic_sync.ExecutionResultInfo {
1059+ ExecutionResultID : result .ID (),
1060+ ExecutionNodes : executionNodes .ToSkeleton (),
1061+ }, nil ).Once ()
1062+
1063+ s .executionStateCache .
1064+ On ("Snapshot" , result .ID ()).
1065+ Return (s .executionDataSnapshot , nil ).
1066+ Once ()
1067+
1068+ exception := fmt .Errorf ("unexpected error" )
1069+ s .executionDataSnapshot .On ("Registers" ).Return (nil , exception ).Once ()
1070+
1071+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
1072+ ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
1073+
1074+ res , metadata , err := s .backend .GetRegisterValues (ctxIrr , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
10031075 require .Nil (s .T (), res )
10041076 require .Nil (s .T (), metadata )
1005- require .Equal (s .T (), codes . FailedPrecondition , status . Code ( err ) )
1077+ require .Error (s .T (), err )
10061078 })
10071079
10081080 s .Run ("returns error if the requested height is outside the range of indexed blocks" , func () {
@@ -1022,10 +1094,34 @@ func (s *BackendExecutionDataSuite) TestGetRegisterValues() {
10221094
10231095 s .registers .On ("Get" , s .registerID , block .Height ).Return (nil , storage .ErrHeightNotIndexed ).Once ()
10241096
1025- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1097+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1098+ require .Nil (s .T (), res )
1099+ require .Nil (s .T (), metadata )
1100+ require .Error (s .T (), err )
1101+ require .ErrorIs (s .T (), err , storage .ErrHeightNotIndexed )
1102+ })
1103+
1104+ s .Run ("returns error if block or registerSnapshot value at height was not found" , func () {
1105+ s .executionResultProvider .
1106+ On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
1107+ Return (& optimistic_sync.ExecutionResultInfo {
1108+ ExecutionResultID : result .ID (),
1109+ ExecutionNodes : executionNodes .ToSkeleton (),
1110+ }, nil ).Once ()
1111+
1112+ s .executionStateCache .
1113+ On ("Snapshot" , result .ID ()).
1114+ Return (s .executionDataSnapshot , nil ).
1115+ Once ()
1116+
1117+ s .executionDataSnapshot .On ("Registers" ).Return (s .registers , nil ).Once ()
1118+ s .registers .On ("Get" , s .registerID , block .Height ).Return (nil , storage .ErrNotFound ).Once ()
1119+
1120+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
10261121 require .Nil (s .T (), res )
10271122 require .Nil (s .T (), metadata )
1028- require .Equal (s .T (), codes .OutOfRange , status .Code (err ))
1123+ require .Error (s .T (), err )
1124+ require .True (s .T (), access .IsDataNotFoundError (err ))
10291125 })
10301126
10311127 s .Run ("returns error if block or registerSnapshot value at height was not found" , func () {
@@ -1044,19 +1140,48 @@ func (s *BackendExecutionDataSuite) TestGetRegisterValues() {
10441140 s .executionDataSnapshot .On ("Registers" ).Return (s .registers , nil ).Once ()
10451141 s .registers .On ("Get" , s .registerID , block .Height ).Return (nil , storage .ErrNotFound ).Once ()
10461142
1047- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1143+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1144+ require .Nil (s .T (), res )
1145+ require .Nil (s .T (), metadata )
1146+ require .Error (s .T (), err )
1147+ require .True (s .T (), access .IsDataNotFoundError (err ))
1148+ })
1149+
1150+ s .Run ("registers Get returns unexpected error" , func () {
1151+ s .executionResultProvider .
1152+ On ("ExecutionResultInfo" , block .ToHeader ().ID (), mock .Anything ).
1153+ Return (& optimistic_sync.ExecutionResultInfo {
1154+ ExecutionResultID : result .ID (),
1155+ ExecutionNodes : executionNodes .ToSkeleton (),
1156+ }, nil ).Once ()
1157+
1158+ s .executionStateCache .
1159+ On ("Snapshot" , result .ID ()).
1160+ Return (s .executionDataSnapshot , nil ).
1161+ Once ()
1162+
1163+ s .executionDataSnapshot .On ("Registers" ).Return (s .registers , nil ).Once ()
1164+
1165+ exception := fmt .Errorf ("failed to get register by the register ID at a given block height: %w" , storage .ErrDataMismatch )
1166+ ctxSignaler := irrecoverable .NewMockSignalerContextExpectError (s .T (), ctx , exception )
1167+ ctxIrr := irrecoverable .WithSignalerContext (ctx , ctxSignaler )
1168+
1169+ s .registers .On ("Get" , s .registerID , block .Height ).Return (nil , storage .ErrDataMismatch ).Once ()
1170+
1171+ res , metadata , err := s .backend .GetRegisterValues (ctxIrr , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
10481172 require .Nil (s .T (), res )
10491173 require .Nil (s .T (), metadata )
1050- require .Equal (s .T (), codes . NotFound , status . Code ( err ) )
1174+ require .Error (s .T (), err )
10511175 })
10521176
10531177 s .Run ("returns error if no finalized block is known at the given height" , func () {
10541178 s .headers .On ("ByHeight" , block .Height ).Unset ()
10551179 s .headers .On ("ByHeight" , block .Height ).Return (nil , storage .ErrNotFound )
10561180
1057- res , metadata , err := s .backend .GetRegisterValues (flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
1181+ res , metadata , err := s .backend .GetRegisterValues (ctx , flow.RegisterIDs {s .registerID }, block .Height , s .criteria )
10581182 require .Nil (s .T (), res )
10591183 require .Nil (s .T (), metadata )
1060- require .Equal (s .T (), codes .NotFound , status .Code (err ))
1184+ require .Error (s .T (), err )
1185+ require .True (s .T (), access .IsDataNotFoundError (err ))
10611186 })
10621187}
0 commit comments