Skip to content

Commit 533123a

Browse files
authored
Merge pull request #6636 from The-K-R-O-K/UlyanaAndrukhiv/6585-block-data-provider
[Access] Add implementation BlockProvider
2 parents 85913ad + f8668ef commit 533123a

40 files changed

+1463
-276
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ generate-mocks: install-mock-generators
203203
mockery --name 'API' --dir="./engine/protocol" --case=underscore --output="./engine/protocol/mock" --outpkg="mock"
204204
mockery --name '.*' --dir="./engine/access/state_stream" --case=underscore --output="./engine/access/state_stream/mock" --outpkg="mock"
205205
mockery --name 'BlockTracker' --dir="./engine/access/subscription" --case=underscore --output="./engine/access/subscription/mock" --outpkg="mock"
206-
mockery --name 'DataProvider' --dir="./engine/access/rest/websockets/data_provider" --case=underscore --output="./engine/access/rest/websockets/data_provider/mock" --outpkg="mock"
206+
mockery --name 'DataProvider' --dir="./engine/access/rest/websockets/data_providers" --case=underscore --output="./engine/access/rest/websockets/data_providers/mock" --outpkg="mock"
207+
mockery --name 'DataProviderFactory' --dir="./engine/access/rest/websockets/data_providers" --case=underscore --output="./engine/access/rest/websockets/data_providers/mock" --outpkg="mock"
207208
mockery --name 'ExecutionDataTracker' --dir="./engine/access/subscription" --case=underscore --output="./engine/access/subscription/mock" --outpkg="mock"
208209
mockery --name 'ConnectionFactory' --dir="./engine/access/rpc/connection" --case=underscore --output="./engine/access/rpc/connection/mock" --outpkg="mock"
209210
mockery --name 'Communicator' --dir="./engine/access/rpc/backend" --case=underscore --output="./engine/access/rpc/backend/mock" --outpkg="mock"

access/handler.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ func (h *Handler) SubscribeBlocksFromStartBlockID(request *access.SubscribeBlock
10661066
}
10671067

10681068
sub := h.api.SubscribeBlocksFromStartBlockID(stream.Context(), startBlockID, blockStatus)
1069-
return subscription.HandleSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
1069+
return subscription.HandleRPCSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
10701070
}
10711071

10721072
// SubscribeBlocksFromStartHeight handles subscription requests for blocks started from block height.
@@ -1093,7 +1093,7 @@ func (h *Handler) SubscribeBlocksFromStartHeight(request *access.SubscribeBlocks
10931093
}
10941094

10951095
sub := h.api.SubscribeBlocksFromStartHeight(stream.Context(), request.GetStartBlockHeight(), blockStatus)
1096-
return subscription.HandleSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
1096+
return subscription.HandleRPCSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
10971097
}
10981098

10991099
// SubscribeBlocksFromLatest handles subscription requests for blocks started from latest sealed block.
@@ -1120,7 +1120,7 @@ func (h *Handler) SubscribeBlocksFromLatest(request *access.SubscribeBlocksFromL
11201120
}
11211121

11221122
sub := h.api.SubscribeBlocksFromLatest(stream.Context(), blockStatus)
1123-
return subscription.HandleSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
1123+
return subscription.HandleRPCSubscription(sub, h.handleBlocksResponse(stream.Send, request.GetFullBlockResponse(), blockStatus))
11241124
}
11251125

11261126
// handleBlocksResponse handles the subscription to block updates and sends
@@ -1179,7 +1179,7 @@ func (h *Handler) SubscribeBlockHeadersFromStartBlockID(request *access.Subscrib
11791179
}
11801180

11811181
sub := h.api.SubscribeBlockHeadersFromStartBlockID(stream.Context(), startBlockID, blockStatus)
1182-
return subscription.HandleSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
1182+
return subscription.HandleRPCSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
11831183
}
11841184

11851185
// SubscribeBlockHeadersFromStartHeight handles subscription requests for block headers started from block height.
@@ -1206,7 +1206,7 @@ func (h *Handler) SubscribeBlockHeadersFromStartHeight(request *access.Subscribe
12061206
}
12071207

12081208
sub := h.api.SubscribeBlockHeadersFromStartHeight(stream.Context(), request.GetStartBlockHeight(), blockStatus)
1209-
return subscription.HandleSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
1209+
return subscription.HandleRPCSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
12101210
}
12111211

12121212
// SubscribeBlockHeadersFromLatest handles subscription requests for block headers started from latest sealed block.
@@ -1233,7 +1233,7 @@ func (h *Handler) SubscribeBlockHeadersFromLatest(request *access.SubscribeBlock
12331233
}
12341234

12351235
sub := h.api.SubscribeBlockHeadersFromLatest(stream.Context(), blockStatus)
1236-
return subscription.HandleSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
1236+
return subscription.HandleRPCSubscription(sub, h.handleBlockHeadersResponse(stream.Send))
12371237
}
12381238

12391239
// handleBlockHeadersResponse handles the subscription to block updates and sends
@@ -1293,7 +1293,7 @@ func (h *Handler) SubscribeBlockDigestsFromStartBlockID(request *access.Subscrib
12931293
}
12941294

12951295
sub := h.api.SubscribeBlockDigestsFromStartBlockID(stream.Context(), startBlockID, blockStatus)
1296-
return subscription.HandleSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
1296+
return subscription.HandleRPCSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
12971297
}
12981298

12991299
// SubscribeBlockDigestsFromStartHeight handles subscription requests for lightweight blocks started from block height.
@@ -1320,7 +1320,7 @@ func (h *Handler) SubscribeBlockDigestsFromStartHeight(request *access.Subscribe
13201320
}
13211321

13221322
sub := h.api.SubscribeBlockDigestsFromStartHeight(stream.Context(), request.GetStartBlockHeight(), blockStatus)
1323-
return subscription.HandleSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
1323+
return subscription.HandleRPCSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
13241324
}
13251325

13261326
// SubscribeBlockDigestsFromLatest handles subscription requests for lightweight block started from latest sealed block.
@@ -1347,7 +1347,7 @@ func (h *Handler) SubscribeBlockDigestsFromLatest(request *access.SubscribeBlock
13471347
}
13481348

13491349
sub := h.api.SubscribeBlockDigestsFromLatest(stream.Context(), blockStatus)
1350-
return subscription.HandleSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
1350+
return subscription.HandleRPCSubscription(sub, h.handleBlockDigestsResponse(stream.Send))
13511351
}
13521352

13531353
// handleBlockDigestsResponse handles the subscription to block updates and sends
@@ -1433,7 +1433,7 @@ func (h *Handler) SendAndSubscribeTransactionStatuses(
14331433
sub := h.api.SubscribeTransactionStatuses(ctx, &tx, request.GetEventEncodingVersion())
14341434

14351435
messageIndex := counters.NewMonotonousCounter(0)
1436-
return subscription.HandleSubscription(sub, func(txResults []*TransactionResult) error {
1436+
return subscription.HandleRPCSubscription(sub, func(txResults []*TransactionResult) error {
14371437
for i := range txResults {
14381438
index := messageIndex.Value()
14391439
if ok := messageIndex.Set(index + 1); !ok {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package parser
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/onflow/flow-go/model/flow"
7+
)
8+
9+
// Finalized and Sealed represents the status of a block.
10+
// It is used in rest arguments to provide block status.
11+
const (
12+
Finalized = "finalized"
13+
Sealed = "sealed"
14+
)
15+
16+
func ParseBlockStatus(blockStatus string) (flow.BlockStatus, error) {
17+
switch blockStatus {
18+
case Finalized:
19+
return flow.BlockStatusFinalized, nil
20+
case Sealed:
21+
return flow.BlockStatusSealed, nil
22+
}
23+
return flow.BlockStatusUnknown, fmt.Errorf("invalid 'block_status', must be '%s' or '%s'", Finalized, Sealed)
24+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package parser
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
9+
"github.com/onflow/flow-go/model/flow"
10+
)
11+
12+
// TestParseBlockStatus_Invalid tests the ParseBlockStatus function with invalid inputs.
13+
// It verifies that for each invalid block status string, the function returns an error
14+
// matching the expected error message format.
15+
func TestParseBlockStatus_Invalid(t *testing.T) {
16+
tests := []string{"unknown", "pending", ""}
17+
expectedErr := fmt.Sprintf("invalid 'block_status', must be '%s' or '%s'", Finalized, Sealed)
18+
19+
for _, input := range tests {
20+
_, err := ParseBlockStatus(input)
21+
assert.EqualError(t, err, expectedErr)
22+
}
23+
}
24+
25+
// TestParseBlockStatus_Valid tests the ParseBlockStatus function with valid inputs.
26+
// It ensures that the function returns the correct flow.BlockStatus for valid status
27+
// strings "finalized" and "sealed" without errors.
28+
func TestParseBlockStatus_Valid(t *testing.T) {
29+
tests := map[string]flow.BlockStatus{
30+
Finalized: flow.BlockStatusFinalized,
31+
Sealed: flow.BlockStatusSealed,
32+
}
33+
34+
for input, expectedStatus := range tests {
35+
status, err := ParseBlockStatus(input)
36+
assert.NoError(t, err)
37+
assert.Equal(t, expectedStatus, status)
38+
}
39+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package request
1+
package parser
22

33
import (
44
"errors"

engine/access/rest/http/request/id_test.go renamed to engine/access/rest/common/parser/id_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package request
1+
package parser
22

33
import (
44
"testing"

engine/access/rest/http/request/get_block.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55

66
"github.com/onflow/flow-go/engine/access/rest/common"
7+
"github.com/onflow/flow-go/engine/access/rest/common/parser"
78
"github.com/onflow/flow-go/model/flow"
89
)
910

@@ -122,7 +123,7 @@ func (g *GetBlockByIDs) Build(r *common.Request) error {
122123
}
123124

124125
func (g *GetBlockByIDs) Parse(rawIds []string) error {
125-
var ids IDs
126+
var ids parser.IDs
126127
err := ids.Parse(rawIds)
127128
if err != nil {
128129
return err

engine/access/rest/http/request/get_events.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55

66
"github.com/onflow/flow-go/engine/access/rest/common"
7+
"github.com/onflow/flow-go/engine/access/rest/common/parser"
78
"github.com/onflow/flow-go/model/flow"
89
)
910

@@ -50,7 +51,7 @@ func (g *GetEvents) Parse(rawType string, rawStart string, rawEnd string, rawBlo
5051
}
5152
g.EndHeight = height.Flow()
5253

53-
var blockIDs IDs
54+
var blockIDs parser.IDs
5455
err = blockIDs.Parse(rawBlockIDs)
5556
if err != nil {
5657
return err

engine/access/rest/http/request/get_execution_result.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55

66
"github.com/onflow/flow-go/engine/access/rest/common"
7+
"github.com/onflow/flow-go/engine/access/rest/common/parser"
78
"github.com/onflow/flow-go/model/flow"
89
)
910

@@ -30,7 +31,7 @@ func (g *GetExecutionResultByBlockIDs) Build(r *common.Request) error {
3031
}
3132

3233
func (g *GetExecutionResultByBlockIDs) Parse(rawIDs []string) error {
33-
var ids IDs
34+
var ids parser.IDs
3435
err := ids.Parse(rawIDs)
3536
if err != nil {
3637
return err

engine/access/rest/http/request/get_script.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"io"
66

77
"github.com/onflow/flow-go/engine/access/rest/common"
8+
"github.com/onflow/flow-go/engine/access/rest/common/parser"
89
"github.com/onflow/flow-go/model/flow"
910
)
1011

@@ -42,7 +43,7 @@ func (g *GetScript) Parse(rawHeight string, rawID string, rawScript io.Reader) e
4243
}
4344
g.BlockHeight = height.Flow()
4445

45-
var id ID
46+
var id parser.ID
4647
err = id.Parse(rawID)
4748
if err != nil {
4849
return err

0 commit comments

Comments
 (0)